Springen naar inhoud

Fft voor een dummy


  • Log in om te kunnen reageren

#1

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 29 november 2009 - 13:13

Ik doe als hobbie radio-astronomie mbv interferometrie. Ik gebruik 2 antennes die de ruis uit de ruimte ontvangen.
Deze ruis bevat de signalen van de diverse bronnen.
Omdat de antennes een eind uit elkaar staan, zal de ruis in fase verschillen. Dit faseverschil is een maat voor
de hoek waaronder het signaal de antennes bereikt.
Ik denk dat dit faseverschil met FFT te vinden moet zijn.
Ik heb inmiddels wel een FFT algoritme geprogrammeerd en dat werkt goed. De frequentie en de amplitude
kan ik vinden, maar de fase.. Ik vind nergens voor mij duidelijke uitleg.
Ik heb een hekel aan wiskunde...ik snap er ook weinig van, maar wil het wel als zijnde een dummy gebruiken...
Het zal er wel op neer komen dat ik wat moet rommelen met de beide output-arrays van de FFT.
Vast mijn dank

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

#2

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 29 november 2009 - 14:22

Ik doe als hobbie radio-astronomie mbv interferometrie. Ik gebruik 2 antennes die de ruis uit de ruimte ontvangen.
Deze ruis bevat de signalen van de diverse bronnen.
Omdat de antennes een eind uit elkaar staan, zal de ruis in fase verschillen. Dit faseverschil is een maat voor
de hoek waaronder het signaal de antennes bereikt.
Ik denk dat dit faseverschil met FFT te vinden moet zijn.
Ik heb inmiddels wel een FFT algoritme geprogrammeerd en dat werkt goed. De frequentie en de amplitude
kan ik vinden, maar de fase.. Ik vind nergens voor mij duidelijke uitleg.
Ik heb een hekel aan wiskunde...ik snap er ook weinig van, maar wil het wel als zijnde een dummy gebruiken...
Het zal er wel op neer komen dat ik wat moet rommelen met de beide output-arrays van de FFT.
Vast mijn dank

Eigenlijk is het nochtans vrij simpel. Ieder complex getal C dat uit je formules komt bevat 2 delen, een imaginair deel en een reŽel deel. Die kun je nu schrijven als C=a+bi of C=A.exp(i.phi).

a en b zijn gewoon het reŽel en complex deel, en hieruit is niet bijzonder veel af te leiden voor fase-analyse, maar het tweede is eigenlijk veel duidelijker. Hier staat A voor de amplitude en phi voor de fasehoek.

De formules om van de ene naar de andere over te gaan zijn vrij simpel: A=a≤+b≤ en phi = Bgtan(b/a). Let wel, het is niet een gewone boogtangens die gaat van -pi/2 tot pi/2, maar een die gaat van -pi tot pi.

Waar het eigenlijk op neerkomt bij FFT is dat je voor iedere frequentie een complex getal uitkomt. In dit complex getal zit enerzijds de informatie over de amplitude die de sinusgolf bij die frequentie heeft, anderzijds ook over de fase die die sinusgolf voor of achterloopt. Hieruit kun je dan inderdaad de richting (in het vlak, dus niet lokaliseerbaar op de hemel) bepalen als je 2 ontvangers hebt, maar volgens mij moeten je ontvangers dan wel heel goed timen om dat tijdsverschil te kunnen merken. (maar ik ken niets van die dingen, dus het zou uiteraard kunnen dat dit helemaal geen probleem is :eusa_whistle:)

Ik hoor het graag als je hiermee verder wilt, of meer uitleg wilt. ](*,)
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-

#3

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 29 november 2009 - 15:56

Beste 317070,
Dankjewel voor je duidelijke uitleg.
Hier kan ik verder mee.
Fase is altijd tov iets gemeten. Ik zie nog niet helemaal hoe dit met fft zal gaan werken, maar ik ga
gewoon wat experimenteren en dan kom ik er wel achter.
Mocht het niet lukken, dan zal ik je hier nogmaals om raad vragen..
Heel mooi dat dit soort plekken op het internet bestaan.!

Op dit moment ben ik nog niet aan fase-meten toe. Ik gebruik nu 2 precies dezelfde antennes met in elke
antenne een extreem gevoelige hoogfrequent versterker en 2 precies evenlange coax kabels die naar 1
ontvanger lopen.Ik ontvang op 35 MHz d.i. 8 Meter golflengte. De twee kabels zijn via een , zeg maar, sterkteregel netwerkje aan de ontvanger
gekoppeld. Ik meet elke 10 seconden de sterkte van de ruis die uit de ontvanger komt.
In de loop van de dag zie je een aantal bergen en dalen in de grafiek. Hoe verder je de antennes uit elkaar
zet, hoe smaller die bergen en dalen worden.
Dit representeert dus de faseverschillen tussen de beide signalen.
Omdat dit resultaat klopt met wat je zou verwachten concludeer ik dat mijn apparatuur gevoelig genoeg
is om de zwakke signalen uit de ruimte te detecteren.
De volgende stap is 2 volledig identieke ontvangers bouwen, die ook nog coherent werken en als output
een frequentie afgeven die nog net met een snelle Analoog Digitaal converter te behappen is.
Ik krijg dan dus van elke antenne een rij getallen die de ontvangen sinus representeerd.
Met behulp van FFT hoop ik dan de diverse gegevens aan die signalen te ontfutselen.
Elke dag minus 4 minuten ziet de hemel boven ons er het zelfde uit.
Dus als je na een paar dagen de antennes verplaatst (onder een andere hoek) en dat een flink aantal keren
doet kun je toch bepalen waar de bron staat.
Het is een heel gedoe, en heel veel gedenk en gereken, maar ik ga het toch proberen.
Lang verhaal, maar ik leg je dit uit als dank voor je uitleg. Dan weet je welk effect je antwoord heeft.

Nogmaals, bedankt. Als ik er niet uit kom, meld ik me weer.

#4

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 27 maart 2010 - 21:05

Beste 317070
Ik kom er toch niet goed uit.
De apparatuur begint zijn voltooing te naderen. Dus ik ben alvast wat normale ruis en toongenerator signalen aan
het digitaliseren.
Het plotten van het frequentie spectrum gaat fantastisch. Ook de ijking ging prima.

Als ik op dezelfde manier de phase probeer te plotten begrijp ik absoluut niet wat ik te zien krijg.
Ik doe voor elk volgnummer uit de beide arrays de atan nemen van de verhouding.
Dit zou dus de phase moeten opleveren.
Als ik een wiskundige sinus in het reele deel stop, en in het imaginaire deel dezelfde sinus stop, maar
een stukje opgeschoven en ik doe daarna de fft berekenen krijg ik een grafiek waar ik absoluut niets
van snap.
Ik weet in dit geval precies wat het phaseverschil tussen beide sinussen is.
Hoe kan ik nu dit phaseverschil uit de grafiek halen????
Want dat is wat ik straks wil gaan doen met ruis uit de ruimte.

Vast bedankt
Wim

#5

mcs51mc

    mcs51mc


  • >250 berichten
  • 470 berichten
  • Ervaren gebruiker

Geplaatst op 28 maart 2010 - 16:39

Begrijp ik het goed dat je twee 35MHz signalen door twee ADC's stuurt en dat je uit die digitale data de fase tussen de twee 35MHz wilt bepalen?
Mag ik vragen aan welke snelheid je die 35MHz signalen sampelt?

Waarom gebruik je hiervoor een FFT?
Je digitale data stelt toch de amplitude van elke sinus voor right?
Dus als je de Boogsinus uitrekent voor twee gelijktijdig gesampelde data weet je de hoek van elk signaal. Door deze van elkaar af te trekken weet je toch de fase tussen je twee signalen.
Of mis ik ergens iets?

Kan je gesampelde data posten?
Dat zal veel duidelijk maken!

Veranderd door mcs51mc, 28 maart 2010 - 16:40


#6

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 29 maart 2010 - 10:48

Ik zal het proberen uit te leggen: Het is allemaal erg ingewikkeld, maar ik zal mijn best doen.

Ik doe nu stap voor stap de diverse onderdelen bouwen en uittesten ( en proberen te snappen)

De uiteindelijke situatie:
Een aantal "sterren" zenden ruis uit. Deze ruis wordt door 2 antennes ontvangen.
Twee ontvangers versterken deze ruis coherent maar produceren zelf ook ruis die niet coherent is.
De ruis wordt omgezet en gebrensd naar een traject van 0 tot 3000 Hz.
Deze ruis wordt door 1 adconvertor omgezet in getallen. Beide signalen worden door deze adconvertor
om en om gedigitaliseerd. Zo ontstaan 2 rijen getallen. Voor elke ontvanger 1 dus.
Om de sterrenruis van de ontvangerruis te scheiden gebruik ik FFT want de ruis van de ontvangers
is verschillend terwijl de ruis van de sterren hetzelfde is, alleen dan in fase verschoven.
Dit afhankelijk van de positie van de ster aan de hemelbol.
Deze fase wil ik nu gaan bepalen, want dat geeft aan waar de ster stond tijdens de meting.
Dit laatste is ietsje ingewikkelder, maar dat doet er nu even niet toe.

Nu de praktijk:
De adconvertor doet 30000 metingen per seconden. Dit verdeeld over 2 kanalen.
een sinus van 1000 Hz bestaat dan uit 15 samples per sinus ( in 1 kanaal)
Bij 3000 Hz zit ik zo dus nog ruimschoots boven de Nyquist waarde.

De digitiser is klaar en ik ben nu bezig om FFt en fase uit te proberen.
Ik digitaliseer nu als bovenstaand een toon van 1000 Hz uit een signaalgenerator en die stop ik
nu in een FFT routine.
Dezelfde sinus verschuif ik nu een klein stukje en stop die in dezelfde FFT routine.

Ik probeer nu de resultaten te snappen.
Helaas, ik snap ze niet. Er komen de meest wilde grafieken uit.......

Hoe kan ik straks nu de ruis gaan beoordelen om de fase van de strerrenuis te bepalen...
Als het met een simpele sinus niet eens lukt.....
Ik moet nog veel leren dus....

De profs van LOFAR gebruiken deze truuk ook.. dus het moet werken....

#7

mcs51mc

    mcs51mc


  • >250 berichten
  • 470 berichten
  • Ervaren gebruiker

Geplaatst op 30 maart 2010 - 18:57

Probeer je de fase uit de FFT te halen? Dit kan volgens mij niet :eusa_whistle:

Met een FFT zal je alle frequenties in het signaal weten maar geen fase tussen de verschillende componenten.
Bijgesloten een screenshot van een LabVIEW simulatie ](*,)
Grafiek "Afzonderlijke signalen"
wit = eerste signaal van de ster
rood = tweede signaal van de ster, zelfde frekwentie, zelfde amplitude maar een beetje verschoven
groen = ruis van eerste ontvanger (andere amplitude en frekwentie)
blauw = ruis van tweede ontvanger (nog eens andere amplitude en frekwentie)

Grafiek "Signalen met ruis"
wit = eerste ontvanger
rood = tweede ontvanger

Grafiek FFT result
FFT berekening van LabVIEW op vorige twee signalen
groen = eerste ontvanger, piek bij 10 van signaal ster en zťťr kleine piek bij 32 van ruis
rood = tweede ontvanger, piek bij 10 van signaal ster en kleine piek bij 17 van ruis

Van de fase tussen beide stersignalen geen spoor te zien in FFT resultaat ](*,)


Moest je nu eens wat van jouw signalen posten en zeggen wat je juist niet verstaat zouden we je misschien verder kunnen helpen.

Bijgevoegde miniaturen

  • SNAG_003.jpg

#8

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 30 maart 2010 - 19:26

Beste 317070
Ik kom er toch niet goed uit.

Als ik een wiskundige sinus in het reele deel stop, en in het imaginaire deel dezelfde sinus stop, maar
een stukje opgeschoven en ik doe daarna de fft berekenen krijg ik een grafiek waar ik absoluut niets
van snap.

Je moet ze niet in het reŽle deel en het imaginaire deel doen (tenzij later als je wil optimaliseren). Je moet van het eerste signaal het FFT berekenen. Dus signaal in reŽle deel, NULLEN in het imaginaire deel. Van het tweede signaal doe je dit ook (signaal in reŽle deel, NULLEN in imaginaire deel).

Vervolgens zul je voor beide signalen hun FFT iets met amplitude op 2 frequenties hebben (+f en -f). Van het eerste signaal kun je dan hier de fase van afleiden (via eerdere formules), van het tweede signaal ook. EN NU PAS vergelijk je ze met elkaar door de fasen van elkaar af te trekken. Dit is het faseverschil.

Ik heb deze uitleg nu snel nu elkaar geflanst (niet veel tijd), dus stel zeker de vragen als je nog problemen hebt.

Edit: ik denk dat er iets niet klopt hoor mcs51mc, Het FFT daar drukt enkel amplitudes op de positieve schaal af, en dat is dus niet de volledige informatie die je kunt verkrijgen.

Veranderd door 317070, 30 maart 2010 - 19:27

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-

#9

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 30 maart 2010 - 20:58

Heren, mcs51mc en 317070
Heel erg bedankt voor jullie aandacht en moeite.

ik probeer om zelf de fase te bepalen,, zoals mcs51mc aangaf. Hoe meer ik experimenteer, hoe meer ik in
de problemen kom.. er klopt niets meer van en ik raak volledig de weg kwijt.
Ik dacht dat als je 1 sinus een klein stukje opschuift de fase over alle waarden constant zou moeten zijn,
maar ik zie in de resultaten dat dat niet zo is... misschien is het een afrondingsfout....



met de fft doe ik het dus fout, zie ik.
Ik zal het nu zo gaan proberen als 317070 aangeeft.

ER is natuurlijk nog iets. Ik programmeer alles zelf waardoor ik strakjes alles volledig in de hand heb en
het hele zaakje automatisch kan laten werken.
Er kan natuurlijk altijd een foutje in mijn programma zitten. Daarom ook probeer ik eerst met bekende
gegevens te werken en zo te controleren of mijn programmatuur goed werkt en tevens wat wegwijs te raken
in de wiskunde eromheen.
Maar o jeee wat is het moeilijk...

Toch heb ik goede hoop dat het met jullie hulp voor elkaar komt.


Nu ga ik weer verder rekenen ... ik meld me weer

#10

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 01 april 2010 - 09:53

Na veel experimenteren begin ik aardig mijn weg te vinden.
Zelfs een frequentie filter maken gaat aardig.

Wat ik toch niet snap, en wat volgens mijn gewoon fout is, is dat de fase van een verschoven rij sinussen over het
hele REX(i) en IMX() array varieert. (ik doe nu zoals 317070 aangeeft 2 maal de fft voor beide signalen en
trek dan de gevonden fase van elkaar af.)
Ook de methode van mcs51mc geeft ook zo,n soort resultaat.

Je zou toch zeggen dat de fase alleen bepaalt wordt door hoever je de sinussen ten opzichte van elkaar verschuift
en dat die fase dan over het gehele traject vastligt.....

Als ik wist hoe je een fotootje van het beeldscherm hier zou kunnen plaatsen zou ik dat graag doen.

#11

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 01 april 2010 - 12:12

FOTO plaatsen is gelukt. Het is een scherm zoals mijn fft programma weergeeft.

Wat je ziet is: Ik heb een signaal van 1000 Hz 4096 keer gesampled en van dit signaal een frequency domain gemaakt.
De piek zit precies bij 1000 Hz.
Nu heb ik voor alle 4096 leden van het reele en imaginaire deel de fase bepaald.
Toen het signaal over 1/3 lambda verschoven en weer de fase berekend.
Toen de 2 fases afgetrokken en geplot.
Dit zijn de 6 schuine lijnen...... ( ik heb de berekende fase met 10 000 vermenigvuldigd om het mooi op het scherm te krijgen)

ik had 1 horizontale lijn verwacht... want volgens mij is voor alle waarden de fase gelijk... namelijk 120 graden!

wat gaat er mis.. of doe ik het niet goed..of snap ik het niet?

Bijgevoegde afbeeldingen

  • pic8b.jpg

Veranderd door Wimapon, 01 april 2010 - 12:22


#12

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 01 april 2010 - 12:31

ik neem aan dat ik de gevonden fase van -1 op de plek van 1000 Hz kan omzetten in graden door hem
met 360/pi te vermenigvuldigen ... dit wordt dan dus 120 graden....

#13

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 01 april 2010 - 16:11

ik neem aan dat ik de gevonden fase van -1 op de plek van 1000 Hz kan omzetten in graden door hem
met 360/pi te vermenigvuldigen ... dit wordt dan dus 120 graden....

Klopt, alle andere fasen waren degene die hij uitmat van de ruis op je signaal bij een bepaalde frequentie..
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-

#14

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 01 april 2010 - 17:43

Bedankt,
Ik denk (hoop) dat ik nu mijn weg verder wel kan vinden..
Wim Apon





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures