Wimapon
Artikelen: 0
Berichten: 114
Lid geworden op: zo 29 nov 2009, 12:52

Ik zoek een algoritme om een ruisbandje te filteren.

Mijn radiotelescoop ontvangt een ruis spectrum van 3 KHz breed.

Ik wil hiervan bijvoorbeeld alleen het stukje van 400 tot 800 Hz overhouden.

uit mijn ontvanger komt laagfrequent ruis tussen 0 en 3 KHz.

Mijn AD covertor maakt hier gedurende een halve seconde 8192 getallen van.

Een FFT geeft een mooi spectrum van deze ruis.

Nu wil verder rekenen met slechts een smal bandje van dit spectrum.

Ik moet dus gaan filteren.

Hoe kan ik dit het beste doen?

Kom svp niet met ingewikkelde integralen etc, want ik ben wiskundig gezien een dummy.

Het liefst had ik een formule die ik rechtstreeks kan programmeren.

Een internet site die deze formule geeft is natuurlijk ook prima.

Eerdere pogingen zijn falicant mislukt.....

Vast heel erg bedankt.

Wim
Gebruikersavatar
TD
Artikelen: 0
Berichten: 24.578
Lid geworden op: ma 09 aug 2004, 17:31

Re: Ik zoek een algoritme om een ruisbandje te filteren.

Dit lijkt me eerder iets voor een technisch forum; verplaatst.
"Malgré moi, l'infini me tourmente." (Alfred de Musset)
mcs51mc
Artikelen: 0
Berichten: 473
Lid geworden op: za 23 jan 2010, 13:42

Re: Ik zoek een algoritme om een ruisbandje te filteren.

Waarom niet hardwarematig filteren adh van een band pass filter?
Wimapon
Artikelen: 0
Berichten: 114
Lid geworden op: zo 29 nov 2009, 12:52

Re: Ik zoek een algoritme om een ruisbandje te filteren.

Ik wil dit softwarematig doen omdat ik dan vrij ben om elke bandbreedte en elke plek binnen het spectrum

te kunnen gebruiken.
mcs51mc
Artikelen: 0
Berichten: 473
Lid geworden op: za 23 jan 2010, 13:42

Re: Ik zoek een algoritme om een ruisbandje te filteren.

Filters, FFT en zo zijn niet direct mijn 'cup of tea' maar met de LabVIEW voorbeelden geraakt een mens soms ver.

Is dit wat je in gedachten had?

Afbeelding

Als je echt niets kan vinden, wil ik wel eens proberen een dll te maken van dat voorbeeld van NI.

DLL's heb ik ook nog nooit gemaakt ;) , EXE's en installers des te meer en dat lukt altijd wel vrij goed ;)

Ik weet niet waarmee je nu programmeert, maar als je een dll kunt aanspreken kan ik je misschien verder helpen.

Misschien moet je eerst eens een tabel van 8192 getallen posten, ik haal ze dan eens door die LV code en we zien wel wat eruit komt... ...
Wimapon
Artikelen: 0
Berichten: 114
Lid geworden op: zo 29 nov 2009, 12:52

Re: Ik zoek een algoritme om een ruisbandje te filteren.

mcs51mc,

Ja dat is ongeveer wat ik graag wil..

Ik wil wel alles zelf programmeren, omdat ik een hele pijplijn van programma's achter elkaar moet draaien.

(Voor vele uren rekenwerk)

Ik programmeer het snelle rekenwerk in Quick Basic en het grafische werk in Just Basic en ik kan geen

DLL aanspreken. Ik werk nog met DOS.

Ik wil wel een rij getallen posten, maar ik weet niet hoe dat moet.

( 8 maal 1024 is nog al veel)

Ik zal een plaatje posten van de FFT's en het signaal zelf van 2 simultane kanalen.

Dit is de data die ik gedurende 0.5 seconde ontvang.

Elk kanaal wil ik gaan filteren... bijvoorbeeld kies het stuk van 400 tot 800 Hz.

Sorry het lukt niet.
Bert F
Artikelen: 0
Berichten: 2.589
Lid geworden op: vr 15 aug 2003, 20:37

Re: Ik zoek een algoritme om een ruisbandje te filteren.

