Springen naar inhoud

Fft-filter-fase probleem


  • Log in om te kunnen reageren

#1

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 06 juni 2010 - 14:10

Voor mijn phase interferometry radio telescoop op 35 MHz ben ik de apparatuur aan het ijken.

Ik heb een geluidssignaal met een frequentie van 1000 Hz.
Ik voer dit toe aan 2 geluidskanalen ( de fase verandert niet)

Ik laat een AD-convertor om en om beide kanalen digitaliseren.
Voor elk kanaal krijg ik ongeveer 20 samples per sinus.

Nu doe ik voor beide kanalen een FFT ( 8 * 1024 samples per kanaal) en krijg een prima frequentie plot.

Nu reken ik voor beide kanalen de fase uit.
Ik trek voor beide kanalen deze fase voor elke i van elkaar af, en krijg voor 1000 Hz een faseverschil
dat precies overeenkomt met de fase (tijdsverschil ) die het om en om sampelen veroorzaakt.


Tot zover werkt alles precies zo als verwacht.

Nu ga ik filteren.
Ik pluk van het array dat uit de eerste FFT komt ( voor beide kanalen) een bandje uit, en zet alle andere
waarden op 0. (De 1000 Hz zit wel in dit bandje!)
( ik doe dit 2 maal per array omdat het array symetrisch is tov ongeveer 4000)

Op het gehele array ( dus een boel nullen en een klein aantal echte waarden) laat ik nu een inverse FFT los.
Ik doe dit weer voor beide kanalen.

Met het uitkomst array... (is nu een gefilterde wisselspanning) doe ik weer een FFT
Weer reken ik voor beide kanalen de fase voor elke i
vervolgens trek ik deze fasen weer van elkaar af....

De uitkomst voor het faseverschil is nu ongeveer 0.

Hoe kan dit nu??? wat doe ik verkeerd???

Indien gewenst zal ik wat grafieken posten waaruit blijkt wat er gebeurd.....

Of zou het gewoon zo zijn dat je na filteren de fase informatie verliest??? dan zijn we gauw klaar.

Veranderd door Wimapon, 06 juni 2010 - 14:17


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

#2

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 06 juni 2010 - 18:05

Voor de duidelijkheid geef ik nog even 2 schermdumps .
De eerste is van voor het filteren. De tweede is van na het filteren.
Linksboven staat het frequentie spectrum van kanaal a.
Linksonder staan de eerste 100 samples van het signaal van kanaal a
Rechtsboven staat het frequentie spectrum van kanaalb.
Rechtsonder staan de eerste 100 samples van het signaal van kanaalb


Helaas kan ik niet meer dan 50 Kbyte uploaden.. dus ze zijn erg slecht leesbaar.



In de grafiek rechtsboven staan voor elke i het faseverschil tussen kanaala en kanaalb als
witte stippen. (verschaald om ze mooi in de grafiek te krijgen.)


sorry, ik krijg de plaatjes er niet goed in.... het plaatje in deze pagina is de grafiek na filtering

Bijgevoegde afbeeldingen

  • scherm2.jpg

Veranderd door Wimapon, 06 juni 2010 - 18:16


#3

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 06 juni 2010 - 18:17

Hier het plaatje van voor het filteren

Bijgevoegde afbeeldingen

  • scherm1.jpg

#4

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 06 juni 2010 - 20:47

Als je de grafieken in meer detail wilt bekijken kan dat. Ze staan in groot detail op mijn site onder
het hoofdje: Waar ben ik nu mee bezig.
http://home.kpn.nl/apon001/huis.htm
Sorry, het is even niet anders.
deze pagina is nog in bewerking
Je kunt in elk gavel precies zien wat er mis gaat ivm de fase na filtering

ik hoop heel erg dat iemand me kan helpen.

Vast mijn dank!

#5

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 07 juni 2010 - 13:33

Nu reken ik voor beide kanalen de fase uit.

Hoe?

#6

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 07 juni 2010 - 14:18

Beste EvilBro,
Ik begin met een rij getallen die uit het eerste kanaal van

de digitiser komen. Het zijn er 1024 * 8

Ik begin met 2 array's: REX(i) en IMX(i)

REX(i) vul ik met de 1024 * 8 waarden.
IMX(i) vul ik met nullen

Nu laat ik het Fast Fourier Algorimte op deze twee array's los.

De twee array's zijn hierna met andere getallen gevuld.

Je kunt het frequentie spectrum daar nu uithalen door voor elke i de wortel uit de som van de kwadraten van REX(i) en IMX(i) te nemen.

Je kunt nu ook voor elke i de fase berekenen door de atangens van REX(i) / IMX(i) te nemen.


Bovenstaande doe ik nu ook voor het tweede kanaal.

Vervolgens trek ik voor elke i de twee gevonden fasen van elkaar af.
Dat is dan het faseverschil voor de betreffende i.
Dit plot ik ( een beetje verschaald ) als witte puntjes in mijn grafieken.
Ik verschaal met: berekende fase maal 5000 + 20000
Dus als een wit puntje op de 20000 lijn zit is de fase 0.

De fase in graden bereken ik door bovenstaande fase te vermenigvuldigen met 180/ pi



Ik weet bij welke i de 1000 Hz zit... dus het fase verschil die bij deze i hoort is het faseverschil bij 1000 Hz.
( weer maal 180 / pi in graden)

Ik hoop dat ik het duidelijk genoeg uitleg. Ik ben op wiskundig gebied niet de beste... bovenstaande heb
ik van anderen overgenomen en zie het als een black box... ik zie dat het werkt, maar ik snap niet hoe het
werkt.

Veranderd door Wimapon, 07 juni 2010 - 14:31


#7

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 07 juni 2010 - 14:37

De uitkomst voor het faseverschil is nu ongeveer 0.

Wel, als ik de grafiekjes zo zie, dan lopen die 2 sinussen in fase. Dus dan is het faseverschil 0. Dus dan lijkt het te kloppen, of verwacht je iets anders? Welk concreet faseverschil verwacht je?

Verder lijkt me je algoritme bijzonder inefficiŽnt. Je doet eerst een IFFT om dan direct weer een FFT op toe te passen? Het resultaat zou daarna hetzelfde moeten zijn. Hieruit kun je je dan zelfs afvragen waarom die filter nodig zou zijn.

Om te filteren worden er over het algemeen (=altijd) andere methoden gebruikt dan het spectrum op 0 te plaatsen en dan terug te rekenen. Het probleem is dat je na terugkeren hoogstwaarschijnlijk een complex signaal overhoudt.
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-

#8

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 07 juni 2010 - 14:42

Nog dit: ik wil ook niet begrijpen hoe het werkt.. ik wil het als zijnde een dummy gewoon gebruiken, als
een heel klein onderdeeltje van mijn radiotelescoop.



Hoi 317070,
Kijk even op mijn site en bekijk dan de grafiek van een ruisbron van 0 to 3 KHz... file: ruis3kc
Je kunt dan zien dat de fase toeneemt met de frequentie.
Ik vind dat okee omdat het tijdverschil tussen beide kanalen samples hetzelfde blijft, maar de
frequentie toeneemt... dus volgens mij zal het faseverschhil dan ook steeds groter worden.
Dat kun je in de 3KHz grafiek goed zien gebeuren...


O ja, ik weet inderdaad niet of dat filteren nodig is. Ik lees in proffessionele interferometrie sites
steeds dat ze filteren...... dus ik ben wat aan het proberen......
Ze gebruiken dan de term: polyfase filtering..... (geen idee wat dat dus is)

Dankje trouwens weer voor je info.

Veranderd door Wimapon, 07 juni 2010 - 14:48


#9

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 07 juni 2010 - 15:05

Wel, als ik de grafiekjes zo zie, dan lopen die 2 sinussen in fase.

Hij had het over 20 samples per periode per kanaal. Dat zou een tijdverschil van 1/40 periode zijn. Ik vermoed dat je dat verschil niet ziet in een plaatje.

Het probleem is dat je na terugkeren hoogstwaarschijnlijk een complex signaal overhoudt.

Dat zou niet het geval moeten zijn als hij aan beide kanten van zijn array waarden op nul zet.

#10

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 07 juni 2010 - 15:09

Kijk even op mijn site en bekijk dan de grafiek van een ruisbron van 0 to 3 KHz... file: ruis3kc
Je kunt dan zien dat de fase toeneemt met de frequentie.
Ik vind dat okee omdat het tijdverschil tussen beide kanalen samples hetzelfde blijft, maar de
frequentie toeneemt... dus volgens mij zal het faseverschhil dan ook steeds groter worden.
Dat kun je in de 3KHz grafiek goed zien gebeuren...

Klopt, en juist daarom vraag ik me af welk faseverschil je precies verwacht bij 1000Hz? Heb je niet toevallig een frequentie gekozen waarbij het faseverschil tussen beide signalen een veelvoud van 2Pi wordt? Wat is het tijdsverschil tussen beide antennes?

O ja, ik weet inderdaad niet of dat filteren nodig is. Ik lees in proffessionele interferometrie sites
steeds dat ze filteren...... dus ik ben wat aan het proberen......
Ze gebruiken dan de term: polyfase filtering..... (geen idee wat dat dus is)

Ik heb er ook nog nooit van gehoord, toch niet dat ik me kan herinneren...

Veranderd door 317070, 07 juni 2010 - 15:10

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-

#11

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 07 juni 2010 - 15:27

Tja, het is nogal ingewikkeld:
Ik zal proberen het uit te leggen:

Ik bied aan beide kanalen precies hetzelfde signaal aan.
De digitiser gaat ze dan om en om digitaliseren.
Dus er komen ongeveer 16000 samples in de output.
8000 voor kanaal1 en 8000 voor kanaal2

Dit digitaliseren van die 16000 samples duurt ongeveer 0.5 seconde.
Ik doe dus 32000 samples per seconde.
het tijdverschil tussen sample 1 van kanaal1 en sample 1 van kanaal 2 is dus ongeveer 1/32000 seconde.

Bij 1000 Hz zal dit dus een te berekenen faseverschil opleveren.
het faseverschil zal dus zijn: 1/32 * 360 graden = 11 graden.

Mijn programma geeft 11 graden aan.... dus het zit in de buurt...



pffff het is wel heel moeilijk hoor.... ik hoop dat ik geen denkfout maak....


Ik weet dus dat mijn meetopstelling door het om en om sampelen een systematische fout maakt.
Ik probeer met dit experiment dus deze fout te bepalen om straks hiervoor te kunnen corrigeren

Veranderd door Wimapon, 07 juni 2010 - 15:33


#12

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 07 juni 2010 - 15:42

Mijn programma geeft 11 graden aan.... dus het zit in de buurt...

pffff het is wel heel moeilijk hoor.... ik hoop dat ik geen denkfout maak....

Ik weet dus dat mijn meetopstelling door het om en om sampelen een systematische fout maakt.
Ik probeer met dit experiment dus deze fout te bepalen om straks hiervoor te kunnen corrigeren

Ziet er goed uit hoor ;)

Overigens, NIETS aantrekken van de ruisachtige fase. Als de amplitude op een bepaalde frequentie bijna nul is, gaat de fase zoveel ruis bevatten dat er niets zinnigs over te zeggen is. Het hoort er dus zo uit te zien.
Is je probleem nu opgelost?

Dat zou niet het geval moeten zijn als hij aan beide kanten van zijn array waarden op nul zet.

Als je met oneindige nauwkeurigheid rekent niet, anders wel. Bovendien houdt wat je doet een vermenigvuldiging met een blokgolf in in het spectrum, dus een convolutie met een sinc in het tijdsdomein. Dit laatste kun je sowieso niet nauwkeurig doen over een eindig interval.

Veranderd door 317070, 07 juni 2010 - 15:44

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-

#13

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 07 juni 2010 - 17:03

Bovendien houdt wat je doet een vermenigvuldiging met een blokgolf in in het spectrum, dus een convolutie met een sinc in het tijdsdomein.

Dat is niet relevant. Het gaat hier om een DDFT (discrete to discrete fourier transformatie). Als jij ervoor zorgt dat 'frequentiecomponent' k de geconjugeerde is van 'frequentiecomponent' N-k dan is de getransformeerde reeel. Het was misschien een ander verhaal als het hier over een CDFT ging.

#14

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 07 juni 2010 - 18:27

Dat is niet relevant. Het gaat hier om een DDFT (discrete to discrete fourier transformatie). Als jij ervoor zorgt dat 'frequentiecomponent' k de geconjugeerde is van 'frequentiecomponent' N-k dan is de getransformeerde reeel. Het was misschien een ander verhaal als het hier over een CDFT ging.

Dat is de theorie; dit is de praktijk.
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-

#15

Wimapon

    Wimapon


  • >100 berichten
  • 114 berichten
  • Ervaren gebruiker

Geplaatst op 07 juni 2010 - 21:11

Heren,
neen, mijn probleem is nog niet opgelost: waarom krijg ik geen fase waarden meer als ik op deze manier filter?
Het zou dus kunnen dan mijn manier gewoon op theoretische grond geen fase info meer geeft...
Jullie kunnen dat waarschijnlijk beter beoordelen dat ik.
Mocht dat zo zijn, dan hoef ik geen moeite meer te doen en kan ik dit punt vergeten..
(Dan dus maar even niet filteren.... of een betere manier vinden.... )

Veranderd door Wimapon, 07 juni 2010 - 21:15






0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures