Բովանդակություն:
- Քայլ 1. Սարքավորումների ցուցակ (վերցրեք տախտակի լուսանկարը և Քևինի կոմպը)
- Քայլ 2: Ակնարկ
- Քայլ 3: Wav ֆայլ
- Քայլ 4: Python- Pylab- ի և Scipy- ի օգտագործումը
- Քայլ 5. Python- նմուշառում և FFT (Codeուցադրել ծածկագիրը և դրա արդյունքները)
- Քայլ 6: Vivado (Համեմատող)
- Քայլ 7. BASYS 3 -ի նկարներ Տախտակ
- Քայլ 8: Vivado (7 հատվածի ապակոդավորիչ ՝ բազմապատկմամբ)
- Քայլ 9: Vivado (բաղադրիչների համակցում)
Video: Թյուներ `9 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:51
Այս նախագիծը նախատեսված էր Vivado- ի և 7 հատվածից բաղկացած ցուցադրման միջոցով կիթառի կարգավորիչ պատրաստելու համար: Երբ լարողը գտնում է մուտքագրվող ձայնի հաճախականությունը, թյուներն այդ արժեքը կհամեմատի ճշգրիտ հաճախությունների կոշտ կոդավորված արժեքների ցանկի հետ, որոնք հայտնի են որպես նոտայի ճիշտ բարձրության ստանդարտ հաճախականություն: Այնուհետև կարգավորիչը կցուցադրի, թե որքան մոտ կամ հեռու է ձեր մուտքագրված ձայնը ձեր ցանկալի նոտայից: Հետաքրքիրն այն է, որ ձայնային ալիքը բազմաթիվ սինուսոիդային ալիքների համադրություն է իրական և երևակայական բաղադրիչներով: Թեև դա անծանոթ մարդկանց համար դժվար է թվում աշխատել, կան մի քանի եղանակներ, որոնցով մենք դեռ կարող ենք վերլուծել իրական և երևակայական արժեքներով ալիքը:
Դեմո:
Քայլ 1. Սարքավորումների ցուցակ (վերցրեք տախտակի լուսանկարը և Քևինի կոմպը)
Նախ մեզ անհրաժեշտ է Basys 3 տախտակ և համակարգիչ, որն ապահովում է հետևյալ ծրագրերը:
Python - կարող է օգտագործել pylab և scipy նմուշառման և հայտնաբերման համար
Vivado - միանալ Basys 3 տախտակին և տեսողականորեն տեսնել արդյունքները
Քայլ 2: Ակնարկ
Կարգավորիչը բաղկացած է մի քանի կարևոր բաղադրիչներից ՝ խոսափողից, նմուշառողից, FFT- ից (Ֆուրիեի արագ փոխակերպում), համեմատիչից, ապակոդավորիչից և ցուցադրումից: Խոսափողի նպատակը մուտքի ալիքի ձևի գրավումն է: Նմուշառողը ստանում է խոսափողի ելքային ազդանշանը և օգտագործում է FFT- ը ՝ ազդանշանը հաճախությունների մեծության ելքի վերածելու համար: Այնուհետև օգտագործելով FFT- ի ելքը և գտնելով առավելագույն մեծությունը և դրա հետ կապված հաճախականությունը բաժանված 2 -ի, կարելի է գտնել ալիքի ձևի սկիպիդարի հետ կապված հաճախականությունը: Այդ արժեքը կարող է մտնել համեմատիչի մեջ: Այնուհետև այն համեմատվում է որոնման սեղանի հետ, որն արդեն սահմանել է հաճախականության արժեքներ բոլոր նոտաների կատարյալ կատարումների համար: Համեմատողին տրվում է մուտքագրում ցանկալի գրառման համար, որն այնուհետև կարող է ցանկալի նոտան համապատասխանող հաճախականությանը համապատասխան որոնման աղյուսակից: Այնուհետեւ համեմատիչը կընտրի առավելագույն հաճախականությանը ամենամոտ հաճախականությամբ նոտան: Համեմատողը կհամեմատի երկու արժեքները և կտեսնի, որ հաճախականության արժեքը ցանկալիին է մոտենում, և այդ տվյալները կդնի ազդանշանի մեջ: Համեմատողը կուղարկի այդ ազդանշանը ապակոդավորիչին, որտեղ ապակոդավորիչը կընտրի 7 հատվածից բաղկացած ցուցադրման անոդների մուտքերը `նշման ճշգրտությունը ցույց տալու համար:
Քայլ 3: Wav ֆայլ
Այս քայլում մենք վերցնելու ենք մի witch ֆայլ ՝ սկիպիդարով և փորձելու ենք դուրս բերել այդ սկիպիդարի հաճախականությունը:
Նախ անհրաժեշտ է գրառման wav ֆայլ: Այս օրինակում մենք կօգտագործենք 16 բիթ ստերեո wav ֆայլ ՝ 44.1 կՀց ընտրանքի արագությամբ: Սա կարող է կամ ստեղծվել DAW- ում, ինչպիսին է Garageband- ը, կամ ներբեռնել: Այս օրինակի համար մեր կողմից Garageband- ում առաջացած A4 440Hz սինուսային ալիքը կարելի է ներբեռնել այստեղ:
Քայլ 4: Python- Pylab- ի և Scipy- ի օգտագործումը
Մենք օգտագործեցինք Python գրադարանը «Ֆուրիեի արագ փոխակերպում» կատարելու համար: Առցանց ռեսուրսը թույլ տվեց մեզ ընդօրինակել և տեսնել, թե ինչն է օգտակար pylab- ում և scipy- ում:
1. Եթե դուք չեք տեղադրել pylab կամ scipy, դուք պետք է դա անեք: Կամ, Pycharm- ը շատ լավ հատկություն ունի, երբ փորձում եք pylab կամ scipy ներմուծել, կա մի խայտառակ ընդգծում, որը ձեզ ասում է, որ դուք դեռ չեք տեղադրել գրադարանը: Այնուհետև դրանք կարող եք ուղղակիորեն տեղադրել ՝ սեղմելով կարմիր լամպը (այն կհայտնվի, երբ կուրսորը դնում եք խայտառակ ընդգծման մոտ):
2. Օգտագործելով scipy.io.wavfile.read գործառույթը, կարդացեք և հանեք տվյալները wav ֆայլից: Տեղեկացրեք pylab.fft- ի տվյալների միջոցով, այն ձեզ կվերադարձնի հզորության մեծության ցուցակ:
3. Այնուհետեւ գտեք ցուցակից արտանետվող հզորության առավելագույնը: Փնտրեք ցուցակի ինդեքսը, որտեղ տեղի է ունենում առավելագույն հզորությունը, քանի որ ավելի արագ միջոց է գտնելու, թե ինչ հաճախականություն է ասոցացվում այդ հզորության հետ: Վերջապես վերադարձեք առավելագույն հաճախականությունը: Քանի որ հետագայում մենք պետք է երկուական հաճախականության ազդանշան մուտքագրենք VHDL կոդի մեջ, մենք կարող ենք float- ում հաճախականությունը վերածել երկուականի և վերադարձնել այն:
Քայլ 5. Python- նմուշառում և FFT (Codeուցադրել ծածկագիրը և դրա արդյունքները)
Այս քայլում ամբողջական վարկերը գնում են ստորև բերված հղմանը `ընտրանքի և FFT- ի համար:
samcarcagno.altervista.org/blog/basic-sound… Մեր կոդը ՝
Pylab- ի և scipy- ի տեղադրումից հետո wav ֆայլերը կարող են ներմուծվել և կարդալ:
pylab ներմուծումից*scipy.io ներմուծման wavfile- ից
sampFreq, snd = wavfile.read ('440_sine.wav')
Այնուհետեւ snd.shape- ը ներկայացնում է նմուշի կետերը և ալիքների քանակը: Մեր դեպքում, նմուշի կետերը կախված են նրանից, թե որքան երկար է wavfile- ը և ալիքների # -ը `2 -ից, քանի որ այն ստերեո է:
Այնուհետեւ snd = snd / (2. ** 15) …… xlabel ('(ամանակը (ms)')
կազմակերպում է ժամանակի ազդանշանը զանգվածի մեջ:
Այնուհետեւ FFT- ն ստեղծում է զանգված հաճախականությամբ և մեծությամբ (հզորություն)
Այնուհետև որոշ ժամանակ անց անցեք առավելագույն մեծությունը և դրա հետ կապված հաճախականությունը: Այդ հաճախականությունը/2 -ը ներկայացնում է ալիքի ֆայլի սկիպիդարը:
Այնուհետև օգտագործելով մեր սեփական ծածկագիրը, հաճախությունը ներկայացնող ամբողջ թիվը փոխակերպվեց 12 բիթանոց երկուական թվի և ստեղծվեց տեքստային ֆայլ `այդ թվով:
Քայլ 6: Vivado (Համեմատող)
Cessրագրի այս մասում մեզ անհրաժեշտ է համեմատիչ `երկու մուտքային հաճախականությունները համեմատելու համար:
1. Ստեղծեց համեմատիչ `համեմատելու համար, թե արդյոք մուտքագրման (ստացողի) հաճախականությունն ավելի բարձր է, ցածր կամ 2 Հց սահմանային միջակայքի սահմանած նոտայի սահմաններում: (կիթառի բնորոշ կարգավորիչը տատանվում է e2- ից մինչև g5, 82 Հց մինչև 784 Հց):
2. 2 Հց լուսանցք ստեղծելիս մենք RCA- ի միջոցով ստացողի հաճախականությանը ավելացրեցինք «000000000010» և ստուգեցինք, թե որտեղ է այն դեռ շատ ցածր օգտվողի մուտքի համար: Եթե դա այդպես է, մեկ բիթանոց ազդանշանը «բարձր» <= «0», «ցածր» <= «1»: Այնուհետև օգտվողի մուտքին ավելացնում ենք «000000000010» -ը, տեսեք, արդյոք ստացողի մուտքը դրանից ավելի բարձր է: Եթե դա այդպես է, «բարձր» <= «1», «ցածր» <= «0»: Երկու դեպքում էլ երկուսը չեն վերադարձնի «0»:
3. Քանի որ մոդուլի հաջորդ հատվածին անհրաժեշտ է 4-բիթանոց տվյալներ, որոնք կասեն, թե որն է ստացողի գրառումը, ոչ միայն վերադարձնելով 2 համեմատական ելքերը (ցածր և բարձր), մենք պետք է վերադարձնենք ծածկագրային նշումը, որը կապված է հաճախականությունը: Խնդրում ենք անդրադառնալ ստորև բերված գծապատկերին.
C | 0011 թ
C# | 1011 թ
Դ | 0100
Դ# | 1100 թ
Ե | 0101
Ֆ | 0110 թ
F# | 1110 թ
Գ | 0111
G# | 1111 թ
Ա | 0001
Ա# | 1001 թ
Բ | 0010 թ
Օգտագործելով մի քանի if հայտարարություններ ՝ դրանք դասակարգելու նշման մեջ և կոդավորելու այն, ինչ անհրաժեշտ է յոթ հատվածի ապակոդավորման համար:
Քայլ 7. BASYS 3 -ի նկարներ Տախտակ
Քայլ 8: Vivado (7 հատվածի ապակոդավորիչ ՝ բազմապատկմամբ)
Ամեն ինչ ցուցադրման կարիք ունի: Դա կարևոր գործոն է, որը որոշում է դիզայնի արժեքը: Հետևաբար, մենք պետք է յոթ հատվածից ապակոդավորող սարք ստեղծենք, ինչը թույլ կտա մեզ ցուցադրել B տախտակի վրա լարիչ նախագծելու մեր ունակությունը: Բացի այդ, դա կօգնի մեզ փորձարկել և կարգաբերել:
Յոթ հատվածի ապակոդավորիչը պարունակում է Note, ցածր, բարձր և CLK անուններով մուտքեր, մինչդեռ SSEG, AN և Fiz_Hz: Վերևում կա բլոկ -դիագրամի նկար, որը կօգնի մեզ հասկանալ դիզայնը:
Երկու ցածր և բարձր մուտքեր ունենալու նպատակը համեմատողի նախագծողին տրամադրել ազատություն `շահարկելու` ձայնի (ալիքի) հաճախականությունն ավելի բարձր է, թե ցածր, քան օգտագործողը ցանկանում է համեմատել մուտքային հաճախականությունից (Fix_Hz): Բացի այդ, ելքային SSEG- ը ներկայացնում է յոթ հատվածի ցուցադրումը և կետը հաջորդաբար, մինչդեռ AN- ն ներկայացնում է անոդները, որոնց համար յոթ հատվածների հավաքածուն պետք է լուսավորվի:
Այս յոթ հատվածից բաղկացած ապակոդավորիչում ժամացույցը (CLK) կարևոր դեր է խաղում երկու կամ ավելի տարբեր անոդների վրա երկու տարբեր արժեքներ ցուցադրելու մեջ: Քանի որ խորհուրդը թույլ չի տալիս միաժամանակ ցուցադրել երկու տարբեր արժեքներ, մենք պետք է մուլտիպլեքսավորման միջոցով միաժամանակ մի արժեք ցուցադրենք, մինչդեռ բավական արագ անցնում ենք այլ արժեքի, որպեսզի մեր աչքերը չկարողանան գրավել այն: Այստեղ է, որ գործում է CLK- ի ներդրումը:
Լրացուցիչ տեղեկությունների համար դիմեք աղբյուրի կոդին:
Քայլ 9: Vivado (բաղադրիչների համակցում)
Յուրաքանչյուր մոդուլը (պիթոնի ընդունիչ, համեմատիչ, յոթ հատվածի ապակոդավորիչ և այլն) ավարտված, մենք միասին հավաքում ենք ավելի մեծ մոդուլը օգտագործելով: Ինչպես պատկերված է «Over view» բաժնում, այնպես էլ մենք յուրաքանչյուր ազդանշան կապում ենք համապատասխանաբար: Տեղեկատվության համար խնդրում ենք ստուգել մեր աղբյուրի կոդը «SW_Hz.vhd»:
Շնորհակալություն. Հուսով եմ վայելեք:
Խորհուրդ ենք տալիս:
Arduino մեքենայի հետադարձ կայանման ահազանգման համակարգ - Քայլ առ քայլ: 4 քայլ
Arduino մեքենայի հետադարձ կայանման ահազանգման համակարգ | Քայլ առ քայլ. Այս նախագծում ես նախագծելու եմ մի պարզ Arduino մեքենայի հետադարձ կայանման սենսորային միացում ՝ օգտագործելով Arduino UNO և HC-SR04 ուլտրաձայնային տվիչ: Այս Arduino- ի վրա հիմնված Car Reverse ազդանշանային համակարգը կարող է օգտագործվել ինքնավար նավարկության, ռոբոտների ռանգի և այլ տեսականու համար
Քայլ առ քայլ համակարգչային շենք. 9 քայլ
Քայլ առ քայլ համակարգչի կառուցում. Պարագաներ. Սարքավորումներ. Մայրական համակարգիչ CPU coolerPSU (Էներգամատակարարման միավոր) Պահեստավորում (HDD/SSD) RAMGPU (պարտադիր չէ) Գործ CaseTools: Պտուտակահան ESD ապարանջան/matsthermal paste w/aplikator
Երեք բարձրախոս շղթա -- Քայլ առ քայլ ձեռնարկ ՝ 3 քայլ
Երեք բարձրախոս շղթա || Քայլ առ քայլ ձեռնարկ. Բարձրախոսների սխեման ուժեղացնում է շրջակա միջավայրից ստացված աուդիո ազդանշանները MIC- ում և այն ուղարկում է խոսնակին, որտեղից արտադրվում է ուժեղացված ձայնը:
Քայլ առ քայլ կրթություն ռոբոտաշինության մեջ `հանդերձանքով. 6 քայլ
Քայլ առ քայլ կրթություն ռոբոտաշինության մեջ ՝ հանդերձանքով. Իմ սեփական ռոբոտը կառուցելուց մի քանի ամիս անց (խնդրում եմ անդրադառնալ այս բոլորին), և երկու անգամ մասերի խափանումից հետո, ես որոշեցի մի քայլ հետ գնալ և նորից մտածել իմ մասին ռազմավարություն և ուղղություն: Մի քանի ամսվա փորձը երբեմն շատ հատուցող էր, և
Ձայնային թռիչք Arduino Uno- ի հետ Քայլ առ քայլ (8 քայլ) `8 քայլ
Ձայնային թռիչք Arduino Uno- ի հետ Քայլ առ քայլ (8 քայլ). Ուլտրաձայնային ձայնային փոխարկիչներ L298N Dc կանացի ադապտեր էներգիայի մատակարարում արական dc pin Arduino UNOBreadboard և անալոգային նավահանգիստներ ՝ կոդը փոխարկելու համար (C ++)