je hebt eigenlijk twee zaken nodig:

1)een fir

2)de convolutie

zie hier voor wat een fir is http://nl.wikipedia.org/wiki/FIR je moet wel nog de coëfficiënten vinden, normaal kan hier ook een programmatje voor vinden zelf gebruik ik daarvoor meestal matlab mss helpt dit: http://www.rocketdownload.com/program/fir-...der-169911.html (nooit zelf geprobeerd)

dan moet je de convolutie van deze getallen samen met je input waarden uitrekenen.

code hiervoor: http://www.codeguru.com/forum/showthread.php?threadid=442954 dit is hetzelfde als de recursieve som zoals in de fir.

Groeten.
Wimapon
Artikelen: 0
Berichten: 114
Lid geworden op: zo 29 nov 2009, 12:52

Re: Ik zoek een algoritme om een ruisbandje te filteren.

Bert F, ik ga proberen het te snappen.... Ik begrijp om te beginnen de betekenis van de diverse letters al niet,

dus ik vrees het ergste...
Bert F
Artikelen: 0
Berichten: 2.589
Lid geworden op: vr 15 aug 2003, 20:37

Re: Ik zoek een algoritme om een ruisbandje te filteren.

niet vrezen vraag maar als je iets niet begrijpt.

Een fir staat voor final impuls respons maar onthoud er gewoon voor dat fir een manier is om digitaal gemakkelijk te kunnen filteren.

Een convolutie is een manier om de berekening (van de fir) uit te voeren.

De convolutie is het geen wat je moet programmeren dat is een loop waarin je met ieder getal van de fir (de coëfficiënten genaamd) een produkt en nadien een som moet maken. Zie link wikipedia

Concreet moet je nu te weten komen welke coëfficiënten je nodig hebt voor je gewenste frequentie bandje te filteren deze gebruik je dan in je loopje ==>> bij het uitvoeren van de convolutie.
Gebruikersavatar
317070
Artikelen: 0
Berichten: 5.609
Lid geworden op: za 28 feb 2009, 17:05

Re: Ik zoek een algoritme om een ruisbandje te filteren.

Iets wat je sowieso zult moeten uitdokteren is de convolutie (kijk vooral naar de animaties). De formules ogen misschien wel ingewikkeld, maar zijn (vooral in discrete vorm) zeer gemakkelijk te programmeren. Het is een berekening die essentieel is voor signaalanalyse, misschien zelfs essentiëler dan een FFT.

Een filter in het frequentiedomein bestaat eigenlijk uit een convolutie nemen van je originele signaal. (in dit geval is een fir gesugereerd). Een geschikte fir vinden om tussen 400-800 kHz te filteren is wel niet zo simpel, tenzij je ze zelf wilt berekenen. ;)

Ik vraag me (voor je doel) af waarom je enkel buiten 400-800 kHz wil filteren? Zou je niet beter een ruisfilter zoeken die de ruis uit je signaal filtert, en signaal behoudt? Of (aangezien je 2 gelijkaardige signalen hebt) de kruiscorrelatie zoeken tussen de signalen? (eventueel in de fase?)

Misschien kun je beter zeggen wat je wil bereiken, dan een manier voorstellen om het te willen bereiken. ;)
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-
Wimapon
Artikelen: 0
Berichten: 114
Lid geworden op: zo 29 nov 2009, 12:52

Re: Ik zoek een algoritme om een ruisbandje te filteren.

hoi 317070

Ik ben op dit moment al een stuk gevorderd met mijn radiotelescoop.

Ik heb al resultaat.

Inderdaad door kruiscorrelatie tussen de beide antenne signalen zie ik al een radiobron in de loop van een

dag voorbij komen! Ik zie dus dat de fase tussen de beide antenne signalen verandert.

Toch gaat er van alles mis... een goede calibratie wil niet lukken.

uit het testen van mijn ontvangers blijkt dat ze niet voor elke frequentie binnen de 3 KC/s dezelfde fase

opleveren. Ik denk dat dit de calibratie "verziekt".

Het blijkt dat de fase afhankelijk is van de frequentie... ik weet niet waardoor dit komt.

Dit probleem moet ik hardwarematig oplossen en dat is me nu even teveel werk.

daarom wil ik eens proberen met slechts een deel van het ruisbandje van 3 KC/s te gaan rekenen.

en dan te zien of de calibratie beter zal gaan.

Maar dan moet ik eerst in staat zijn om goed te filteren.

Dus vandaar mijn vraag;

Het is me nu trouwens gelukt , met de kennis van Wikipedia IIR-filteren , een laagdoorlaatfilter en een

hoogdoorlaatfilter te maken.....

Nu nog uitvinden hoe ik een bandfilter maak..

Het probleem is dat ik betekenis van de gebruikte letters in de formules niet ken.

Maar omdat ik de uitleg in "woorden" wel snap kan ik het programmeren, en werkt het ook nog!

Na wat verder studeren zal ik hierover , hier vragen stellen...

(Ik vind het allemaal vreselijk moeilijk hoor.... )

O ja.. de ruis wegfilteren en het signaal behouden is niet zo eenvoudig omdat het signaal zelf ook ruis is.....

Elke radiobron geeft ruis... de som van al die ruizen ontvang ik met mijn ontvangers....

Op mijn site kun je de grafieken van de eerste resultaten zien

"http://home.kpn.nl/apon001/huis.htm" ( zie hoofdje Phasing interferemotry)
mcs51mc
Artikelen: 0
Berichten: 473
Lid geworden op: za 23 jan 2010, 13:42

Re: Ik zoek een algoritme om een ruisbandje te filteren.

Wimapon schreef:Het is me nu trouwens gelukt , met de kennis van Wikipedia IIR-filteren , een laagdoorlaatfilter en een

hoogdoorlaatfilter te maken.....

Nu nog uitvinden hoe ik een bandfilter maak..
Is dat niet gewoon de twee na elkaar uitvoeren?

Eerst laagdoorlaat met 800Hz cut off (alles onder de 800Hz wordt behouden)

Dan hoogdoorlaat met 400Hz cut off (alles boven de 400Hz wordt behouden)

Finaal hou je enkel alles over tussen 400 & 800Hz.

Of zie ik het te simpel ;)
Wimapon
Artikelen: 0
Berichten: 114
Lid geworden op: zo 29 nov 2009, 12:52

Re: Ik zoek een algoritme om een ruisbandje te filteren.

mcs51mc,

Ja, ik denk dat het inderdaad zo zal moeten, alleen heb ik nog niet gevonden hoe je een cut-off frequentie

kan ingeven.....

Ik doe nu een hoogdoorlaatfilter maken door:

voor elke i: -----> x(i) = x(i+1) - x(i) te doen.

Dit kan ik dan een aantal maal herhalen om de curve steiler te maken.

Ik weet nog niet wat er met de faseinhoud gaat gebeuren.. maar dat zal de eerste dag-berekening wel tonen.

Een laagdoorlaatfilter gaat ongeveer net zo.

Dus er is nergens sprake van een cufoff frequentie.

Het is zo jammer dat ik hier geen plaatjes kan posten... dan kon ik je het laten zien.

mijn plaatjes zijn als jpg minimaal 200 KBytes groot
Wimapon
Artikelen: 0
Berichten: 114
Lid geworden op: zo 29 nov 2009, 12:52

Re: Ik zoek een algoritme om een ruisbandje te filteren.

http://home.kpn.nl/apon001/fringes1.jpg

testje hoe moet ik nu het url van een plaatje invoeren.... ik klik op "voeg een afbeelding in" maar... noppes
Gebruikersavatar
317070
Artikelen: 0
Berichten: 5.609
Lid geworden op: za 28 feb 2009, 17:05

Re: Ik zoek een algoritme om een ruisbandje te filteren.

mcs51mc schreef:Is dat niet gewoon de twee na elkaar uitvoeren?

Eerst laagdoorlaat met 800Hz cut off (alles onder de 800Hz wordt behouden)

Dan hoogdoorlaat met 400Hz cut off (alles boven de 400Hz wordt behouden)

Finaal hou je enkel alles over tussen 400 & 800Hz.

Of zie ik het te simpel ;)
Nee, dat is de algemene manier om het (snel) te doen. Het probleem is wel dat de vervorming te groot kan worden als je filters een afwijkende breekfrequentie hebben als je dit bij willekeurige filters zou doen.
Wimapon schreef:mcs51mc,

Ja, ik denk dat het inderdaad zo zal moeten, alleen heb ik nog niet gevonden hoe je een cut-off frequentie

kan ingeven.....

Ik doe nu een hoogdoorlaatfilter maken door:

voor elke i: -----> x(i) = x(i+1) - x(i) te doen.

Dit kan ik dan een aantal maal herhalen om de curve steiler te maken.

Ik weet nog niet wat er met de faseinhoud gaat gebeuren.. maar dat zal de eerste dag-berekening wel tonen.

Een laagdoorlaatfilter gaat ongeveer net zo.

Dus er is nergens sprake van een cufoff frequentie.
Dat is inderdaad een IIR-filter (de eenvoudigste). Degene die je hier vermeld zijn echter niet echt goede filters, aangezien ze je signaal sterk vervormen. (en ze nauwelijks filteren; eigenlijk zijn deze enkel geschikt in theorie als basis om uit te leggen hoe filters ongeveer werken)

Als je wilt, wil ik wel eens kijken om een IIR-filter te maken tussen 400Hz en 800Hz, maar ik wil dit enkel maar doen als je zeker bent van je stuk. Je kunt achteraf niet zomaar eenvoudig die breekfrequenties een beetje verplaatsen.

Dat, en je moet je samplingfrequentie eens meegeven. Ik vermoed dat je niet aan exact 6000Hz samplet?

Ik heb dus snel even gekeken: ik heb hier een handige tool gevonden: http://www-users.cs.york.ac.uk/~fisher/mkfilter/trad.html

De relatie moet er dus als volgt uit zien:

Code: Selecteer alles

Recurrence relation:

y[n] = (  1 * x[n-20])

 + (  0 * x[n-19])

 + (-10 * x[n-18])

 + (  0 * x[n-17])

 + ( 45 * x[n-16])

 + (  0 * x[n-15])

 + (-120 * x[n-14])

 + (  0 * x[n-13])

 + (210 * x[n-12])

 + (  0 * x[n-11])

 + (-252 * x[n-10])

 + (  0 * x[n- 9])

 + (210 * x[n- 8])

 + (  0 * x[n- 7])

 + (-120 * x[n- 6])

 + (  0 * x[n- 5])

 + ( 45 * x[n- 4])

 + (  0 * x[n- 3])

 + (-10 * x[n- 2])

 + (  0 * x[n- 1])

 + (  1 * x[n- 0])

 + ( -0.0017820875 * y[n-20])

 + (  0.0387309183 * y[n-19])

 + ( -0.4111305294 * y[n-18])

 + (  2.8308581223 * y[n-17])

 + (-14.1680177848 * y[n-16])

 + ( 54.7519171722 * y[n-15])

 + (-169.4387712114 * y[n-14])

 + (429.8313691642 * y[n-13])

 + (-907.5633411356 * y[n-12])

 + (1610.3756932883 * y[n-11])

 + (-2414.0692545962 * y[n-10])

 + (3062.2622671977 * y[n- 9])

 + (-3280.7595198059 * y[n- 8])

 + (2951.7958480361 * y[n- 7])

 + (-2207.9535492666 * y[n- 6])

 + (1351.3740145742 * y[n- 5])

 + (-660.5471327188 * y[n- 4])

 + (248.3330369343 * y[n- 3])

 + (-67.4932385300 * y[n- 2])

 + ( 11.8120011380 * y[n- 1])
met y(n) de uitgang en x[n] de ingang. Dit zou een 20-polige Bessel-banddoorlaatfilter moeten zijn. Let er dus op dat je dus niet je signaal gaat kunnen overschrijven zoals je vroeger deed, maar dat je een nieuw signaal gaat moeten maken!

Ik heb nu vooral gezorgd voor een sterke attenuatie (dus dat overtollige frequenties sterk onderdrukt worden), hierdoor is het signaal dat je wil behouden wel wat meer vervormd, dat is altijd een afweging die je moet maken.

De filter ziet er zo uit:

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-

Terug naar “Elektrotechniek”