Cov txheej txheem:

EasyFFT: Fast Fourier Transform (FFT) rau Arduino: 6 Kauj Ruam
EasyFFT: Fast Fourier Transform (FFT) rau Arduino: 6 Kauj Ruam

Video: EasyFFT: Fast Fourier Transform (FFT) rau Arduino: 6 Kauj Ruam

Video: EasyFFT: Fast Fourier Transform (FFT) rau Arduino: 6 Kauj Ruam
Video: EasyFFT: Fast Fourier Transform (FFT) for Arduino 2024, Hlis ntuj nqeg
Anonim
Image
Image

Kev ntsuas qhov zaus los ntawm lub teeb liab tuaj yeem yog txoj haujlwm nyuaj, tshwj xeeb tshaj yog ntawm Arduino vim nws muaj lub zog laij lej qis. Muaj ntau txoj hauv kev txhawm rau txhawm rau xoom-hla qhov twg qhov zaus raug ntes los ntawm kev txheeb xyuas pes tsawg zaus lub teeb liab hla xoom kab hauv lub sijhawm muab. Xws li txoj hauv kev yuav tsis ua haujlwm thaum lub teeb liab yog ua ke ntawm ntau qhov sib txawv.

Nov yog qee qhov nyuaj rau txoj cai yog tias koj tsis yog los ntawm keeb kwm yav dhau los. Tab sis ua tinkerer tus lej no tej zaum yuav muaj txiaj ntsig zoo rau ntau yam haujlwm ntsig txog suab paj nruag, txheeb xyuas teeb liab. Lub hom phiaj ntawm txoj haujlwm no yog los npaj cov lej uas yooj yim rau kev siv ntawm Arduino yam tsis tau nkag mus rau keeb kwm yav dhau los ntawm nws.

Txoj haujlwm no tsis piav qhia Kev Ua Haujlwm ntawm FFT tab sis piav qhia txog kev thov FFT ua haujlwm. Cov txheej txheem tib yam kuj tau piav qhia hauv cov vis dis aus txuas.

Yog tias koj tsuas yog txaus siab rau daim ntawv thov cov cai thiab tsis nkag rau hauv kev piav qhia ntawm nws. Koj tuaj yeem hla ncaj qha mus rau kauj ruam 3.

Kauj Ruam 1: Taw Qhia Rau Zam Txim

Taw qhia rau Zaus Hloov
Taw qhia rau Zaus Hloov
Taw qhia rau Zaus Hloov
Taw qhia rau Zaus Hloov

Txhua lub teeb liab tuaj yeem tsim los ntawm kev sib xyaw ntawm ntau yam sinusoidal nthwv dej. Yog li txhua lub sijhawm raws lub teeb liab tuaj yeem pom ua ke ua ke ntawm ntau yam sine ntawm qhov sib txawv sib txawv.

Kuv sim piav qhia kev ua haujlwm ntawm DFT (tsis sib xws Fourier hloov pauv) hauv ib qho ntawm cov lus qhia yav dhau los (https://www.instructables.com/id/Arduino-Frequency…). Cov txheej txheem no qeeb heev rau txhua lub sijhawm thov. uas ua rau nws yuav luag siv tsis tau.

Hauv daim duab, lub teeb liab tau qhia uas yog ua ke ntawm ob zaus f2 thiab f5. Qhov teeb liab no tau sib tw los ntawm kev ntsuas sine tsis muaj nuj nqis f1 txog f5.

Nws tuaj yeem pom ua lej uas -summation ntawm kev sib npaug ntawm ob qhov sib xyaw ua ke cov ntaub ntawv -teeb tsa muaj qhov sib txawv sib txawv ua rau xoom (ntau dua cov ntaub ntawv tuaj yeem ua rau cov txiaj ntsig tshwm sim). Hauv peb qhov xwm txheej, Yog tias ob qhov kev sib npaug no sib npaug (lossis ze heev) zaus uas cov lej sib ntxiv yog tus lej tsis xoom.

Yog li yog tias peb lub teeb liab tau sib npaug los ntawm f1 qhov sib npaug ntawm qhov sib npaug yuav yog xoom (ze rau xoom rau daim ntawv thov tiag). zoo sib xws yog rooj plaub rau f3, f4. Txawm li cas los xij rau tus nqi, f2 thiab f5 cov zis yuav tsis yog xoom, tab sis muaj txiaj ntsig zoo dua li qhov seem ntawm qhov muaj nqis.

Nov yog teeb liab raug ntsuas nrog 5 zaus, yog li cov teeb liab yuav tsum tau muab sib npaug los ntawm tsib zaus. Kev suav xam hnyav yuav siv sijhawm ntau dua. Kev ua lej nws tau qhia tias rau N tus lej ntawm cov qauv nws yuav siv N*N txoj kev sib npaug sib npaug.

Kauj Ruam 2: Hloov Fourier Fast

Txhawm rau suav qhov DFT sai dua FFT algorithm tau tsim los ntawm James Cooley thiab John Tukey. Qhov txheej txheem no tseem suav tias yog ib qho ntawm cov txheej txheem tseem ceeb tshaj plaws ntawm xyoo pua 20th. Nws faib lub teeb liab mus rau qhov khib thiab txawm tias ntu ntu uas ua rau tus lej xav tau kev suav qis dua. Los ntawm kev siv nws tag nrho yuav tsum tau ua kom sib npaug sib npaug tuaj yeem txo qis rau NlogN. uas yog kev txhim kho tseem ceeb.

Koj tuaj yeem xa cov lus hauv qab no uas kuv hais txog thaum sau cov cai kom nkag siab ntxaws txog kev ua lej tom qab FFT:

1.

2.

3.

4.

Kauj Ruam 3: Piav Qhia ntawm Txoj Cai

1. Ceev sine thiab Cosine:

Kev suav FFT siv tus nqi ntawm ntau yam sine thiab cosine ntau zaus. Lub inbuilt muaj nuj nqi ntawm Arduino tsis nrawm txaus thiab siv sijhawm zoo los muab tus nqi xav tau. Uas ua rau cov lej qeeb qeeb (sijhawm ob npaug rau 64 qhov piv txwv). Txhawm rau tawm tsam qhov teeb meem no tus nqi ntawm sine rau 0 txog 90 degrees tau khaws cia ua ntau yam ntawm 255. Ua li ntawd yuav tshem tawm qhov xav tau ntawm kev siv khaws cov lej raws li ntab thiab peb tuaj yeem khaws nws li byte uas siv 1/4 qhov chaw ntawm Arduino. Sine_data yuav tsum tau muab tshuaj txhuam rau saum cov cai kom tshaj tawm nws ua qhov hloov pauv thoob ntiaj teb.

Sib nrug los ntawm sine_data, ib qho array hu ua f_peaks tshaj tawm ua ntiaj teb sib txawv. Tom qab txhua qhov khiav ntawm FFT ua haujlwm qhov hloov tshiab no. Qhov twg f_peaks [0] yog qhov tseem ceeb tshaj plaws thiab qhov txiaj ntsig ntxiv hauv kev nqis tes ua.

byte sine_data [91] = {0, 4, 9, 13, 18, 22, 27, 31, 35, 40, 44, 49, 53, 57, 62, 66, 70, 75, 79, 83, 87, 91, 96, 100, 104, 108, 112, 116, 120, 124, 127, 131, 135, 139, 143, 146, 150, 153, 157, 160, 164, 167, 171, 174, 177, 180, 183, 186, 189, 192, 195, 198, 201, 204, 206, 209, 211, 214, 216, 219, 221, 223, 225, 227, 229, 231, 233, 235, 236, 238, 240, 241, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 253, 253, 254, 254, 254, 255, 255, 255, 255, 255}; ntab f_peaks [5];

Raws li peb tau khaws tus nqi ntawm sine rau 0 txog 90 degree txhua tus nqi ntawm sine lossis cosine tuaj yeem suav tau. Hauv qab no ua haujlwm thawj puag ncig ntawm tus lej rau xoom tus lej thiab muab tus nqi rov qab los ntawm cov ntaub ntawv khaws tseg. txoj kev no xav tau tsuas yog ib qho kev faib ntab. Qhov no tuaj yeem txo qis ntxiv los ntawm kev khaws cia ncaj qha qhov tseem ceeb (tsis yog 255 ntau yam). tab sis qhov ntawd tau noj lub cim xeeb siab ntawm Arduino.

Siv cov txheej txheem saum toj no txo qhov raug tab sis ua kom nrawm dua. Rau 64 cov ntsiab lus, nws muab qhov zoo ntawm 8ms thiab rau 128 ntsiab lus nws muab qhov kom zoo dua ntawm 20ms.

Kauj Ruam 4: Piav Qhia ntawm Txoj Cai: FFT Function

FFT tuaj yeem ua tiav rau qhov piv txwv ntawm 2, 4, 8, 16, 32, 64 thiab ntxiv rau. yog tias tus nqi tsis yog 2^n, dua li nws yuav siv sab qis ntawm tus nqi. Piv txwv li, yog tias peb xaiv tus qauv me me ntawm 70 ces nws tsuas yog txiav txim siab thawj 64 qhov piv txwv thiab tso tseg.

Nws ib txwm pom zoo kom muaj tus qauv loj ntawm 2^n. uas tuaj yeem yog:

2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, …

Ob ntab tawm_r thiab tawm_im yuav siv lub cim xeeb ntau. rau Arduino nano yuav tsis ua haujlwm rau cov qauv siab dua 128 (thiab qee zaum 128) vim tsis muaj lub cim xeeb.

unsigned int cov ntaub ntawv [13] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048};

int ib, c1, f, o, x; ib = N; rau (int i = 0; i <12; i ++) // xam qib {yog (cov ntaub ntawv <= a) {o = i;}} int in_ps [data [o] = {}; // cov tswv yim los ua ntu ntu ntab tawm_r [cov ntaub ntawv [o] = {}; // qhov tiag ntawm kev hloov pauv ntab tawm_im [cov ntaub ntawv [o] = {}; // kev xav ib feem ntawm kev hloov pauv

Kev ntws ntxiv yog raws li hauv qab no:

1. Txoj cai tsim qhov thim rov qab me ntsis qhov kev txiav txim rau qhov piv txwv me me (cov ntsiab lus ntawm kev thim rov qab me ntsis ntawm cov neeg ua pov thawj: qib 2)

2. Kev tawm tswv yim cov ntaub ntawv raws li qhov kev txiav txim tsim tawm, 3. FFT tau ua tiav

4. Qhov dav ntawm cov lej nyuaj suav, 5. Peaks raug kuaj pom thiab xaj kom nqis qis

6. cov txiaj ntsig tuaj yeem nkag los ntawm f_peaks.

[txhawm rau nkag mus rau lwm cov ntaub ntawv (sib nrug ntawm qhov siab tshaj plaws) cov cai yuav tsum raug hloov pauv, yog li qhov sib txawv hauv zos tuaj yeem theej mus rau qee qhov kev hloov pauv thoob ntiaj teb ua ntej]

Kauj Ruam 5: Xeem Txoj Cai

Xeem Txoj Cai
Xeem Txoj Cai
Xeem Txoj Cai
Xeem Txoj Cai

Ib qho piv txwv daim duab peb sab yoj yog muab ua tswv yim. rau qhov kev piv txwv nthwv dej no yog 10 Hz thiab qhov zaus ntawm nws tus kheej yog 1.25 Hz.

Raws li tuaj yeem pom los ntawm cov khoom siv raw, tus nqi yog txuam nrog FFT suav los ntawm Scilab. txawm li cas los xij, cov txiaj ntsig no tsis zoo ib yam li peb tsis muaj tseeb tab sis nrawm dua sine wave.

Hauv qhov tso zis zaus zaus zaus yog 1.25 thiab 3.75. nws tsis tas yuav tsum tau txais tus nqi tseeb txhua lub sijhawm. Feem ntau cov zauv no raug hu ua cov khoom siv zaus. yog li cov txiaj ntsig tso tawm yuav nyob txhua qhov chaw hauv cov thoob tshwj xeeb.

Ceev:

rau Arduino nano nws yuav siv:

16 Cov Ntsiab Lus: 4ms32 Cov Ntsiab Lus: 10ms 64 Cov Ntsiab Lus: 26ms 128 Cov Ntsiab Lus: 53ms

Kauj Ruam 6: Xaus

Tus lej FFT no tuaj yeem siv rau hauv daim ntawv thov lub sijhawm. Raws li nws siv sijhawm ncig 30 ms los ua kom tiav qhov kev suav. Txawm li cas los xij, nws qhov kev daws teeb meem txwv los ntawm tus lej piv txwv. Tus lej ntawm cov qauv raug txwv los ntawm Arduino nco. Los ntawm kev siv Arduino Mega lossis lwm qhov kev ua tau zoo dua ntawm pawg thawj coj tuaj yeem txhim kho.

yog tias koj muaj lus nug, tawm tswv yim, lossis kho kom raug zoo tawm tswv yim.

Hloov tshiab (2/5/21)

Hloov tshiab: // ----------------------------- FFT Function --------------- ------------------------------- // ntab FFT (int hauv , int N, ntab Zaus)

Cov ntaub ntawv hom N hloov mus rau Integer (uas twb muaj lawm Byte) los txhawb> 255 tus qauv me me. Yog tias qhov piv txwv me me yog <= 128, hom ntaub ntawv byte yuav tsum siv.

Pom zoo: