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

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

Hier zijn de filterresultaten van de bessel filtering met de constanten die ik van 317070 kreeg voor 400 tot 800 hz bandfilter.

Links is ongeveer 8000 punten voor filtering.. en rechts is na filtering

Hieronder voor een input van ruis + 1000 hz toontje

Afbeelding

Hieronder voor input van een echte meting

Afbeelding

het blijkt dus inderdaad dat de filtering niet tussen 400 en 800 hz zit maar tussen 600 en 1200 Hz...

wat nu?

andere constanten?
mcs51mc
Artikelen: 0
Berichten: 473
Lid geworden op: za 23 jan 2010, 13:42

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

Wim, Als je 100% zeker bent van die 1000Hz, dan zou ik zeggen dat je sample rate rond de 13850 S/s ligt. Bij die waarde komt de FFT piek inderdaad rond de 1000 Hz te liggen.

Onderstaande grafiek is FFT op NIET gefilterd signaal.

Afbeelding

Bij een sample rate van 16384 S/s ligt de piek rond 1200Hz.

Volgende 2 plaatjes zijn resultaten met verschillende bandpass frekwenties.

In beide gevallen zijn er grote pieken aan het begin van het signaal.

Eerst de gevraagde 400 tot 800Hz bandpass, filterwerking duidelijk te zien op bovenste grafiek

Afbeelding

Dan voor de fun een band pass van 800 tot 1200Hz.

Bijna geen filterwerking, signaal komt nagenoeg 1 op 1 door daar hij midden in de band pass ligt.

Duidelijke piek bij 1000Hz op de FFT

Afbeelding

Dan nog dit, je kan misschien niet geïntersseerd zijn in de absolute waarde van de frekwentie maar volgens mij moet je toch 100% zeker zijn van je sample rate om zinvolle resultaten uit je data te halen. Door de sample rate aan te passen in de LV code krijg ik totaal andere resultaten voor zowel filter als FFT.

Trouwens, de ADC stuur je toch zelf aan via de AVR microcontroller of niet?

Ik heb vroeger ook nog ADC's aangestuurd vanuit µC's en het is toch niet moeilijk om een vaste sample frekwentie aan te houden? Welk merk & type ADC gebruik je?
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

Hoi, jeetje wat ziet dat er allemaal mooi uit.

Eerst over het laatste: ik gebruik een ATMEL ATMEGA32, die op topsnelheid staat te sampelen.

Ik heb alle klimbim eruitgehaald om de ad conversies zo snel mogelijk te laten gebeuren.

Ik heb zelfs een sample and hold schakeling ervoor gezet om er voor te zorgen, dat de samples op hetzelfde moment gemeten worden...

Ondanks dat ze na elkaar gemeten worden, komen ze van hetzelfde moment.. namelijk het moment waarop de AVR het geluid loskoppeld

van de ADconvertor.

Volgorde:

1. ik koppel de adc kanalen los van de bron... ( c'tjes blijven de spanning van dat moment behouden)

2. ik doe ad conversie op kanaal 1 (c1)

3. ik doe ad conversie op kanaal 2 (c2)

4. ik koppel de adc kanalen weer aan de bron

5. ik ga nu de 2 gevonden gevonden waarden van de adconvertor naar een extern SRam schrijven.

deze Sram is 32 Kbyte groot en kan dus ongeveer 16000 getallen van 2 bytes bevatten.

Hierna ga ik weer verder met stap 1. tot ik precies 16* 1024 waarden in de SRam heb zitten.

Ik heb geen controle over het absolute moment van sampelen.... de interne klok geeft dit aan... die lijkt me stabiel genoeg om alles goed

te laten verlopen.

Nu over het filteren:

Ik heb de site bekeken die 317070 in een eerder scherm aangaf.

ik zie hoe je de filter-coefficienten kunt bereken....

Toch als ik dat doe... krijg ik geen filterwerking...

Mijn plan is om gewoon parameters te zoeken die de filterwerking geven die ik wil.....

(gruwelijk plan.. ik weet het.)

Maar eerst zal ik je raad opvolgen en jouw sampelrate gebruiken..

helaas geven de meeste parameters die de site opgeeft een "overflow" de getallen worden 500 * 10 ^250 groot......heeeeel groot dus

ik ga stug door met zoeken naar de juiste parameters..

Mocht 317070 ze sneller vinden.. dan houd ik me natuurlijk aanbevolen.... ik denk als hij alles hetzelfde laat alleen het bandpassfilter opgeeft

van bijvoorbeeld 10 tot 50 Hz.. hij in de buurt zal komen van 400 tot 800

Mij wil het voorlopig zo niet lukken...

( ik weet het, ik ben razend eigenwijs... ik wil het gewoon allemaal zelf programmeren..

dat houd het nu eenmaal zo flexibel mogelijk)

Vergeet niet dat dit filteren misschien maar 1 procent van het totale reken/programmeer werk is....

het echte astronomische rekenwerkt komt pas hierna....
mcs51mc
Artikelen: 0
Berichten: 473
Lid geworden op: za 23 jan 2010, 13:42

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

Over coefficienten gesproken, de twee tabellen rechts in de screenshots zijn de coefficienten berekent en gebruikt door LV.

Eigenaardig is wel dat ik 20 "Reverse" en 25 "Forward" coefficienten krijg voor een 10de orde filter ?!?

317070, heb jij hier een uitleg voor ??

Hoe ze bekomen worden en verder verwerkt worden weet ik niet want het zijn twee DLL calls, dus geen code zichtbaar ;)

Dit zijn ze alvast voor de 800 - 1200Hz band pass met 13850 sample rate

Reverse

-3.451125598434931160

4.819737297864687520

-3.187837524996967260

0.854144019749597971

-3.377906239274064410

4.605340183826875490

-2.965734868474975360

0.771665846712885295

-3.340623023935050730

4.496169414479211030

-2.852640445560356230

0.729668053761158619

-3.319839227122362230

4.435311383127165990

-2.789595145278916720

0.706256081715479045

-3.310326441404741520

4.407456539439759340

-2.760739184191274730

0.695540374893253266

Forward

0.007610997484324888

0.000000000000000000

-0.015221994968649776

0.000000000000000000

0.007610997484324888

0.007272436314961729

0.000000000000000000

-0.014544872629923457

0.000000000000000000

0.007272436314961729

0.007100041348282734

0.000000000000000000

-0.014200082696565468

0.000000000000000000

0.007100041348282734

0.007003938532943278

0.000000000000000000

-0.014007877065886557

0.000000000000000000

0.007003938532943278

0.006959952080543675

0.000000000000000000

-0.013919904161087350

0.000000000000000000

0.006959952080543675

Wat de ATmega32A betreft kan je toch perfect nagaan afhankelijk van je configuratie van controle bits hoe snel die ADC in zijn werk gaat?

Aangezien er een sample and hold circuit in de ATmega32A zit zie ik niet in waarom je je 4-stappen plan doet met die capaciteiten ;) Of probeer je een "simultaneous" sampling te verkrijgen? Volgens mij doe je meer kwaad dan goed door je bron constant in en uit te schakelen. Ik zie trouwens ook niet in hoe je dat juist doet aan +/- 13850 S/s :)

Ga hier eens te rade voor je hardware.
Wimapon
Artikelen: 0
Berichten: 114
Lid geworden op: zo 29 nov 2009, 12:52

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

Mensen, ik geef het op:

op de site die 317070 me opgaf kun je de coefficienten voor de besselfiltering laten berekenen.

Als ik dat doe, krijg ik slechts een overflow of er komt onzin uit....

http://www-users.cs.york.ac.uk/~fisher/mkfilter/trad.html

317070, wat heb jij voor gegevens opgegeven om die set coefficienten te krijgen... want die werken tenminste.....

IK HEB HET GEVONDEN: jij gaf op: 6000 Hz sample frequency, bessel bandpassfilter , 400 to 800 Hz

Als ik dit ook doe krijg ik dezelfde coefficienten.

Als ik het filter nu smaller maak.. geeft mijn programma een overflow.... WAT NU???

Ik vrees dat het filteren weer niet gaat lukken...
Wimapon
Artikelen: 0
Berichten: 114
Lid geworden op: zo 29 nov 2009, 12:52

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

Toch nog even wat geexperimenteerd:

Een minderpolig filter blijkt wel te werken.

Ik kan nu zelf alle benodigde filters ontwerpen en programmeren.. het werkt behoorlijk goed.

Ik wil alleen nog graag weten hoe deze methode van filtering in het wiskundige jargon heet.

Dus ook wat voor soort filtering dit is...

Ik neem aan dat: 12 polig Bessel Bandpass filter de lading voldoende dekt?????

Ik zal morgen een mooie demo maken ter afsluiting van dit onderwerp..

In elk geval iedereen heel erg bedankt voor alle uitleg, moeite en interesse...!!!!

(Het was een zware bevalling....)
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.

Wimapon schreef:Ik heb geen controle over het absolute moment van sampelen.... de interne klok geeft dit aan... die lijkt me stabiel genoeg om alles goed

te laten verlopen.
Als je een oscillator of digitale multimeter tot je beschikking hebt, misschien gewoon het (intern) kloksignaal eens uitlezen? (als je hem kunt uitvoeren naar 1 van de pinnen). Anders kun je ook uit een door jouw aangelegd signaal met een bepaalde frequentie en de bekomen metingen de exacte frequentie afleiden. Bv door een saw aan te leggen en de helling van je metingen te bepalen. Dit laatste blijkt gewoonlijk nauwkeuriger te zijn dan de eerste methode en gemakkelijker te zijn dan de datasheet te gaan uitpluizen.
mcs51mc schreef:Over coefficienten gesproken, de twee tabellen rechts in de screenshots zijn de coefficienten berekent en gebruikt door LV.

Eigenaardig is wel dat ik 20 "Reverse" en 25 "Forward" coefficienten krijg voor een 10de orde filter ?!?

317070, heb jij hier een uitleg voor ??

Hoe ze bekomen worden en verder verwerkt worden weet ik niet want het zijn twee DLL calls, dus geen code zichtbaar :)
Dit is vreemd (ik zou zelfs denken foutief).

Normaal gezien bevat een filter met 20 polen ook 20 nullen. Iedere nul compenseert dan ook exact 1 pool, waardoor je op grote afstand van het filtergebied een amplitude 1 behoudt. Iedere pool zorgt voor 1 feedback, iedere nul voor 1 feedforward. (Hier 'forward' en 'reverse' waarschijnlijk)

Ik veronderstel dan ook dat die filters het resultaat verder versterken (of iets dergelijks). Voor de werking hier maakt dit niet veel uit, maar als je dit digitaal wilt implementeren heb je 5 extra geheugencellen nodig t.o.v. de 'normale' versie. Nu, die programmeurs zullen ook wel weten wat ze doen. ;)
Wimapon schreef:317070, wat heb jij voor gegevens opgegeven om die set coefficienten te krijgen... want die werken tenminste.....

IK HEB HET GEVONDEN: jij gaf op: 6000 Hz sample frequency, bessel bandpassfilter , 400 to 800 Hz
Toch nog even wat geexperimenteerd:

Een minderpolig filter blijkt wel te werken.

Ik kan nu zelf alle benodigde filters ontwerpen en programmeren.. het werkt behoorlijk goed.
Minder polen gaan inderdaad, maar ik vermoedt dat je de doorlaatbanden niet zo mooi gaat krijgen, aangezien ze sowieso al vrij smal zijn in vergelijking met je samplefrequentie? Ik zou je toch aanraden om voor een maximum aan polen te gaan indien mogelijk.
Wimapon schreef:Ik wil alleen nog graag weten hoe deze methode van filtering in het wiskundige jargon heet.

Dus ook wat voor soort filtering dit is...

Ik neem aan dat: 12 polig Bessel Bandpass filter de lading voldoende dekt?????
Wat je in feite hebt gedaan is een IIR-filter gemaakt. Om goede coëfficiënten te bepalen zijn er verschillende algoritmes mogelijk, die elk uitkomsten creëren met respectievelijke voor-en nadelen. In jouw geval heb je het Bessel-algoritme gebruikt om die fase-informatie zo weinig mogelijk te verstoren, zodat de golven hun vorm zo goed mogelijk behouden, en niet enkel de frequentie behouden blijft. De filter die het Bessel-algoritme uitkwam is daarna met een bilineaire transformatie omgezet naar de filter die jij wilt hebben.

Afhankelijk van de toepassing natuurlijk, maar waarschijnlijk dekt 12-polige Bessel Banddoorlaatfilter de lading voldoende. ;)

Overigens, ik merkte op dat je de titel Drs. gebruikt. Heeft dit project er iets mee te maken, of ligt je doctoraat in een volledig ander veld? :)
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

Dankjewel weer voor je uitgebreide uitleg.

Je moest eens weten hoe dankbaar ik je ben, want zonder je hulp zou het allemaal beslist op niks zijn uitgelopen.

Ik ben met het aantal polen gaan spelen omdat ik geen andere doorlaatbandjes kon defienieren omdat mijn compiler steeds een overflow gaf.

Toen ik eenmaal in de gaten kreeg dat minder polen, kleinere getallen opleverde, ging ik op zoek naar een maximum aantal polen.

Daar ben ik nu nog steeds mee bezig..

In elk geval denk ik dat ik nu mijn doorlaatbandjes kan krijgen... het is een kwestie van tijd

(En ik zie dat de faseplotjes er prima uitzien!)

Ik ben na mijn middelbare school aan een studie natuurkunde/sterrenkunde in Leiden begonnen.

Nadat ik een stuk of 10 colleges analyse en lineaire algebra had gevolgd, begon ik me af te vragen wanneer ze nu met wiskunde zouden gaan beginnen.

De docent vroeg zich namelijk af of A + B gelijk zou zijn aan B + A.

(Ik kreeg er echt braaknijgingen van.....) Nadat hij het hele bord had volgeschreven met onleesbare letters... ( hij deed dit bewust.. denk ik nu, want

hij wilde niet laten zien dat hij het zelf ook niet begreep...) ging hij ook nog allerlei ongebrijpelijke teksten uitroepen zoals intrinsiek, triviaal

etc.

Ik dacht echt dat ik hier verkeerd zat.

De natuurkunde ging fantastisch en de sterrenkunde ook....

Na een halfjaartje ben ik maar afgehaakt en gaan rondkijken naar een andere studie.

Ik koos dus voor een studie, waar ik absoluut geen wiskunde voor nodig had.....

Het werd geologie, want al dat gedoe en de ontberingen in de bergen trokken me wel aan.

Ofwel: ik ben geoloog geworden en heb daar gedurende mijn werkzame leven, met veel plezier, mijn geld mee verdiend.

Dus wat ik hier doe heeft niets met mijn opleiding te maken.

Het is een combinatie van al mijn hobbies: radiotechniek, antennetechniek,computers bouwen, computers programmeren, sterrenkunde,

simulaties maken, en meet en regel techniek en gewoon technische problemen oplossen.

Een lang verhaal, maar zie het als uiting van mijn dank.. dan weet je met wie je van doen hebt.

Wim
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.

Dit is vreemd (ik zou zelfs denken foutief).

Normaal gezien bevat een filter met 20 polen ook 20 nullen. Iedere nul compenseert dan ook exact 1 pool, waardoor je op grote afstand van het filtergebied een amplitude 1 behoudt. Iedere pool zorgt voor 1 feedback, iedere nul voor 1 feedforward. (Hier 'forward' en 'reverse' waarschijnlijk)
een filter heeft idd evenveel polen als nullen maar er kunnen er ook op oneindig liggen mss kan dit programmaatje dit niet zeggen. en heeft hij er daardoor te weinig te veel.

Kan Wimapon en mcs51mc even vermelden welke programmaatjes ze hier gebruikten, gewoon uit interesse. Groeten.
mcs51mc
Artikelen: 0
Berichten: 473
Lid geworden op: za 23 jan 2010, 13:42

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

Hierwat theoretische achtergrond rond de werkwijze van LabVIEW.

Ondertussen weet Bert ook welke software ik gebruik ;)

Dit wil ik jullie alvast meegeven:
Fourth-Order Filtering

For bandpass and bandstop filters, which have two cut-off frequencies, fourth-order filter stages are a more direct form of filter design than second-order filter stages. IIR bandpass or bandstop filters resulting from fourth-order filter design contain cascaded fourth-order filters.

Each fourth-order filter stage has the following characteristics:

k = 1, 2, …, N s, where k is the fourth-order filter stage number and N s is the total number of fourth-order filter stages.

N s = [(N a + 1)/4]

Each fourth-order filter stage has four reverse coefficients, (a 1 k, a 2 k, a 3 k, a 4 k).

The total number of reverse coefficients equals 4N s.

Each fourth-order filter stage has five forward coefficients, (b 0 k, b 1 k, b 2 k, b 3 k, b 4 k).

The total number of forward coefficients equals 5N s.
Dus lijkt het mij meer abnormaal dat je gelijk aantal coefficienten uitkomt.
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:Hierwat theoretische achtergrond rond de werkwijze van LabVIEW.

Ondertussen weet Bert ook welke software ik gebruik ;)

Dit wil ik jullie alvast meegeven:

Dus lijkt het mij meer abnormaal dat je gelijk aantal coefficienten uitkomt.
Ik heb je bron even opgezocht: ( http://zone.ni.com/reference/en-XX/help/37...ts/iir_filters/ )

en er staat ook bij:
y 0 = x (J)

s k = y (k – 1)[i – 1] – a 1 k s k[i – 1] – a 2 k s k[i – 2] – a 3 k s k[i – 3] – a 4 k s k[i – 4] (K)

y k = b 0 k s k + b 1 k s k[i – 1] + b 2 k s k[i – 2] + b 3 k s k[i – 3] + b 4 k s k[i – 4] (L)


Die b0 staat niet voor een nul, maar voor de versterking. Die b0 kun je op 1 stellen om een genormaliseerde filter te bekomen. (andere coëfficiënten moet je dan ook delen door b0)

Weet je dan de precieze formules waar die coëfficiënten die je gaf in ingevuld moeten worden om je IIR-filter te bekomen? Heeft die dezelfde vorm als de formules die ik opgaf? Gebruiken zij niet gewoon een cascade van 5 verschillende 4e orde filters, i.p.v. 1 grote 20e orde filter?
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 Bert F.

Ik gebruik alleen zelfgeschreven programma's.

Ik schrijf ze in Quick Basic, een basic compiler uit de jaren 90.

De plaatjes maak ik met een gratis Basic compiler genaamd; Just Basic.

Omdat Just Basic heel traag rekent, doe ik het rekenwerk met Quick Basic en start deze rekenprogramma's vanuit Just Basic.

Het is wat omslachtig, maar wat ik vroeger deed- een grafiekje van Quick Basic fotograferen en dan op het internet zetten - is heel

erg veel gedoe.

Als je sources wilt hebben, kun je die krijgen hoor.

Wim
mcs51mc
Artikelen: 0
Berichten: 473
Lid geworden op: za 23 jan 2010, 13:42

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

Weet je dan de precieze formules waar die coëfficiënten die je gaf in ingevuld moeten worden om je IIR-filter te bekomen? Heeft die dezelfde vorm als de formules die ik opgaf? Gebruiken zij niet gewoon een cascade van 5 verschillende 4e orde filters, i.p.v. 1 grote 20e orde filter?
Absoluut, het is een cascade van verschillende 4e orde filter!
You implement cascade stages in fourth-order filtering in the same manner as in second-order filtering. The following equations show how the filtering operation for fourth-order stages proceeds.

y 0 = x (J)

s k = y k – 1[i – 1] – a 1 k s k[i – 1] – a 2 k s k[i – 2] – a 3 k s k[i – 3] – a 4 k s k[i – 4] (K)

y k = b 0 k s k + b 1 k s k[i – 1] + b 2 k s k[i – 2] + b 3 k s k[i – 3] + b 4 k s k[i – 4] (L)


De Reverse coefficienten zijn de a1 tot a4 coefficienten in formule (K)

Deze komen overeen met het onderste deel van jouw formule, a * y(n-20) ... ... ... m * y(n-1)

De Forward coefficienten zijn de b1 tot b4 coefficienten in formule (L)

Deze komen overeen met het bovenste deel van jouw formule, a * x(n-20) ... ... ... ... ... ... ... m * x(n-0)

Heb je ook al gezien dat het patroon van die coefficienten identiek is aan het patroon van jouw coefficienten?

Eerste = aan laatste

Tweede = aan voorlaatste

Derde = aan voor voorlaatste enz....

In jouw geval heb je dat patroon slechts één keer daan één filter, bij LV heb je dat patroon 5 keren omwille van vijf cascade filters.

Zijn ze echter geranschikt a1 tot a4 van cascade filter 1 tot 5 of a4 tot a1 van cascade filter 5 tot 1 of ... ... ... dat weet ik niet maar je hebt maar vier mogelijkheden dus zó moeilijk moet dat niet zijn voor onze Wim :)

Die b0 staat niet voor een nul, maar voor de versterking. Die b0 kun je op 1 stellen om een genormaliseerde filter te bekomen. (andere coëfficiënten moet je dan ook delen door b0)


Geen ;) dus :) ik maar ;)
Wimapon
Artikelen: 0
Berichten: 114
Lid geworden op: zo 29 nov 2009, 12:52

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

Heren,

Hier is het resultaat van mijn noeste arbeid om een geschikt filter te vinden.

Het kan nog wel ietsje beter, maar voorlopig ben ik hier tevreden over.

Ik kan het programma gemakkelijk in mijn "pijplijn"van programma's inpassen .

Ik moet nog andere doorlaatbandjes gaan maken, maar dat komt nog.

Het lukt me weer niet om een plaatje te posten... ik probeer het in een volgende boodschap

Links zie je input en rechts de output. Het betreft een gewone meting van sterrenruis.

De veraf-demping zou nog wat beter kunnen, maar voorlopig ben ik heel tevreden.
Wimapon
Artikelen: 0
Berichten: 114
Lid geworden op: zo 29 nov 2009, 12:52

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

hier is ie:

Afbeelding

he he.. het is gelukt... dit is het dan

Dus nogmaals: links zie je de ruis die uit 1 kanaal van de ontvanger komt.

Rechts zie je de gefilterde ruis.

Ik gebruik dus een in Quick Basic geprogrammeerd 12 polig bessel iir filter.

Ik ben heel trots op het resultaat.

Terug naar “Elektrotechniek”