Kazalo:

Arduino: Frekvenčna pretvorba (DFT): 6 korakov
Arduino: Frekvenčna pretvorba (DFT): 6 korakov

Video: Arduino: Frekvenčna pretvorba (DFT): 6 korakov

Video: Arduino: Frekvenčna pretvorba (DFT): 6 korakov
Video: Схема аналогового звукового генератора тарелок драм-машины DR-110 2024, Julij
Anonim
Arduino: Frekvenčna transformacija (DFT)
Arduino: Frekvenčna transformacija (DFT)

ta program je namenjen izračunu frekvenčne transformacije na arduinu s krmiljenjem nad parametri. To je rešeno z oskvrnjenim fouriior preoblikovanjem.

to ni FFT

FFT je algoritem, ki se uporablja za reševanje DFT z manjšim časom.

Kodo za FFT najdete tukaj.

1. korak: Kako deluje (koncept):

Kako deluje (koncept)
Kako deluje (koncept)
Kako deluje (koncept)
Kako deluje (koncept)

Program za frekvenčno pretvorbo zagotavlja odličen nadzor nad izhodom, ki ga potrebujete. ta program ovrednoti frekvenčno območje, ki ga poda uporabnik pri danem vhodu za nabor podatkov.

  • Na sliki je podatek iz dveh frekvenc, imenovanih f2 in f5, ki ju je treba preizkusiti. f2 in f5 sta naključna imena za dve frekvenci, večje število za relativno višjo frekvenco. tu ima manjša frekvenca f2 višjo amplitudo in f5 manjšo amplitudo.
  • Matematično je mogoče prikazati, da -povzetek množenja dveh harmoničnih nizov podatkov z različno frekvenco teži k nič (večje število podatkov lahko privede do testa). V našem primeru Če imata ta dva frekvenca množenja enako (ali zelo blizu) frekvenco, je vsota množenja različno od nič, kjer je amplituda odvisna od amplitude podatkov.
  • Za odkrivanje določene frekvence je mogoče nabor podatkov pomnožiti z različnimi frekvencami preskusov, rezultat pa lahko v podatkih poda komponento te frekvence.

2. korak: Kako deluje (v kodi):

Kako deluje (v kodi)
Kako deluje (v kodi)
Kako deluje (v kodi)
Kako deluje (v kodi)

kajti podani podatki (f2+f5) se ena za drugo f1 do f6 pomnožijo in vrednost vsote zabeleži. ta končna vsota predstavlja vsebino te frekvence. počitek (neskladje) frekvence bi moral biti v idealnem primeru nič, v realnem primeru pa to ni mogoče. za vsoto nič je potrebno imeti neskončno velikost naborov podatkov.

  • kot je prikazano na sliki od f1 do f6, je prikazano njeno množenje z naborom podatkov na vsaki točki.
  • na drugi sliki je narisan seštevek tega množenja pri vsaki frekvenci. dva vrha pri 1 in 5 je mogoče prepoznati.

tako lahko z istim pristopom za naključne podatke ocenimo toliko frekvenc in analiziramo frekvenčno vsebino podatkov.

3. korak: Uporaba kode za analizo frekvence:

Uporaba kode za analizo frekvence
Uporaba kode za analizo frekvence

na primer s to kodo poiščemo DFT kvadratnega vala.

najprej prilepite priloženo kodo (funkcija dft) za zanko, kot je prikazano na sliki

8 POJMOV, KI MORATE NAVEDITI

  1. niz, ki ga je treba vzeti dft
  2. velikost matrike
  3. časovni interval med 2 odčitkoma v nizu v miliSECONDS
  4. nižja vrednost frekvenčnega območja v Hz
  5. zgornja vrednost frekvenčnega območja v Hz
  6. velikost korakov za frekvenčno območje
  7. ponovitev signala (najmanj 1) večja natančnost števila udarcev, vendar podaljšan čas raztopine
  8. funkcija okna:

    0 za brez okna1 za okno z ravnim vrhom 2 za hannovo okno 3 za okno za udarjanje

(če nimate pojma o izbiri okna, obdržite privzeto 3)

primer: dft (a, 8, 0,5, 0, 30, 0,5, 10, 3); tukaj je niz elementov velikosti 8, ki jih je treba preveriti za 0 Hz do 30 Hz z 0,5 korakom (0, 0,5, 1, 1,5,…, 29, 29,5, 30) 10 ponovitev in okno za udarjanje

tukaj je mogoče uporabiti matriko večjih velikosti, kolikor zmore arduino.

4. korak: Izhod:

Izhod
Izhod
Izhod
Izhod

če komentirate

Serial.print (f); Serial.print ("\ t");

iz kode bo serijski ploter dal naravo frekvenčnega spektra in če ne bo serijski monitor dal frekvenco s svojo amplitudo.

5. korak: Preverjanje različnih oken in velikosti vzorcev:

Preverjanje različnih velikosti oken in vzorcev
Preverjanje različnih velikosti oken in vzorcev

na sliki se frekvenca sinusnega vala meri z različnimi nastavitvami.

6. korak: Primer:

Primer
Primer

v sliki primerjamo preoblikovanje podatkov s pomočjo SciLaba in arduina.

Priporočena: