Lågpassfilter i mjukvara!

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Lågpassfilter i mjukvara!

Inlägg av snigelen »

Borgen: Jo jag tänker lite som du. Det är därför jag tjafsar lite i frågan.

ahlsten: du sätter väl dt till 1, och det funkar väl lika bra som något för att räkna ut dc-förstärkningen(?).
Nerre
Inlägg: 27141
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Lågpassfilter i mjukvara!

Inlägg av Nerre »

snigelen skrev:detta är inte heller ett lågpassfilter?
Formellt sett inte.

Frågan är ju hur man skall definiera lågpassfilter.

Det rimligaste är ju "släpper igenom låga frekvenser opåverkat". Men det implicerar ju mer eller mindre ett ideellt filter.

Kan man nöja sig med "har en fast dämpning upp till brytfrekvensen" så kan man kanske acceptera att DC-gain är mindre än 1, men för att filtret då ska fungera som önskat måste det antagligen kombineras med en förstärkare som gör att total DC-gain blir 1.

Om du har ett lågpassfilter med en brytfrekvens på 10 kHz som går att koppla in och ur med en switch, vad förväntar du dig händer med en signal på 100 Hz när du kopplar in filtret? Du kan väl inte mena att du förväntar dig att 100 Hz-signalen dämpas när du kopplar in lågpassfiltret?
bearing
Inlägg: 11653
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Lågpassfilter i mjukvara!

Inlägg av bearing »

Nu har du målat in dig i ett hörn. Det är väl självklart att ett lågpassfilter kallas lågpassfilter även om det har en fast dämpning av DC.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Lågpassfilter i mjukvara!

Inlägg av jesse »

Det är väl inte så himla viktigt.
bearing
Inlägg: 11653
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Lågpassfilter i mjukvara!

Inlägg av bearing »

whatever

det var en fin filteralgoritm iaf.
Nerre
Inlägg: 27141
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Lågpassfilter i mjukvara!

Inlägg av Nerre »

bearing skrev:Nu har du målat in dig i ett hörn. Det är väl självklart att ett lågpassfilter kallas lågpassfilter även om det har en fast dämpning av DC.
Jag upprepar frågan: Om du har ett lågpassfilter med en brytfrekvens på 10 kHz som går att koppla in och ur med en switch, vad förväntar du dig händer med en signal på 100 Hz när du kopplar in filtret? Du kan väl inte mena att du förväntar dig att 100 Hz-signalen dämpas när du kopplar in lågpassfiltret?
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Lågpassfilter i mjukvara!

Inlägg av snigelen »

Nerre skrev:Frågan är ju hur man skall definiera lågpassfilter.
Just det. Jag har inte sett någon definition som slagit igenom och blivit allrådande i alla läger.
Nerre skrev:Det rimligaste är ju "släpper igenom låga frekvenser opåverkat". Men det implicerar ju mer eller mindre ett ideellt filter.
Det är din åsikt/tolkning. Inte t.ex min.
Nerre skrev:Jag upprepar frågan: Om du har ett lågpassfilter med en brytfrekvens på 10 kHz som går att koppla in och ur med en switch, vad förväntar du dig händer med en signal på 100 Hz när du kopplar in filtret? Du kan väl inte mena att du förväntar dig att 100 Hz-signalen dämpas när du kopplar in lågpassfiltret?
Jodå. Det kan den väl. Jag tycker inte filtret är fullständigt specificerat. Men man kan ju prova och se hur det beter sig.

Lägger du till att det t.ex är ett elliptiskt filter kan man ju vara ganska säker på att förstärkningen inte är ett genom hela passbandet. Men det dyker rackarns snabbt vid brytfrekvensen :).
Nerre
Inlägg: 27141
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Lågpassfilter i mjukvara!

Inlägg av Nerre »

Jag tycker liksom att ordet gör definitionen: Lågpass

"Låga" frekvenser "passerar igenom" medans höga inte gör det.

Då blir frågan vad som räknas som "passerar igenom". Jag tror inte särskilt många håller med om att "dämpas 6 dB" är samma sak som "passerar igenom".
Användarvisningsbild
Borgen
Inlägg: 39
Blev medlem: 21 januari 2009, 17:50:43
Skype: henrikborg
Ort: Botkyrka
Kontakt:

Re: Lågpassfilter i mjukvara!

Inlägg av Borgen »

För att ytterligare förklara varför filtret får dämpa insignalen i passbandet:

Definition av brytfrekvens:
Med brytfrekvens menas vanligen den frekvens där insignalen dämpas med 3dB. Det innebär att endast halva effekten av insignalen kommer infinna sig på utgången. Andra definitioner relativt erfoderlig storlek på dämpningen finns för enskilda användningsområden.

Med den definitionen är det självklart att passbandet får dämpas.

Varför en definition på brytfrekvensen som relaterar till dämpningen:
Om vi tittar på hur RC- och RL-nät fungerar så kan de inte ha dämpning 0dB i mer än en oändligt liten punkt. Rita diagrammen för ideala RC/RL-nät så får du se. Om man tar hänsyn till den inneboende resistansen (om än oftast relativt sett mycket liten) i kondensatorn/induktorn får man garanterat en spänningsdelning. Att vi sedan kan använda oss av en OPAMP för att jämna ut kurvan gör inte saken så mycket bättre. Det finns alltid ett frekvensberoende i komponenterna vilket gör att att vi inte kan ha dämpningen 0dB i mer än en oändligt liten punkt i ett enpoligt filter, två punkter för ett tvåpoligt...

När man letar efter ett lämpligt filter tittar man på passbandets brytfrekvenser, ordningstal, fasvridning och vilken typ av filter det rör sig om i fall man är intresserad av eventuellt rippel i passbandet med mera. Så länge som utsignalen från filtret ligger inom hanterbara gränser är det okej, behövs det sätter man in en förstarkare. Inom elektroniken måste man alltid använda sig av kompromisser.

Exempel på olika typer av normerade filter http://en.wikipedia.org/wiki/Elliptic_f ... ar_filters

Att tjafsa om dämpning 0dB i passbandet är därför ointressant.
Senast redigerad av Borgen 19 april 2011, 15:28:34, redigerad totalt 1 gång.
Användarvisningsbild
Borgen
Inlägg: 39
Blev medlem: 21 januari 2009, 17:50:43
Skype: henrikborg
Ort: Botkyrka
Kontakt:

Re: Lågpassfilter i mjukvara!

Inlägg av Borgen »

Nerre skrev:Jag tror inte särskilt många håller med om att "dämpas 6 dB" är samma sak som "passerar igenom".
Om kravet för konstruktionen är en brytfrekvens relativt mer än 6dB dämpning så är det det.

Inte helt ovanligt är att man man pratar om brytfrekvensens dämpning som relativt den normerade dämpningen som är 0dB. Att den faktiska dämpningen är större får man i så fall läsa sig fram i databladet och räkna ut vad den faktiska dämpningen i så fall blir. Räknar man i dB är det vanlig addition/subtraktion man då räknar med.
Användarvisningsbild
Borgen
Inlägg: 39
Blev medlem: 21 januari 2009, 17:50:43
Skype: henrikborg
Ort: Botkyrka
Kontakt:

Re: Lågpassfilter i mjukvara!

Inlägg av Borgen »

Tack jesse för att Du lade upp mjukvarufiltret :tumupp:
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Lågpassfilter i mjukvara!

Inlägg av jesse »

:)
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Lågpassfilter i mjukvara!

Inlägg av snigelen »

Nu har jag kollat lite på ditt filter igen, och det är ju enkelt och bra.

Det har ju ett nollställe i origo och en pol i 1-2^(-k) i z-planet. Men för att få bättre undertryckning av höga frekvenser tänkte jag man kunde flytta nollstället till z = -1 i stället, utan att göra avkall på enkelheten i filtret. Det fås genom att lägga till föregående insignal och skala output med ett extra shift för att få DC-förstärkning 1 (för det skall väl ett lågpassfilter ha :wink:).

Skillnaderna och likheter:
- Bättre dämpning av höga frekvenser
- Ungefär samma bandbredd (något lägre för k=1 och 2, men annars ungefär samma)
- Ungefär samma stigtid.
- Fasen kommer ett gå hela vägen till -90 gr eftersom det inte längre är minimum fas.

Kod: Markera allt

#define FILTER_SHIFT 4                    //  Parameter  K
// int32_t = Specify  32-bit   integer
// int16_t Specify  16-bit   integer
int32_t  filter_reg;                       //  Delay  element  – 32 bits
int16_t  filter_input, old_input = 0;                    //  Filter   input  – 16 bits
int16_t  filter_output ;                   //  Filter  output  – 16 bits
//  Update filter with current sample. 
filter_reg =  filter_reg  -   ( filter_reg >> FILTER_SHIFT)  +  filter_input + old_input;

// Save old input
old_input = filter_input

//  Scale output   for  unity  gain. 
output  =  filter_reg >> (FILTER_SHIFT + 1);
En plot av frekvensfunktionen för k=1,...,8 för orginalfiltret och med min modifikation (de som dyker vid höga f).
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Lågpassfilter i mjukvara!

Inlägg av jesse »

Intressant. Tyvärr hänger jag inte med i terminologin (origo, pol etc.. och vadå z-planet?) Det var längesen jag läste om sånt. Kan ju vara intressant att experimentera lite. Hur blir det om du gör samma sak fast med fyra samples istället för två (jag tänkte skriva tre, men det bli sån ojämn division då).... dvs man sparar även older_input = old_input; och oldest_input = older_input; och adderar alla fyra :D
Användarvisningsbild
Icecap
Inlägg: 26610
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Lågpassfilter i mjukvara!

Inlägg av Icecap »

Du kan ju kolla i Excel eller liknande...
Skriv svar