Мазмуну:

Тюнер: 9 кадам
Тюнер: 9 кадам

Video: Тюнер: 9 кадам

Video: Тюнер: 9 кадам
Video: Не показывает Т2, нет сигнала на T2 приставке. Как исправить. 2024, Ноябрь
Anonim
Image
Image
Жабдуулардын тизмеси (Башкарманын сүрөтүн жана Кевиндин компын алыңыз)
Жабдуулардын тизмеси (Башкарманын сүрөтүн жана Кевиндин компын алыңыз)

Бул долбоор Vivado жана 7 сегменттүү дисплейдин жардамы менен гитара тюнерин жасоо үчүн иштелип чыккан. Тюнер киргизилген үндүн жыштыгын тапкандан кийин, тюнер бул маанини нотанын туура үнү үчүн стандарттуу жыштык деп аталган так жыштыктар үчүн катуу коддолгон маанилердин тизмеси менен салыштырат. Андан кийин тюнер сиздин каалаган үнүңүзгө канчалык жакын же алыс экенин көрсөтөт. Кызыктуусу, үн толкуну реалдуу жана элестүү компоненттери бар көптөгөн синусоидалык толкундардын айкалышы. Бул бейтааныш адамдар менен иштөө кыйын болуп көрүнгөнү менен, биз реалдуу жана элестүү баалуулуктарга ээ болгон толкунду анализдөөнүн бир нече жолдору бар.

Демо:

1 -кадам: Жабдуулардын тизмеси (Башкарманын сүрөтүн жана Кевиндин компын алыңыз)

Алгач бизге Basys 3 тактасы жана төмөнкү программаларды колдогон компьютер керек. Garageband/Audacity же башка DAW - микрофон аркылуу жаздыруу жана wavfiles экспорттоо үчүн.

Python - үлгү жана fft үчүн pylab жана scipy колдоно алат

Vivado - Basys 3 тактасына туташуу жана жыйынтыгын көрүү үчүн

2 -кадам: Обзор

Обзор
Обзор

Тюнер бир нече маанилүү компоненттерден турат: микрофон, үлгү алуучу, FFT (Fast Fourier Transform), салыштыргыч, декодер жана дисплей. Микрофондун максаты - кирүүчү толкун формасын тартуу. Тандоочу микрофондун чыгуу сигналын алат жана сигналды жыштыкта чоңдуктун чыгышына айландыруу үчүн FFTти колдонот. Андан кийин FFTдин чыгымын колдонуп, максималдуу чоңдукту жана аны менен байланышкан жыштыкты 2ге бөлүп, толкун формасынын чайырына байланышкан жыштыкты табууга болот. Бул баа андан кийин компараторго кире алат. Андан кийин ал бардык ноталардын кемчиликсиз кадамдары үчүн жыштык маанилерин койгон таблицага салыштырылат. Салыштыргычка керектүү нота үчүн кирүү берилет, ал каалаган столго туура келген жыштыкка дал келиши мүмкүн. Андан кийин компаратор максималдуу жыштыкка эң жакын жыштыгы бар нотаны тандайт. Салыштыруучу эки маанини салыштырып көрүп, жыштыктын мааниси каалаганына жакын экенин көрүп, анан бул маалыматты сигналга киргизет. Салыштыргыч ал сигналды декодерге жөнөтөт, мында декодер нотанын тактыгын көрсөтүү үчүн 7 сегменттүү дисплейдин аноддоруна кириштерди тандайт.

3 -кадам: Wav File

Wav File
Wav File

Бул кадамда биз wav файлын алып, ошол кадамдын жыштыгын чыгарууга аракет кылабыз.

Адегенде сизге wav файлынын нотасы керек. Бул мисалда биз 44.1 кГц ылдамдык менен 16 бит стерео wav файлын колдонобуз. Бул Garageband сыяктуу DAWте түзүлүшү же жүктөлүшү мүмкүн. Бул мисал үчүн, Garagebandда биз жараткан A4 440Hz синус толкуну бул жерден жүктөлүп алынышы мүмкүн.

4-кадам: Python- Pylab жана Scipyдин колдонулушу

Python- Pylab жана Scipyдин колдонулушу
Python- Pylab жана Scipyдин колдонулушу

Биз Python китепканасын "Fast Fourier transform" кылуу үчүн колдондук. Интернет булагы бизге туурап, pylab жана scipyде эмне пайдалуу экенин көрүүгө мүмкүнчүлүк берди.

1. Эгерде сиз pylab же scipy орното элек болсоңуз, анда муну жасашыңыз керек. Же, Pycharmдын абдан жакшы өзгөчөлүгү бар, pylab же scipy импорттоого аракет кылганда, сиз китепкананы али орното электигиңизди белгилеп, астын сызып коюңуз. Сиз аларды кызыл лампочканы басуу менен түз орното аласыз (курсорду астын сызуунун жанына койгондо пайда болот).

2. scipy.io.wavfile.read функциясын колдонуп, wav файлынын үлгүсүндөгү маалыматтарды окуп, сууруп алыңыз. Pylab.fft аркылуу берилмелерди иштетүү, ал сизге күчтүн тизмесин кайтарып берет.

3. Андан кийин тизмеден чыгарылган күчтүн максимумун табыңыз. Максималдуу күч пайда болгон тизмектин индексин издеңиз, анткени бул күч менен кандай жыштыктагы байланышты табуунун тез жолу. Акыры максималдуу жыштыкты кайтарыңыз. Кийинчерээк биз VHDL кодуна бинардык жыштык сигналын киргизишибиз керек болгондуктан, биз жыштыкты экиликке айландырып, аны кайтарып бере алабыз.

5-кадам: Python-Sampling жана FFT (Кодду жана анын жыйынтыктарын көрсөтүү)

Бул кадамда, толук кредиттер тандоо жана FFT үчүн төмөнкү шилтемеге өтөт.

samcarcagno.altervista.org/blog/basic-sound… Биздин код:

Pylab жана scipy орнотулгандан кийин, wav файлдарын импорттоого жана окууга болот.

pylab import*дан scipy.io import wavfile

sampFreq, snd = wavfile.read ('440_sine.wav')

Андан кийин snd.shape үлгү чекиттерин жана каналдардын санын билдирет. Биздин учурда, үлгү чекиттери wavfile канча убакытка көз каранды жана каналдар # 2 стерео болгондуктан.

Андан кийин snd = snd / (2. ** 15) …… xlabel ('Убакыт (мс)')

убакыт сигналын массивге уюштурат.

Андан кийин FFT жыштыктагы жана чоңдуктагы массивди түзөт (Power)

Кийинчерээк цикл аркылуу максималдуу чоңдук жана аны менен байланышкан жыштык табылат. Бул жыштык/2 wavfile чайырын билдирет.

Андан кийин өзүбүздүн кодду колдонуп, жыштыктагы бүтүн сан 12 биттик экилик санга айландырылды жана ошол номер менен текст файлы түзүлдү.

6 -кадам: Vivado (Салыштыруучу)

Vivado (Салыштыруучу)
Vivado (Салыштыруучу)

Процестин бул бөлүгүндө бизге эки киргизүү жыштыгын салыштыруу үчүн компаратор керек.

1. Киргизүү (кабыл алуучу) жыштыгы жогору, төмөн же 2 Гц маржа диапазонунда аныкталган нотада болорун салыштыруу үчүн салыштыргыч түзүлдү. (типтүү гитара тюнери e2ден g5ке чейин, 82 Гцтен 784 Гцке чейин).

2. 2 Гц маржа түзүүдө биз RCAны колдонуп, кабыл алуучу жыштыгына "000000000010" кошуп, колдонуучу киргизүү үчүн ал дагы өтө төмөн экенин текшерип көрдүк. Андай болсо, бир бит сигнал "жогорку" <= "0", "төмөн" <= "1". Андан кийин, колдонуучунун киришине "000000000010" кошобуз, алуучунун кириши андан да жогору экенин көрүңүз. Эгер ушундай болсо, "жогорку" <= '1', "төмөн" <= '0'. Эч нерсе экөө тең "0" кайтарбайт.

3. Модулдун кийинки бөлүгүндө кабыл алуучу нотанын эмне экенин айтуу үчүн конкреттүү 4-бит маалыматы керек болгондуктан, 2 салыштырмалуу жыйынтыкты гана кайтарбастан (төмөн жана жогорку), биз коддун өнөктөшүн белгилеши керек. жыштыгы. Сураныч, төмөнкү диаграммага кайрылыңыз:

C | 0011

C# | 1011

D | 0100

D# | 1100

E | 0101

F | 0110

F# | 1110

G | 0111

G# | 1111

A | 0001

A# | 1001

B | 0010

Аларды бир нече if коддоруна бөлүү жана жети сегменттеги декодерге керектүү нерселерди коддоо үчүн колдонуу.

7 -кадам: BASYS 3 ТАЛКАСЫНЫН СҮРӨТТӨРҮ

БАЗДЫН СҮРӨТТӨРҮ 3 Башкарма
БАЗДЫН СҮРӨТТӨРҮ 3 Башкарма

8 -кадам: Vivado (Multiplexing менен 7 сегменттин декодери)

Vivado (Multiplexing менен 7 сегменттин декодери)
Vivado (Multiplexing менен 7 сегменттин декодери)

Баарына дисплей керек. Бул долбоордун баалуулугун аныктоочу маанилүү фактор. Ошондуктан, биз жети сегменттердин декодеринин жардамы менен дисплей түзүшүбүз керек, бул бизге B тактасында тюнерди жасоо жөндөмдүүлүгүн көрсөтүүгө мүмкүндүк берет. Ошондой эле, бул тестирлөөдө жана мүчүлүштүктөрдү оңдоодо бизге жардам берет.

Жети сегменттен турган декодерде SSEG, AN жана Fiz_Hz чыгарууда Note, low, high жана CLK деген материалдар бар. Дизайнды түшүнүүгө жардам берүү үчүн жогорудагы блок -схеманын сүрөтү бар.

Төмөн жана жогорку кирүүлөрдүн экиге ээ болушунун максаты - компаратордун дизайнерине колдонуучу салыштыргысы келген үн (толкун) жыштыгы кирүү жыштыгынан (Fix_Hz) жогору же төмөн экендигин башкаруу эркиндигин берүү. Мындан тышкары, SSEG чыгаруу жети сегменттин дисплейин жана кийинки чекитти билдирет, ал эми AN жети сегменттин топтому күйүп турган аноддорду билдирет.

Бул жети сегменттен турган декодерде саат (CLK) эки же андан көп башка аноддордо эки башка маанини көрсөтүүдө маанилүү роль ойнойт. Башкаруу бизге бир эле учурда эки башка баалуулукту көрсөтүүгө уруксат бербегендиктен, биз бир убакта баалуулукту көрсөтүү үчүн мультиплекстөөнү колдонушубуз керек, ошол эле учурда башка баалуулукка өтө тез көзүбүз түшө албайт. Бул жерде CLK киргизүү ойнойт.

Көбүрөөк маалымат алуу үчүн, баштапкы кодго кайрылыңыз.

9 -кадам: Vivado (Компоненттерди бириктирүү)

Ар бир модулдар (питон алгыч, компаратор, жети сегменттеги декодер ж. Б.) Бүткөндөн кийин, биз чоңураак модулду колдонуп чогулттук. "Кароо" бөлүмүнүн астындагы сүрөттө көрсөтүлгөндөй, биз ар бир сигналды ошого жараша туташтырабыз. Маалымат үчүн, "SW_Hz.vhd" булак кодубузду текшериңиз.

Рахмат. Сизге жагат деп үмүттөнөбүз.

Сунушталууда: