Orodha ya maudhui:

HarakaFFT: Kasi ya juu FFT ya Arduino: 3 Hatua
HarakaFFT: Kasi ya juu FFT ya Arduino: 3 Hatua

Video: HarakaFFT: Kasi ya juu FFT ya Arduino: 3 Hatua

Video: HarakaFFT: Kasi ya juu FFT ya Arduino: 3 Hatua
Video: Сериал - "Сваты" (1-й сезон 1-я серия) фильм комедия для всей семьи 2024, Novemba
Anonim
HarakaFT: Kasi ya Juu FFT ya Arduino
HarakaFT: Kasi ya Juu FFT ya Arduino

Arduino ya kawaida ina nguvu ndogo ya RAM na usindikaji, na FFT ni mchakato mkubwa wa hesabu. Kwa matumizi mengi ya wakati halisi, hitaji pekee ni kupata masafa na kiwango cha juu au inahitajika kugundua kilele cha masafa.

Katika moja ya kufundisha kwangu, niliandaa nambari ya FFT ambayo inaweza kupatikana hapa: EasyFFT

Nambari hii iliweza kutekeleza FFT hadi sampuli 128 kwenye Arduino nano. Nambari ya juu kuliko hii haiwezekani kwa sababu ya kumbukumbu ndogo ya Arduino. Nimebadilisha kazi kidogo kuboresha kasi na kupunguza matumizi ya kumbukumbu. Marekebisho haya huruhusu Arduino kufanya FFT mara tano kwa kasi na hutumia kumbukumbu karibu nusu. Maagizo haya hayashughulikii Kufanya kazi kwa FFT, marejeleo yake yanaweza kupatikana katika EasyFFT.

Hatua ya 1: Kufanya kazi

Kufanya kazi
Kufanya kazi
Kufanya kazi
Kufanya kazi
Kufanya kazi
Kufanya kazi
Kufanya kazi
Kufanya kazi

Kazi ya kawaida ya FFT imebadilishwa ili kuboresha kasi na usahihi mdogo. Kama inavyoonyeshwa kwenye picha ishara ya mtihani inahitaji kuzidishwa na sine au fomu za mawimbi ya cosine. Thamani hizi zinaweza kuwa kati ya 0 hadi 1, kwa hivyo kufanya kuzidisha kuelea ni lazima. katika Arduino, kuzidisha kwa kuelea ni polepole ikilinganishwa na shughuli kamili.

Katika kazi hii, wimbi la sine / cosine hubadilishwa na wimbi la mraba. Kama tunavyopaswa kuzidisha ishara ya jaribio na wimbi la mraba ambalo linaweza kuwa na thamani 0, 1 au -1. Kwa sababu hiyo, tunaweza kuchukua nafasi ya kuzidisha kuelea kwa kuongeza kwa jumla au kutoa tu. Kwa nyongeza ya Arduino au kutoa ni karibu mara 5 kwa kasi. Hii inafanya kutatua karibu mara 5 haraka.

Kwa sababu ya mabadiliko haya sasa viwango vya pipa la masafa vinaweza kuhifadhiwa kama nambari (ambayo hapo awali ilielea) na tunapata faida nyingine ya matumizi ya kumbukumbu ya chini. Katika Arduino Nano, int hutumia kaiti 2 za kumbukumbu wakati kuelea hutumia kaiti nne za kumbukumbu. Kwa sababu ya faida hii katika nambari mpya, tunaweza kufanya FFT kwa sampuli karibu 256 (sampuli 128 hapo awali).

Katika FFT ya kawaida tulihitaji kuhifadhi thamani ya sine ili kufanya suluhisho haraka. Katika kazi mpya, kwani hatuhitaji tena maadili ya sine / cosine tunaweza kuiondoa na kuhifadhi kumbukumbu.

Utekelezaji:

Utekelezaji wa kazi hii ni moja kwa moja mbele. Tunaweza tu kunakili kazi kwenye nambari ya nambari. Kazi hii inaweza kutekelezwa kwa kutumia amri iliyo chini:

kuelea f = Q_FFT (data, 256, 100); Katika kazi Q_FFT,

data: neno hili ni safu yenye maadili ya ishara, saizi iliyopendekezwa ya sampuli ni 2, 4, 8, 32, 64, 128, 256, 512,… na kuendelea. ikiwa saizi ya sampuli sio ya nambari hizi itakatwa kwa upande wa karibu zaidi wa maadili. kwa mfano, ikiwa saizi ya sampuli ni 75 kuliko FFT itafanywa kwa nambari 64 za sampuli. Idadi kubwa ya ukubwa wa sampuli imepunguzwa na RAM inayopatikana kwenye Arduino.

Muda wa pili unataja idadi ya sampuli katika safu na neno la mwisho ni masafa ya sampuli katika Hz.

Hatua ya 2: Kanuni

Sehemu hii inaelezea marekebisho yaliyofanywa katika nambari ya EasyFFT ambayo inahitaji kuzingatiwa wakati wa kufanya marekebisho kwenye nambari, 1. Kama ilivyoelezwa hapo awali, hapa idadi kamili hutumiwa kufanya FFT. Int katika Arduino ni nambari 16-bit na inaweza kuwa na maadili kutoka -32768 hadi 32768. wakati wowote thamani ya hii inazidi fungu hili husababisha shida. kuondoa shida hii baada ya hesabu ya kiwango. ikiwa yoyote ya thamani inazidi safu kamili 15000 itagawanywa na 100. hii itazuia int kufurika.

2. Hesabu ya Amplitude: Ili kuhesabu urefu, sehemu halisi na ya kufikiria inahitaji kuwa mraba na mzizi wa mraba wa jumla unahitajika. mraba na mzizi wa mraba wa kazi ni kuchukua muda. ili kufanya mchakato kuwa wa haraka zaidi, nambari hii itafanya tu ukubwa wa sehemu halisi na za kufikirika. Kwa kweli hii sio sahihi na inaweza kusababisha hitimisho lisilofaa katika hali zingine. unaweza kuchagua kurudi kwa njia ya Kawaida ya hesabu ya ukubwa lakini itachukua muda zaidi na unahitaji pia kufanya mpangilio wa kuhifadhi nambari hizi.

3. Nambari hii haina moduli ya kugundua kilele nyingi. Itachagua tu thamani na kiwango cha juu cha max (ukiondoa nambari ya kwanza ambayo ni DC offset). Ikiwa unahitaji vilele vingi unaweza kutaja nambari ya EasyFFT na ufanye marekebisho yanayohitajika hapa. Katika kesi hiyo, safu / ubadilishaji pia unahitaji kutangazwa kama utofauti wa ulimwengu.

4. Kazi ina laini ifuatayo:

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

kutangaza vigeuzi hapo juu kama ubadilishaji wa ulimwengu (kuibandika mwanzoni mwa nambari) kutaokoa wakati mahali milisekunde 1 wakati wa kila utekelezaji.

5. Tofauti na kazi ya EasyFFT, ambapo vilele 5 vya juu vilihifadhiwa katika safu iliyotanguliwa. Kazi hii itarudisha thamani ya kuelea. Thamani hii inawakilisha masafa na kiwango cha juu katika Hz. Kwa hivyo uwakilishi wa nambari utaonekana kama hii.

kuelea f = Q_FFT (data, 256, 100);

6. Kugundua kilele: Mara tu masafa yenye kiwango cha juu hupatikana kazi hii hutumia urefu wa masafa kabla na baada yake kuhesabu matokeo sahihi. Amplitude inayotumika katika hesabu hii pia ni jumla ya moduli (sio mzizi wa mraba wa jumla ya mraba)

ikiwa Fn ni masafa na amplitude ya juu basi masafa yanaweza kuhesabiwa kutoka chini ya fomula.

Halisi F = (A n-1 * Fn-1 + An-1 * Fn-1 + An-1 * Fn-1) / (An-1 + An + An + 1)

ambapo An ni amplitude ya n masafa na Fn-1 ni thamani ya masafa.

Hatua ya 3: Matokeo:

Matokeo
Matokeo
Matokeo
Matokeo

Kutatua wakati kunaonyeshwa kwa kulinganisha picha hapo juu na EasyFFT. Kasi yake imeonyeshwa na kulinganisha.

Kwa data ya sampuli iliyo na mawimbi 3 ya sinusoidal na masafa tofauti yanaonyeshwa. Matokeo kutoka kwa QuickFFT inalinganishwa na pato la Scilab. Kama tunaweza kuona kwenye picha kilele cha 3 na kiwango cha juu kinalingana na pato la Scilab. Walakini, pato lina kelele nyingi, ambazo zinaweza kupotosha kwa programu zingine. Kwa hivyo inashauriwa kuangalia nambari vizuri kabla ya kuomba programu yako.

Natumahi umepata nambari hii muhimu kwa mradi wako. Ikiwa kuna swali au maoni tafadhali toa maoni.

Ilipendekeza: