Բովանդակություն:

Թյուներ `9 քայլ
Թյուներ `9 քայլ

Video: Թյուներ `9 քայլ

Video: Թյուներ `9 քայլ
Video: Ինչպես հանել կիթառի լարերը հեշտ #կիթառ #guitar #yerevan #armenia #հայկական 2024, Նոյեմբեր
Anonim
Image
Image
Սարքավորումների ցուցակ (վերցրեք խորհրդի լուսանկարը և Kevin's Comp)
Սարքավորումների ցուցակ (վերցրեք խորհրդի լուսանկարը և Kevin's Comp)

Այս նախագիծը նախատեսված էր Vivado- ի և 7 հատվածից բաղկացած ցուցադրման միջոցով կիթառի կարգավորիչ պատրաստելու համար: Երբ լարողը գտնում է մուտքագրվող ձայնի հաճախականությունը, թյուներն այդ արժեքը կհամեմատի ճշգրիտ հաճախությունների կոշտ կոդավորված արժեքների ցանկի հետ, որոնք հայտնի են որպես նոտայի ճիշտ բարձրության ստանդարտ հաճախականություն: Այնուհետև կարգավորիչը կցուցադրի, թե որքան մոտ կամ հեռու է ձեր մուտքագրված ձայնը ձեր ցանկալի նոտայից: Հետաքրքիրն այն է, որ ձայնային ալիքը բազմաթիվ սինուսոիդային ալիքների համադրություն է իրական և երևակայական բաղադրիչներով: Թեև դա անծանոթ մարդկանց համար դժվար է թվում աշխատել, կան մի քանի եղանակներ, որոնցով մենք դեռ կարող ենք վերլուծել իրական և երևակայական արժեքներով ալիքը:

Դեմո:

Քայլ 1. Սարքավորումների ցուցակ (վերցրեք տախտակի լուսանկարը և Քևինի կոմպը)

Նախ մեզ անհրաժեշտ է Basys 3 տախտակ և համակարգիչ, որն ապահովում է հետևյալ ծրագրերը:

Python - կարող է օգտագործել pylab և scipy նմուշառման և հայտնաբերման համար

Vivado - միանալ Basys 3 տախտակին և տեսողականորեն տեսնել արդյունքները

Քայլ 2: Ակնարկ

Ակնարկ
Ակնարկ

Կարգավորիչը բաղկացած է մի քանի կարևոր բաղադրիչներից ՝ խոսափողից, նմուշառողից, FFT- ից (Ֆուրիեի արագ փոխակերպում), համեմատիչից, ապակոդավորիչից և ցուցադրումից: Խոսափողի նպատակը մուտքի ալիքի ձևի գրավումն է: Նմուշառողը ստանում է խոսափողի ելքային ազդանշանը և օգտագործում է FFT- ը ՝ ազդանշանը հաճախությունների մեծության ելքի վերածելու համար: Այնուհետև օգտագործելով FFT- ի ելքը և գտնելով առավելագույն մեծությունը և դրա հետ կապված հաճախականությունը բաժանված 2 -ի, կարելի է գտնել ալիքի ձևի սկիպիդարի հետ կապված հաճախականությունը: Այդ արժեքը կարող է մտնել համեմատիչի մեջ: Այնուհետև այն համեմատվում է որոնման սեղանի հետ, որն արդեն սահմանել է հաճախականության արժեքներ բոլոր նոտաների կատարյալ կատարումների համար: Համեմատողին տրվում է մուտքագրում ցանկալի գրառման համար, որն այնուհետև կարող է ցանկալի նոտան համապատասխանող հաճախականությանը համապատասխան որոնման աղյուսակից: Այնուհետեւ համեմատիչը կընտրի առավելագույն հաճախականությանը ամենամոտ հաճախականությամբ նոտան: Համեմատողը կհամեմատի երկու արժեքները և կտեսնի, որ հաճախականության արժեքը ցանկալիին է մոտենում, և այդ տվյալները կդնի ազդանշանի մեջ: Համեմատողը կուղարկի այդ ազդանշանը ապակոդավորիչին, որտեղ ապակոդավորիչը կընտրի 7 հատվածից բաղկացած ցուցադրման անոդների մուտքերը `նշման ճշգրտությունը ցույց տալու համար:

Քայլ 3: Wav ֆայլ

Wav ֆայլ
Wav ֆայլ

Այս քայլում մենք վերցնելու ենք մի witch ֆայլ ՝ սկիպիդարով և փորձելու ենք դուրս բերել այդ սկիպիդարի հաճախականությունը:

Նախ անհրաժեշտ է գրառման wav ֆայլ: Այս օրինակում մենք կօգտագործենք 16 բիթ ստերեո wav ֆայլ ՝ 44.1 կՀց ընտրանքի արագությամբ: Սա կարող է կամ ստեղծվել DAW- ում, ինչպիսին է Garageband- ը, կամ ներբեռնել: Այս օրինակի համար մեր կողմից Garageband- ում առաջացած A4 440Hz սինուսային ալիքը կարելի է ներբեռնել այստեղ:

Քայլ 4: Python- Pylab- ի և Scipy- ի օգտագործումը

Python- Pylab- ի և Scipy- ի օգտագործումը
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 (Համեմատող)

Vivado (համեմատող)
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 -ի նկարներ Տախտակ

BASYS- ի ՆԿԱՐՆԵՐ 3 Տախտակ
BASYS- ի ՆԿԱՐՆԵՐ 3 Տախտակ

Քայլ 8: Vivado (7 հատվածի ապակոդավորիչ ՝ բազմապատկմամբ)

Vivado (7 հատվածի ապակոդավորիչ ՝ մուլտիպլեքսավորմամբ)
Vivado (7 հատվածի ապակոդավորիչ ՝ մուլտիպլեքսավորմամբ)

Ամեն ինչ ցուցադրման կարիք ունի: Դա կարևոր գործոն է, որը որոշում է դիզայնի արժեքը: Հետևաբար, մենք պետք է յոթ հատվածից ապակոդավորող սարք ստեղծենք, ինչը թույլ կտա մեզ ցուցադրել B տախտակի վրա լարիչ նախագծելու մեր ունակությունը: Բացի այդ, դա կօգնի մեզ փորձարկել և կարգաբերել:

Յոթ հատվածի ապակոդավորիչը պարունակում է Note, ցածր, բարձր և CLK անուններով մուտքեր, մինչդեռ SSEG, AN և Fiz_Hz: Վերևում կա բլոկ -դիագրամի նկար, որը կօգնի մեզ հասկանալ դիզայնը:

Երկու ցածր և բարձր մուտքեր ունենալու նպատակը համեմատողի նախագծողին տրամադրել ազատություն `շահարկելու` ձայնի (ալիքի) հաճախականությունն ավելի բարձր է, թե ցածր, քան օգտագործողը ցանկանում է համեմատել մուտքային հաճախականությունից (Fix_Hz): Բացի այդ, ելքային SSEG- ը ներկայացնում է յոթ հատվածի ցուցադրումը և կետը հաջորդաբար, մինչդեռ AN- ն ներկայացնում է անոդները, որոնց համար յոթ հատվածների հավաքածուն պետք է լուսավորվի:

Այս յոթ հատվածից բաղկացած ապակոդավորիչում ժամացույցը (CLK) կարևոր դեր է խաղում երկու կամ ավելի տարբեր անոդների վրա երկու տարբեր արժեքներ ցուցադրելու մեջ: Քանի որ խորհուրդը թույլ չի տալիս միաժամանակ ցուցադրել երկու տարբեր արժեքներ, մենք պետք է մուլտիպլեքսավորման միջոցով միաժամանակ մի արժեք ցուցադրենք, մինչդեռ բավական արագ անցնում ենք այլ արժեքի, որպեսզի մեր աչքերը չկարողանան գրավել այն: Այստեղ է, որ գործում է CLK- ի ներդրումը:

Լրացուցիչ տեղեկությունների համար դիմեք աղբյուրի կոդին:

Քայլ 9: Vivado (բաղադրիչների համակցում)

Յուրաքանչյուր մոդուլը (պիթոնի ընդունիչ, համեմատիչ, յոթ հատվածի ապակոդավորիչ և այլն) ավարտված, մենք միասին հավաքում ենք ավելի մեծ մոդուլը օգտագործելով: Ինչպես պատկերված է «Over view» բաժնում, այնպես էլ մենք յուրաքանչյուր ազդանշան կապում ենք համապատասխանաբար: Տեղեկատվության համար խնդրում ենք ստուգել մեր աղբյուրի կոդը «SW_Hz.vhd»:

Շնորհակալություն. Հուսով եմ վայելեք:

Խորհուրդ ենք տալիս: