fourieranalyse

Moderators: dirkwb, Xilvo

Forumregels
(Middelbare) school-achtige vragen naar het forum "Huiswerk en Practica" a.u.b.
Zie eerst de Huiswerkbijsluiter
Reageer
Gebruikersavatar
Berichten: 96

fourieranalyse

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!

Gebruikersavatar
Moderator
Berichten: 4.097

Re: fourieranalyse

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.

Berichten: 301

Re: fourieranalyse

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.techgenie.com/technology/how-to-do-a-fast-fourier-transform-fft-in-microsoft-excel/

 
Plan? I don't need a plan, just a goal. The rest will follow on its own.

Clever waste of time: Level 31

Gebruikersavatar
Berichten: 5.609

Re: fourieranalyse

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.org/wiki/Fast_Fourier_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:
Afbeelding
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-

Gebruikersavatar
Berichten: 96

Re: fourieranalyse

bedank allemaal...  ik ga het eens bestuderen
Kom eens kijken op me Homepage!

Gebruikersavatar
Berichten: 234

Re: fourieranalyse

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. :)
De oplossing is niet dat er geen oplossing is.

Gebruikersavatar
Berichten: 96

Re: fourieranalyse

ik wil eigenlijk zo iets maken: https://www.youtube.com/watch?v=Bn6BIfr_UgY
 
maar geloof dat deze stof een beetje te hoog gegrepen is voor mij...
Kom eens kijken op me Homepage!

Gebruikersavatar
Berichten: 234

Re: fourieranalyse

Swets schreef: ik wil eigenlijk zo iets maken: https://www.youtube.com/watch?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. :)
De oplossing is niet dat er geen oplossing is.

Gebruikersavatar
Berichten: 2.609

Re: fourieranalyse

Swets schreef: ik wil eigenlijk zo iets maken: https://www.youtube.com/watch?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.

Gebruikersavatar
Berichten: 96

Re: fourieranalyse

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!

Gebruikersavatar
Berichten: 234

Re: fourieranalyse

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 ;) )
De oplossing is niet dat er geen oplossing is.

Gebruikersavatar
Berichten: 2.609

Re: fourieranalyse

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?

Gebruikersavatar
Berichten: 234

Re: fourieranalyse

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!  ;)
De oplossing is niet dat er geen oplossing is.

Gebruikersavatar
Berichten: 997

Re: fourieranalyse

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'

Reageer