Lågpassfilter i mjukvara!
Re: Lågpassfilter i mjukvara!
ToB: Det som menas med att det inte fungerar är att filtrets steady-state-förstärkning, den faktor som i det här fallet råder mellan en invariant insignal och utsignalen efter oändlig tid, inte blir 1.
(Med andra ord så är förstärkningen vid 0 Hz inte 1, något som man nog förväntar sig av ett lågpassfilter.)
(Med andra ord så är förstärkningen vid 0 Hz inte 1, något som man nog förväntar sig av ett lågpassfilter.)
Re: Lågpassfilter i mjukvara!
y(n) = 0.99 * y(n-1) + 0.009*x(n)
Att det inte funkar. Om inte summa av konstanterna är 1 så drar filtret åt fel håll. Se exemplet nedan Även om filtret får y(n-1) = 1 och ska lågpassfiltrera signalen x(n) =1 så borde filtret komma fram till att y(n) ska vara 1 men det gör det inte tycker att insignalen = 0 och det är fel. Pröva själv! Detta för att summan är mindre än 1 är den större än 1 växer den obegränsat.ToB skrev:På vilket sätt menar du att det inte funkar?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Lågpassfilter i mjukvara!
Men det är väl fel formel som används där efter vad jag kan se...
Som jag ser det ska den skrivas: =0,99*A1 + 0,009*B1
Det kanske inte ändrar så mycket men rätt ska vara rätt.
Som jag ser det ska den skrivas: =0,99*A1 + 0,009*B1
Det kanske inte ändrar så mycket men rätt ska vara rätt.
Re: Lågpassfilter i mjukvara!
Mja,
=0,99*B1+0,009*A2 ska det vara.
B kolumn y-värde och A kolumn x-värde.
Jag halkade på tangenterna i Excel och sen lyckades jag inte få bort bilden. Eller posten. Hur gör man?
Här är i alla fall en ny bild.
=0,99*B1+0,009*A2 ska det vara.
B kolumn y-värde och A kolumn x-värde.
Jag halkade på tangenterna i Excel och sen lyckades jag inte få bort bilden. Eller posten. Hur gör man?
Här är i alla fall en ny bild.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Lågpassfilter i mjukvara!
Ahlsten:
Jag är inte säker på att jag håller med om att DC-gain nödvändigtvis måste vara 1 för ett LP-filter.
Men det är klart, i någon specifik applikation kan det ju vara ett krav.
"drar åt fel håll"?
"tycker inte att insignalen = 0"?
divergent men det är ju inte riktigt samma sak.
Stegsvaret för filtret som jesse visade, y[n] = 0.99 * y[n-1] + 0.009*x[n], ser ju ut att konvergera mot 0,9 någonting.
Jag är inte säker på att jag håller med om att DC-gain nödvändigtvis måste vara 1 för ett LP-filter.
Men det är klart, i någon specifik applikation kan det ju vara ett krav.
Jag har lite svårt att förstå vad du menar.Bonzo skrev: Att det inte funkar. Om inte summa av konstanterna är 1 så drar filtret åt fel håll. Se exemplet nedan Även om filtret får y(n-1) = 1 och ska lågpassfiltrera signalen x(n) =1 så borde filtret komma fram till att y(n) ska vara 1 men det gör det inte tycker att insignalen = 0 och det är fel. Pröva själv!
"drar åt fel håll"?
"tycker inte att insignalen = 0"?
Nja, om koefficienten för y[n-1] är större än, eller lika med 1 så är stegsvaretBonzo skrev: Detta för att summan är mindre än 1 är den större än 1 växer den obegränsat.
divergent men det är ju inte riktigt samma sak.
Stegsvaret för filtret som jesse visade, y[n] = 0.99 * y[n-1] + 0.009*x[n], ser ju ut att konvergera mot 0,9 någonting.
Re: Lågpassfilter i mjukvara!
Det var ju riktigt roligt att labba med filter i excel.
"insignal - lågpass" verkar funka fint som högpass.
"insignal - lågpass" verkar funka fint som högpass.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Lågpassfilter i mjukvara!
Även om brytfrekvensen är 1 MHz?ToB skrev:För ett LP-filter, lite mindre än för 0 Hz.
Re: Lågpassfilter i mjukvara!
Mycket fint sammanställt jesse, men det ska väll kanske också noteras att metoden för ökade upplösningen brukar kallas oversampling för fördjupad läsning.
Re: Lågpassfilter i mjukvara!
"upptäckte" ett ännu enklare högpass filter när jag labbade med excelarket.
Ut = In - In[i-1]
dvs, ut är lika med det nya invärdet minus ett äldre invärde.
Kan det bli enklare?
Ut = In - In[i-1]
dvs, ut är lika med det nya invärdet minus ett äldre invärde.
Kan det bli enklare?
Re: Lågpassfilter i mjukvara!
Ja, det var lite rörigt skrivet. Ja, filtret konvergerar mot 0,9 för invärdet 1. Nu är det inte något jag i alla fall inser utan vidare utan fick pröva mig fram. Hur räknar du ut DC-gain för detta filter?ToB skrev:Ahlsten:
Jag är inte säker på att jag håller med om att DC-gain nödvändigtvis måste vara 1 för ett LP-filter.
Men det är klart, i någon specifik applikation kan det ju vara ett krav.
Jag har lite svårt att förstå vad du menar.Bonzo skrev: Att det inte funkar. Om inte summa av konstanterna är 1 så drar filtret åt fel håll. Se exemplet nedan Även om filtret får y(n-1) = 1 och ska lågpassfiltrera signalen x(n) =1 så borde filtret komma fram till att y(n) ska vara 1 men det gör det inte tycker att insignalen = 0 och det är fel. Pröva själv!
"drar åt fel håll"?
"tycker inte att insignalen = 0"?
Nja, om koefficienten för y[n-1] är större än, eller lika med 1 så är stegsvaretBonzo skrev: Detta för att summan är mindre än 1 är den större än 1 växer den obegränsat.
divergent men det är ju inte riktigt samma sak.
Stegsvaret för filtret som jesse visade, y[n] = 0.99 * y[n-1] + 0.009*x[n], ser ju ut att konvergera mot 0,9 någonting.
Re: Lågpassfilter i mjukvara!
>Hur räknar du ut DC-gain för detta filter?
Eftersom indata multipliceras med 0.9 (jämfört med ett "riktigt" filter) så blir utdata givetvis också *0.9. Där har du DC-gain.
Eftersom indata multipliceras med 0.9 (jämfört med ett "riktigt" filter) så blir utdata givetvis också *0.9. Där har du DC-gain.
Re: Lågpassfilter i mjukvara!
Som en parentes följer en enkel räkneövning...
Vid konstant insignal efter oändlig tid så gäller: y[n] = y[n-1]
Den statiska förstärkningen, ofta benämnd G_0, fås då av:
y[n] = 0.99*y[n] + 0.009*x[n] =>
(1-0.99)*y[n] = 0.009*x[n] =>
y[n] = 0.009/(1-0.99)*x[n] = 0.9*x[n] =>
G_0 = 0.9
(Hoppas nu bara att ingen missförstår termen 0.009/(1-0.99)*x[n] ...)
Vid konstant insignal efter oändlig tid så gäller: y[n] = y[n-1]
Den statiska förstärkningen, ofta benämnd G_0, fås då av:
y[n] = 0.99*y[n] + 0.009*x[n] =>
(1-0.99)*y[n] = 0.009*x[n] =>
y[n] = 0.009/(1-0.99)*x[n] = 0.9*x[n] =>
G_0 = 0.9
(Hoppas nu bara att ingen missförstår termen 0.009/(1-0.99)*x[n] ...)
Re: Lågpassfilter i mjukvara!
y(n) = 0.99 * y(n-1) + 0.01*x(n) borde det vara för en dc-gain på 1 som flera nämnt. Summan ska bli 1.jesse skrev:Då har författaren till boken om reglersystem haft fel, för enligt den boken (minns ej titel) så var detta ett kalman-filter:
y(n) = 0.99 * y(n-1) + 0.009*x(n)
där y(n) är filter-utdata och x(n) är inkommande samples.
Ang kalman filter så bygger det på att man optimalt viktar samman en prediktion och ett mätvärde till en ny skattning, beroende på brusnivån på prediktionen och mätningen där bruset är normalfördelat.