Inhoudsopgave:

Arduino: frequentietransformatie (DFT): 6 stappen
Arduino: frequentietransformatie (DFT): 6 stappen

Video: Arduino: frequentietransformatie (DFT): 6 stappen

Video: Arduino: frequentietransformatie (DFT): 6 stappen
Video: Уроки Ардуино #0 - что такое Arduino, куда подключаются датчики и как питать Ардуино 2024, Juli-
Anonim
Arduino: Frequentietransformatie (DFT)
Arduino: Frequentietransformatie (DFT)

dit programma is om frequentietransformatie op Arduino te berekenen met beslagcontrole over parameters. Het wordt opgelost met behulp van desecrate fouriior-transformatie.

dit is geen FFT

FFT is een algoritme dat wordt gebruikt om DFT in kortere tijd op te lossen.

Code voor FFT vindt u hier.

Stap 1: Hoe het werkt (concept):

Hoe het werkt (concept)
Hoe het werkt (concept)
Hoe het werkt (concept)
Hoe het werkt (concept)

Het gegeven programma voor frequentietransformatie biedt geweldige controle over de output die u nodig hebt. dit programma evalueert het door de gebruiker opgegeven frequentiebereik voor de dataset.

  • In figuur een dataset gemaakt van twee frequenties genaamd f2 en f5 gegeven die moeten worden getest. f2 en f5 zijn willekeurige namen voor twee frequenties, een hoger getal voor een relatief hogere frequentie. hier heeft een kleinere frequentie f2 een hogere amplitude en heeft f5 een kleinere amplitude.
  • Het kan wiskundig worden aangetoond dat -sommatie van vermenigvuldiging van twee harmonische datasets met verschillende frequentie naar nul neigt (een hoger aantal gegevens kan leiden tot beslagresultaat). In ons geval Als deze twee vermenigvuldigingsfrequenties dezelfde (of zeer dichte) frequentie hebben, is de som van de vermenigvuldiging niet nul, waarbij de amplitude afhangt van de amplitude van de gegevens.
  • om een specifieke frequentie te detecteren, kan de gegeven dataset worden vermenigvuldigd met verschillende testfrequenties en het resultaat kan een component van die frequentie in gegevens geven.

Stap 2: Hoe het werkt (in code):

Hoe het werkt (in code)
Hoe het werkt (in code)
Hoe het werkt (in code)
Hoe het werkt (in code)

voor die gegeven gegevens (f2+f5) wordt één voor één f1 tot f6 vermenigvuldigd en wordt de waarde van de som genoteerd. die eindsom vertegenwoordigt de inhoud van die frequentie. rust (niet-overeenkomend) van frequentie zou idealiter nul moeten zijn, maar het is niet mogelijk in het echte geval. om de som nul te maken, is een oneindige hoeveelheid datasets vereist.

  • zoals kan worden getoond in figuur f1 tot f6 proeffrequentie en de vermenigvuldiging met dataset op elk punt wordt getoond.
  • in de tweede figuur wordt de som van die vermenigvuldiging bij elke frequentie uitgezet. twee pieken bij 1 en 5 is herkenbaar.

dus met dezelfde benadering voor willekeurige gegevens kunnen we voor zoveel frequenties evalueren en de frequentie-inhoud van gegevens analyseren.

Stap 3: Code gebruiken voor frequentieanalyse:

Code gebruiken voor frequentieanalyse
Code gebruiken voor frequentieanalyse

laten we bijvoorbeeld deze code gebruiken om DFT van blokgolf te vinden.

plak eerst de bijgevoegde code (dft-functie) na de lus zoals weergegeven afbeelding

8 VOORWAARDEN DIE MOETEN WORDEN GESPECIFICEERD

  1. een array waarvan dft moet worden genomen
  2. grootte van een array
  3. tijdsinterval tussen 2 metingen in array in milliSECONDS
  4. lagere waarde van frequentiebereik in Hz
  5. bovenste waarde van frequentiebereik in Hz
  6. grootte van stappen voor frequentiebereik
  7. herhaling van een signaal (minimaal 1) hogere nauwkeurigheid van de slagman maar langere oplossingstijd
  8. venster functie:

    0 voor geen raam1 voor plat dakraam 2 voor hannraam 3 voor sluitraam

(als je geen idee hebt over het selecteren van venster, blijf standaard 3)

voorbeeld: dft(a, 8, 0,5, 0, 30, 0,5, 10, 3); hier is een array van maat 8-elementen die moeten worden gecontroleerd op 0 Hz tot 30 Hz met 0,5 stap (0, 0,5, 1, 1,5, …, 29, 29,5, 30) 10 herhaling en hamming-venster

hier is het mogelijk om een grotere array te gebruiken, zoveel als Arduino aankan.

Stap 4: Uitgang:

Uitgang
Uitgang
Uitgang
Uitgang

als je commentaar geeft

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

van code zal de seriële plotter de aard van het frequentiespectrum geven, zo niet zou een seriële monitor frequentie geven met zijn amplitude.

Stap 5: Verschillende venster- en voorbeeldgroottes controleren:

Verschillende venster- en monstergroottes controleren
Verschillende venster- en monstergroottes controleren

in figuur wordt de frequentie van de sinusgolf gemeten met behulp van verschillende instellingen.

Stap 6: Voorbeeld:

Voorbeeld
Voorbeeld

in figuur transformatie van gegevens met behulp van SciLab en arduino wordt vergeleken.

Aanbevolen: