Talaan ng mga Nilalaman:

Tuner: 9 Mga Hakbang
Tuner: 9 Mga Hakbang

Video: Tuner: 9 Mga Hakbang

Video: Tuner: 9 Mga Hakbang
Video: Pagsasanay sa pagbasa ng mga pangungusap | Filipino Kinder | Grade 1 & 2 | Practice Reading 2024, Hulyo
Anonim
Image
Image
Listahan ng Kagamitan (kumuha ng isang Pic ng Lupon at Comp ni Kevin)
Listahan ng Kagamitan (kumuha ng isang Pic ng Lupon at Comp ni Kevin)

Ang proyektong ito ay dinisenyo upang makagawa ng isang tuner ng gitara gamit ang Vivado at isang 7-segment na display. Kapag natagpuan ng tuner ang dalas ng naka-input na tunog, ihahambing ng tuner ang halagang iyon sa isang listahan ng mga hard-coded na halaga para sa eksaktong mga frequency na kilala bilang karaniwang dalas para sa tamang pitch ng isang tala. Pagkatapos ay ipapakita ng tuner kung gaano kalapit o kalayo ang iyong naka-input na tunog mula sa iyong nais na tala. Ano ang kagiliw-giliw na ang isang sound wave ay isang kumbinasyon ng maraming mga sinusoidal waveform na may mga tunay at haka-haka na bahagi. Bagaman mukhang mahirap itong gumana sa mga hindi pamilyar, mayroong ilang mga paraan na maaari pa rin nating pag-aralan ang isang alon na may mga tunay at haka-haka na halaga.

Demo:

Hakbang 1: Listahan ng Kagamitan (kumuha ng isang Pic ng Lupon at Comp ni Kevin)

Una kailangan namin ng Basys 3 board at isang computer na sumusuporta sa mga sumusunod na programa. Garageband / Audacity o ibang DAW - upang mag-record sa pamamagitan ng isang mikropono at i-export ang mga wavfile

Python - magagawang gumamit ng pylab at scipy para sa sampling at fft

Vivado - upang kumonekta sa board ng Basys 3 at biswal na makita ang mga resulta

Hakbang 2: Pangkalahatang-ideya

Pangkalahatang-ideya
Pangkalahatang-ideya

Ang isang tuner ay binubuo ng ilang mahahalagang bahagi: mikropono, sampler, FFT (Mabilis na Fourier Transform), kumpare, decoder, at display. Ang layunin ng mikropono ay upang makuha ang input waveform. Ang sampler ay tumatanggap ng signal ng output ng mikropono at ginagamit ang FFT upang i-convert ang signal sa isang output ng magnitude sa mga frequency. Pagkatapos gamit ang output ng FFT at hanapin ang max magnitude at dalas na nauugnay dito na hinati sa 2, matatagpuan ang dalas na nauugnay sa pitch ng waveform. Ang halagang iyon ay maaaring mapunta sa kumpare. Pagkatapos ay ihinahambing ito sa isang talahanayan ng pagtingin, na nagtakda ng mga halaga ng dalas para sa mga perpektong pitch ng lahat ng mga tala. Ang kumpare ay binibigyan ng isang input para sa nais na tala, kung saan maaari nitong maitugma ang nais na tala sa wastong dalas mula sa talahanayan ng pagtingin. Pagkatapos ay pipiliin ng kumpare ang tala na may pinakamalapit na dalas sa maximum na dalas. Ihahambing ng kumpare ang dalawang halaga at makikita malapit ang halaga ng dalas sa nais na isa at pagkatapos ay ilagay ang data na iyon sa isang senyas. Ipapadala ng kumpare ang signal na iyon sa decoder, kung saan pipiliin ng decoder ang mga input para sa mga anode ng 7-segment na display upang ipakita ang kawastuhan ng tala.

Hakbang 3: Wav File

Wav File
Wav File

Sa hakbang na ito, kukuha kami ng isang wav file ng isang pitch at subukang i-output ang dalas ng pitch na iyon.

Una kailangan mo ng isang wav file ng isang tala. Sa halimbawang ito gagamitin namin ang isang 16 bit stereo wav file na may sampling rate na 44.1kHz. Maaari itong malikha sa isang DAW tulad ng Garageband o nai-download. Para sa halimbawang ito, ang isang A4 440Hz Sine alon na nabuo sa amin sa Garageband ay maaaring ma-download dito.

Hakbang 4: Python- Mga Gamit ng Pylab at Scipy

Python- Mga Gamit ng Pylab at Scipy
Python- Mga Gamit ng Pylab at Scipy

Gumamit kami ng Python library para sa paggawa ng "Fast Fourier transform". Pinayagan kami ng online na mapagkukunan na gayahin at makita kung ano ang kapaki-pakinabang sa pylab at scipy.

1. Kung hindi mo pa nai-install ang pylab o scipy, kailangan mong gawin ito. O, ang Pycharm ay may napakahusay na tampok, kapag sinubukan ang pag-import ng pylab o scipy, mayroong isang squiggly underline na nagsasabi sa iyo na hindi mo pa nai-install ang library. Pagkatapos ay maaari mong mai-install ang mga ito nang direkta sa pamamagitan ng pagpindot sa pulang ilaw-bombilya (lilitaw ito kapag inilagay mo ang iyong cursor malapit sa squiggly underline).

2. Paggamit ng scipy.io.wavfile.read function, basahin at hilahin ang data mula sa sample na wav file. Patakbuhin ang data sa pamamagitan ng pylab.fft, ibabalik ka nito sa isang listahan ng lakas para sa lakas.

3. Pagkatapos hanapin ang max ng lakas na inilabas mula sa listahan. Hanapin ang listahan ng listahan kung saan nagaganap ang pinakamataas na lakas dahil ang mas mabilis na paraan upang makahanap ng kung anong dalas ang naiugnay sa lakas na iyon. Sa wakas ibalik ang max dalas. Dahil kailangan nating mag-input ng signal ng dalas ng dalas sa VHDL code, maaari nating mai-convert ang dalas sa float sa binary, at ibalik ito.

Hakbang 5: Python-Sampling at FFT (Ipakita ang Code at Mga Resulta nito)

Sa hakbang na ito, ang buong kredito ay pupunta sa link na ito sa ibaba para sa sampling at FFT.

samcarcagno.altervista.org/blog/basic-sound… Ang aming Code:

Matapos ma-install ang pylab at scipy, ang mga wav file ay mai-import at mabasa.

mula sa pylab import * mula sa scipy.io import wavfile

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

Pagkatapos ang snd.shape ay kumakatawan sa mga sample point at bilang ng mga channel. Sa aming kaso, ang mga sample na puntos ay nakasalalay sa kung gaano katagal ang wavfile at ang # ng mga channel ay 2 dahil stereo ito.

Pagkatapos snd = snd / (2. ** 15) …… xlabel ('Oras (ms)')

inaayos ang signal ng oras sa isang array.

Pagkatapos ang FFT ay lumilikha ng isang array sa dalas at lakas (Power)

Pagkatapos sa pamamagitan ng isang habang loop ang max magnitude at dalas na nauugnay dito ay matatagpuan. Ang dalas / 2 na iyon ay kumakatawan sa pitch ng wavfile.

Pagkatapos gamit ang aming sariling code, ang integer na kumakatawan sa dalas ay na-convert sa isang 12 bit na binary number at isang file ng teksto ang nilikha kasama ang numerong nasa loob nito.

Hakbang 6: Vivado (Comparator)

Vivado (Comparator)
Vivado (Comparator)

Sa bahaging ito ng proseso, kailangan namin ng isang kumpara upang ihambing ang dalawang dalas ng pag-input.

1. Nilikha ang isang kumpara upang ihambing kung ang input (tatanggap) dalas ay mas mataas, mas mababa o sa loob ng 2 Hz margin range tinukoy na tala. (karaniwang mga tuner ng gitara mula sa e2 hanggang g5, 82 Hz hanggang 784 Hz).

2. Kapag lumilikha ng isang margin ng 2 Hz, gumamit kami ng isang RCA upang idagdag ang "000000000010" sa dalas ng tatanggap, at suriin kung saan ito ay napakababa pa rin para sa pag-input ng gumagamit. Kung iyon ang kaso, solong bit signal na "mataas" <= '0', "mababa" <= '1'. Pagkatapos ay idinagdag namin ang "000000000010" sa input ng gumagamit tingnan kung ang input ng tatanggap ay mas mataas pa kaysa doon. Kung iyon ang kaso, “mataas” <= ‘1’, “mababa” <= ‘0’. Ni ang kaso ay parehong magbabalik ng '0'.

3. Dahil ang susunod na bahagi ng modyul ay nangangailangan ng isang tukoy na 4-bits na data upang sabihin kung ano ang tala ng tatanggap, hindi lamang ibabalik ang 2 mga mapaghahambing na output (mababa at mataas), kailangan nating ibalik ang associate ng code upang tandaan, na nakikipag-ugnay sa ang dalas. Mangyaring mag-refer sa tsart sa ibaba:

C | 0011

C # | 1011

D | 0100

D # | 1100

E | 0101

F | 0110

F # | 1110

G | 0111

G # | 1111

A | 0001

Isang # | 1001

B | 0010

Gumagamit ng maraming kung mga pahayag upang maiuri ang mga ito sa tala at i-encode ang mga ito sa kung ano ang kinakailangan para sa pitong segment decoder.

Hakbang 7: LARAWAN NG BASYS 3 Lupon

PICTURES OF BASYS 3 Board
PICTURES OF BASYS 3 Board

Hakbang 8: Vivado (7 Segment Decoder Na May Multiplexing)

Vivado (7 Segment Decoder Na May Multiplexing)
Vivado (7 Segment Decoder Na May Multiplexing)

Ang lahat ay nangangailangan ng isang pagpapakita. Ito ay isang mahalagang kadahilanan na tumutukoy sa halaga ng isang disenyo. Samakatuwid, kailangan naming lumikha ng isang display gamit ang pitong-segment na decoder, na magpapahintulot sa amin na ipakita ang aming kakayahang mag-disenyo ng isang tuner sa B Board. Gayundin, makakatulong ito sa amin sa pagsubok at pag-debug.

Ang isang pitong-segment na decoder ay naglalaman ng mga input na pinangalanang Tandaan, mababa, mataas, at CLK, habang naglalabas ng SSEG, AN, at Fiz_Hz. Mayroong larawan ng block diagram sa itaas upang matulungan kaming maunawaan ang disenyo.

Ang layunin ng pagkakaroon ng dalawang magkahiwalay na mababa at mataas na input ay upang bigyan ang taga-disenyo ng kumpare ng kalayaan na manipulahin kung ang tunog (alon) na dalas ay mas mataas o mas mababa kaysa sa dalas ng pag-input (Fix_Hz) na nais ng gumagamit na ihambing. Bilang karagdagan, ang output SSEG ay kumakatawan sa pitong mga segment ng pagpapakita at ang tuldok sa tabi ng habang ang AN ay kumakatawan sa mga anode kung saan itinakda ang pitong mga segment upang magaan.

Sa pitong-segment na decoder na ito, ang orasan (CLK) ay may mahalagang papel sa pagpapakita ng dalawang magkakaibang halaga sa dalawa o higit pang magkakaibang anode. Dahil hindi kami pinapayagan ng Lupon na magpakita ng dalawang magkakaibang halaga nang sabay, kailangan naming gumamit ng multiplexing upang maipakita ang isang halaga nang paisa-isa, habang lumilipat sa isa pang halagang mabilis na hindi ito mahuhuli ng aming mga mata. Dito naglalaro ang input ng CLK.

Para sa karagdagang impormasyon, mangyaring mag-refer sa source code.

Hakbang 9: Vivado (Pagsasama-sama ng Mga Bahagi)

Sa bawat modyul (tagatanggap ng sawa, kumpare, pitong segment na decoder, atbp.) Nakumpleto, pagkatapos ay pinagsama namin ang paggamit ng isang mas malaking module. Tulad ng larawan sa ilalim ng seksyong "Over view" na ipinapakita, kinokonekta namin ang bawat signal nang naaayon. Para sa sanggunian, mangyaring suriin ang aming source code na "SW_Hz.vhd".

Salamat. Sana nasiyahan ka.

Inirerekumendang: