Springen naar inhoud

fourieranalyse


  • Log in om te kunnen reageren

#1

Swets

    Swets


  • >25 berichten
  • 30 berichten
  • Gebruiker

Geplaatst op 28 augustus 2014 - 23:42

Ik wil eens iets van een spectrumanalyzer maken met een micro controller....   en ik heb al heel vaak de tip gekregen fourieranalyse te gebruiken....

 

maar ik weet helemaal niet wat het is?  is dit uit te leggen in Jip en Janneke taal ?

 

 

Kom eens kijken op me Homepage!


Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

physicalattraction

    physicalattraction


  • >1k berichten
  • 3104 berichten
  • Moderator

Geplaatst op 29 augustus 2014 - 06:25

In Jip en Janneke taal kun je wellicht zeggen: Fourieranalyse is een wiskundige techniek waarmee je van een periodieke functie (bijvoorbeeld een geluidsgolf) objectief bepaalt welke frequenties hierin domineren.

 

Uitleggen hoe het werkt gaat niet in Jip en Janneke taal. Google eens naar een introductie over Fourieranalyse en kijk of je dit begrijpt. Indien er specifieke dingen zijn die je niet begrijpt, kun je die hier natuurlijk altijd voorleggen.


#3

paac

    paac


  • >250 berichten
  • 271 berichten
  • Ervaren gebruiker

Geplaatst op 29 augustus 2014 - 09:11

Mijn Jip en Janneke poging:
Een source straalt energie uit en deze energie wordt opgevangen door de detector.
De interferometer zorgt dan voor onderscheid tussen golflengtes, maar de detector meet alsnog een mengsel van alle golflengtes tegelijk en dit vormt je interferogram.
Een fourier analyse kan dan op het interferogram worden toegepast om het onderscheid tussen de golflengtes te maken en per golflengte de gemeten energie te bepalen.

Hier een voorbeeld van hoe dat mbv Excel kan:
http://news.techgeni...icrosoft-excel/

 

Plan? I don't need a plan, just a goal. The rest will follow on its own.
Clever waste of time: Level 31


#4

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 29 augustus 2014 - 09:30

Mijn jip en janneke:

Als je normaal een oscilloscoop opzet, dan zie je de spanning van het signaal in functie van de tijd. Nu zou je ook naar iets anders kunnen kijken, bijvoorbeeld naar energie van het signaal in functie van de frequentie. Dat laatste noemen we het spectrum.

 

De spanning in functie van de tijd noemen we (soms) het tijdsdomein. De energie in functie van de frequentie noemen we (soms) het fourierdomein. De transformatie, om van de spanning in functie van de tijd de energie in functie van de frequentie te bepalen, noemen we de fouriertransformatie.

 

Hoe kun je dat best berekenen op een microcontroller? Met het FFT-algoritme: http://en.wikipedia....urier_transform

Je kunt veel implementaties vinden als je wat googlet.

Hoe het exact werkt, die transformatie, is niet in jip en janneke uit te leggen. Je moet je functie bekijken alsof hij in een oneindig dimensionale ruimte ligt, en dan een ander assenstelsel kiezen. 

 

Hieronder zie je hoe de frequenties (onderaan) worden toegevoegd om het signaal in het tijdsdomein (bovenaan) te benaderen:

SquareWave.gif

What it all comes down to, is that I haven't got it all figured out just yet
And I've got one hand in my pocket and the other one is giving the peace sign
-Alanis Morisette-

#5

Swets

    Swets


  • >25 berichten
  • 30 berichten
  • Gebruiker

Geplaatst op 29 augustus 2014 - 11:13

bedank allemaal...  ik ga het eens bestuderen

Kom eens kijken op me Homepage!


#6

entropy

    entropy


  • >100 berichten
  • 228 berichten
  • Ervaren gebruiker

Geplaatst op 29 augustus 2014 - 14:59

Met Fourieranalyse kun je een discreet (gesampled) signaal ontbinden in een vast gekozen set onafhankelijke frequenties (de zogenaamde 'harmonischen' :) ). Met de frequenties die je zo verkrijgt kun je, omgekeerd, het discrete signaal weer volledig samenstellen. Je zou kunnen zeggen dat het signaal uit deze frequenties bestaat, het zogenaamde, hier al genoemde, frequentiespectrum van het signaal. Als kanttekening moet je hierbij vermelden dat het signaal ontbonden kan worden in meerdere sets van frequenties, dus dat het spectrum niet onambigu is, maar afhankelijk van welke set frequenties je kiest om het signaal in te ontbinden. :)

Veranderd door entropy, 29 augustus 2014 - 15:00

De oplossing is niet dat er geen oplossing is.


#7

Swets

    Swets


  • >25 berichten
  • 30 berichten
  • Gebruiker

Geplaatst op 29 augustus 2014 - 23:23

ik wil eigenlijk zo iets maken: https://www.youtube....h?v=Bn6BIfr_UgY

 

maar geloof dat deze stof een beetje te hoog gegrepen is voor mij...

Kom eens kijken op me Homepage!


#8

entropy

    entropy


  • >100 berichten
  • 228 berichten
  • Ervaren gebruiker

Geplaatst op 31 augustus 2014 - 10:17

ik wil eigenlijk zo iets maken: https://www.youtube....h?v=Bn6BIfr_UgY

 

maar geloof dat deze stof een beetje te hoog gegrepen is voor mij...

 

Volgens mij kan het tamelijk simpel: Sla in de microcontroller een tabel op met sinus-(cosinus-)waarden, en bereken voor elke frequentie die wilt weergeven de correlatie tussen de sinus(cosinus) en het gesamplede signaal. Dit doe je door een zeker aantal samples te nemen van het signaal, en telkens een sample van het signaal en van een sample van de sinus met elkaar te vermenigvuldigen (wegen), en dat allemaal bij elkaar op te tellen (en te delen door het aantal); dat levert voor deze frequentie de amplitude op. :)

Veranderd door entropy, 31 augustus 2014 - 10:19

De oplossing is niet dat er geen oplossing is.


#9

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 31 augustus 2014 - 10:48

ik wil eigenlijk zo iets maken: https://www.youtube....h?v=Bn6BIfr_UgY

 

maar geloof dat deze stof een beetje te hoog gegrepen is voor mij...

Dat kan je vrij eenvoudig doen:

 

Bereken de FFT van je signaal in een tijdsvenster van N samples. Dat geeft je een discreet spectrum in N frequentie-bins.

De eerste of laatste N/2 frequentie bins gooi je weg, want je spectrum is symmetrisch en je wil doorgaans maar 1 kant visualiseren.

Van de N/2 frequentie bins die je overhoudt bereken je de norm (fouriercoefficienten zijn complex)

Kies K voor het aantal balkjes dat je wil weergeven. Verdeel de N/2 frequentiebins waarin nu reëele getallen zitten in groepjes van N/(2K) en voor elk balkje Ki wordt de hoogte bepaald door de som van alle frequentie-bins die erin zitten.

 

Afhankelijk van de implementatie van je gekozen FFT algoritme wil je de eerste of de laatste N/2 samples bijhouden zodat in het begin van het spectrum dat je overhoudt de lage frequenties zitten. In je visualizatie zullen de meest linkse balkjes dus opspringen als er veel bas in het liedje komt.

 

Deze aanpak is voldoende om gewoon een visualizatie te maken zoals jij aangeeft te willen doen. Als je echt een parametrische equalizer wil maken waarin je bv met knopjes de bassen of de high tones kan boosten of onderdrukken dan moet je het wel iets properder aanpakken door een filterbank te implementeren met perfecte reconstructie.


#10

Swets

    Swets


  • >25 berichten
  • 30 berichten
  • Gebruiker

Geplaatst op 31 augustus 2014 - 12:04

jaja... vrij eenvoudig.. :-) 

 

kan niet iemand in een beetje bijvoorbeeld een beetje basic achtig voorbeeld iets laten zien?

 

Tabel maken ...oke... dat is een rij getallen....

 

nu krijg ik het "geluid" binnen via een analoge input...

 

en dan?

 

 

@Xenion: nee eerst alles maar eens heel heel simpel houden....

Kom eens kijken op me Homepage!


#11

entropy

    entropy


  • >100 berichten
  • 228 berichten
  • Ervaren gebruiker

Geplaatst op 31 augustus 2014 - 12:17

Analoge signaal naar een A/D converter, en steeds een reeks samples nemen (bijv. 512 samples). Dan vermenigvuldig je de waarden van de tabel met die van het signaal. Normaliseer de waarden in de tabel en die van de samples van het signaal naar een bereik van 0 tot 1 (dus achter de komma); dan krijg je uit de berekening, als je deelt door het aantal waarden (512) de correlatiewaarde van de sinus in de tabel met het signaal. Deze correlatiewaarde geeft de hoogte van het balkje voor die frequentie (tussen 0 en 1). LET OP: De sinus in de tabel heeft een bepaalde frequentie. Om uit deze tabel een sinus met een andere frequentie te destilleren (een harmonische, zoals 2x de basisfrequentie van de sinus, of 3x de frequentie, of 4x etc) moet je de 'tussenliggende waarde' van twee samples in de tabel kunnen nemen. Dit kun je in de praktijk doen met lineaire interpolatie, dus als de ene waarde in de tabel 0.1 is en de volgende 0.2, en je wilt de waarde op 1/3 tussen de 0.1 en de 0.2 berekenen, dan krijg je dus (lineair) 0.13333...! Deze waarde (0.13333) kun je dan vermenigvuldigen met de waarde van de sample uit het signaal. (de tabel bevat 1 frequentie, maar je wil sinussen met willekeurige frequenties eruit kunnen berekenen)

 

(Misschien moet je naast de sinussen ook de cosinussen nemen, maar dat weet ik niet precies...(dit kan overigens uit dezelfde tabel volgens cos(x)=sin(x+1/2 pi) Ik denk dat je dan de stelling van Pythagoras moet toepassen √(sin²(x)+cos²(x)) - ik weet zo snel niet hoe een microcontroller dat kan berekenen... misschien ook een tabel van maken? :D D.w.z. een reeks van wortels tussen 0 en 1, en een reeks van kwadraten van 0 tot 1 ;) )

Veranderd door physicalattraction, 02 september 2014 - 08:43
Onnodige quote verwijderd

De oplossing is niet dat er geen oplossing is.


#12

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 31 augustus 2014 - 17:03

entropy,

 

De methode die je voorstelt vergeet volgens mij rekening te houden met de fases van de verschillende frequentie componenten (tenzij je inderdaad ook naar cosinusen gaat kijken die in tegenfase gaan). Komt uiteindelijk jouw methode in de buurt van het "brute force" berekenen van de DTF dmv matrix vermenigvuldiging?


#13

entropy

    entropy


  • >100 berichten
  • 228 berichten
  • Ervaren gebruiker

Geplaatst op 31 augustus 2014 - 17:24

In feite komt het daar wel op neer ja. ;)

 

Voor elke frequentie een aparte tabel maken is misschien inderdaad nog een beter idee, als je voldoende geheugen on board hebt.. :)

 

Als je FFT wilt toepassen zou ik naar een van de vele beschikbare reeds bestaande code op internet kijken voor de microcontroller in kwestie - is wellicht een veel beter idee!  ;)

Veranderd door physicalattraction, 02 september 2014 - 08:44
Onnodige quote verwijderd

De oplossing is niet dat er geen oplossing is.


#14

Jekke

    Jekke


  • >250 berichten
  • 997 berichten
  • Ervaren gebruiker

Geplaatst op 07 september 2014 - 19:20

De spectrum analyzer is te vergelijken met de driedimensionale ruimte.

 

In de 3D ruimte kunnen we een punt/vector voorstellen als een combinatie van de drie eenheidsvectoren. Hiervoor zijn 3 'gewichten' nodig.

 

Bijvoorbeeld: Het punt (3,-2,7) heeft als 'gewichten' 3, -2 en 7 en is gelijk aan (3,-2,7) = 3 x e1 - 2 x e2 +7 x e3

 

 

De spectrum analyzer bekijkt nu een signaal als een combinatie van 'eenheidssinussen' (sinussen met verschillende fase). Het gemeten spectrum zijn dan gewoon de bijhorende 'gewichten'






0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures