Eenvoudige laagdoorlaat filter in matlab.

Moderators: jkien, Xilvo

Reageer
Berichten: 2.589

Eenvoudige laagdoorlaat filter in matlab.

In een boek wat ik nu uiteindelijk gevonden heb (wavlets and filterbanks) beschrijft men een eenvoudig laag doorlaat filter met behulp van volgende formule:
\(y(n)=1/2x(n)+1/2x(n-1)\)
Graag had ik hiervan het frequentie verloop gekend daarom maak ik een proefsignaal aan (in matlab) x=exp(jw) met w=0:100 ik berekenen nu het effect van dit ingangssignaal op de filter met y = filter(B,A,x); met daarbij B=[1/2,1/2] en A=1

Vervolgens transformeer ik dit signaal met een dft om nadien er dan de absolute waarde van te plotten. Spijtig genoeg bekom ik totaal iets anders dan zou moeten.

Bekom ik met het commando y = filter(B,A,x); volgende?
\( y(n)=\sum h(k)x(n-k)\)
Waar zit ik fout? Groeten.

Gebruikersavatar
Berichten: 24.578

Re: Eenvoudige laagdoorlaat filter in matlab.

Dit lijkt me eerder iets voor het technisch forum - verplaatst.
"Malgré moi, l'infini me tourmente." (Alfred de Musset)

Berichten: 7.068

Re: Eenvoudige laagdoorlaat filter in matlab.

In het kader van 'teach by example':

Code: Selecteer alles

N = 1000;

A = 1;

B = [0.5, 0.5];

t = 2*pi*[0:1:(N-1)]/N;

x = sin(t) + 0.01*randn(size(t)); % de randn heb ik toegevoegd zodat ik bij de berekening van H niet door nul deel.

y = filter(B,A,x);

X = fft(x);

Y = fft(y);

H = Y./X;

figure;

plot(abs(H));


Resultaat zou overeen moeten komen (en dat doet het ook :D ):

Code: Selecteer alles

N = 1000;

h = zeros(1,N);

h(1) = 0.5;

h(2) = 0.5;

H = fft(h);

figure;

plot(abs(H));

Berichten: 2.589

Re: Eenvoudige laagdoorlaat filter in matlab.

Ik begrijp toch een aantal zaken niet.

In het eerste voorbeeld maak je waarschijnlijk op een correcte manier gebruik van de matlab filter en bekomt zo het frequentie gedrag.

Wat doe je in het tweede voorbeeld? Wat heeft dat met het eerste te maken?

In het boek waar men analytisch de frequentie respons uit rekent doet men het als volgt: men neemt een test signaal
\(x(n)=e^{inw}\)
dit vult men in, in de formule: (het filter)
\(y(n)=1/2 x(n) +1/2x(n-1)\)
dan bekomt men (door manipulatie en buiten brengen van een term)
\(H(w)=1/2+1/2e^{iw}\)
Dus dacht ik, ik leg het test signaal aan:
\(x(n)=e^{inw}\)
bereken hiermee de convolutie met het filter dan krijg ik hiervan een tijdsbeeld en dat transformeer ik mbv fourier om zo het frequentie beeld te krijgen. is dat fout? Waarschijnlijk want ik bekom totaal niet wat het zou moeten maar waarom? Groeten.

Berichten: 2.589

Re: Eenvoudige laagdoorlaat filter in matlab.

hier is het fragment uit het boek:

Afbeelding

Kan ermij iemand vertellen waarom dat men hier opeens kan zeggen dat het afgezonderde stuk de transferfunctie is? men heeft toch geen integraal transformatie uitgerekend? Groeten.

Berichten: 7.068

Re: Eenvoudige laagdoorlaat filter in matlab.

Wat doe je in het tweede voorbeeld?
Ik construeer het digitale filter (bedenk maar eens wat een convolutie van h met x zou opleveren). Daar neem ik dan de discrete fouriertransformatie van.
dan bekomt men (door manipulatie en buiten brengen van een term)
\(H(w)=1/2+1/2e^{iw}\)
Kan ermij iemand vertellen waarom dat men hier opeens kan zeggen dat het afgezonderde stuk de transferfunctie is?
Zie de bovenstaande sommatie. Dit mag kennelijk omdat y een lineaire combinatie is van termen van x. Ik geloof zo dat ze daar een leuk bewijsje voor hebben.

Berichten: 2.589

Re: Eenvoudige laagdoorlaat filter in matlab.

\(Y(\omega) = \sum_{n=-\infty}^{\infty} y_n e^{-i \omega n} = \sum_{n=-\infty}^{\infty} \frac{1}{2} (x_n + x_{n-1}) e^{-i \omega n} = \frac{1}{2} (1 + e^{-i \omega}) X(\omega)\)
hoe geraak je van de voorlaatste term naar de laatste? ik zie niet goed hoe die
\(\omega\)
blijft? als ik het beschouw als een integraal dan valt dat volgens mij weg of niet? Groeten.

Edit ik zie niet goed hoe je in je tweede voorbeeld je digitale filter maakt? is dit hier toevallig zo of is het een algmeene regel?

Berichten: 7.068

Re: Eenvoudige laagdoorlaat filter in matlab.

\(Y(\omega) = \sum_{n=-\infty}^{\infty} y_n e^{-i \omega n} = \sum_{n=-\infty}^{\infty} \frac{1}{2} (x_n + x_{n-1}) e^{-i \omega n} = \frac{1}{2} \sum_{n=-\infty}^{\infty} x_n e^{-i \omega n} + \frac{1}{2} \sum_{n=-\infty}^{\infty} x_{n-1} e^{-i \omega n}\)
\(= \frac{1}{2} \sum_{n=-\infty}^{\infty} x_n e^{-i \omega n} + \frac{1}{2} \sum_{m=-\infty}^{\infty} x_m e^{-i \omega (m + 1)} = \frac{1}{2} \sum_{n=-\infty}^{\infty} x_n e^{-i \omega n} + \frac{1}{2} \sum_{m=-\infty}^{\infty} x_m e^{-i \omega m} e^{-i \omega}\)
\(= \frac{1}{2} \sum_{n=-\infty}^{\infty} x_n e^{-i \omega n} + \frac{1}{2} e^{-i \omega} \sum_{m=-\infty}^{\infty} x_m e^{-i \omega m} = \frac{1}{2} (1 + e^{-i \omega}) \sum_{n=-\infty}^{\infty} x_n e^{-i \omega n} \)
\( = \frac{1}{2} (1 + e^{-i \omega}) X(\omega) \)
De discrete convolutie:
\((h * x)(n) = \sum_{m = -\infty}^\infty x(m)\cdot h(n-m)\)
Kijk nu wat er gebeurt als geldt:
\(h(0) = 1\)
\(h(1) = 1\)
en voor alle andere waardes is h nul.
\((h * x)(n) = \sum_{m = -\infty}^\infty x(m)\cdot h(n-m) = \sum_{m = -\infty}^{n-2} x(m)\cdot h(n-m) + x(n-1)\cdot h(n-(n-1)) + x(n)\cdot h(n-n) + \sum_{m = n+1}^\infty x(m)\cdot h(n-m)\)
In de twee sommaties zijn alle termen nul, dus blijft over:
\(= x(n-1)\cdot h(n-(n-1)) + x(n)\cdot h(n-n) = x(n-1)\cdot h(1) + x(n)\cdot h(0) = x(n-1) + x(n) = 2 y(n)\)
Bij dit soort zaken is het niet zo lastig om de overdrachtfunctie h te vinden. Ik vind het echter lastig om uit te leggen (in mijn hoofd zie ik een gespiegelde functie over de andere functie heen gaan). Als je bijvoorbeeld zou hebben:
\(y(n) = \frac{x(n-3)}{2} + x(n) + x(n+4)\)
dan zou gelden:
\(h(3) = \frac{1}{2}\)
\(h(0) = 1\)
\(h(-4) = 1\)

Berichten: 2.589

Re: Eenvoudige laagdoorlaat filter in matlab.

Bedankt voor je informatie het wordt me al veel meer duidelijk.

enkel heb ik nu een frequentie gedrag van een halve cirkel op een bepaalde frequentie is de doorlaat volledig nul wat gebeurd er na die frequentie? zoiets heb ik bij analoge filters nog nooit tegenkomen, dat er totaal niets meer doorkomt. Is dat omdat het een digitale filter is en spert die daar volledig? Groeten.

Berichten: 7.068

Re: Eenvoudige laagdoorlaat filter in matlab.

enkel heb ik nu een frequentie gedrag van een halve cirkel op een bepaalde frequentie is de doorlaat volledig nul wat gebeurd er na die frequentie?
Ik snap de bovenstaande 'zin' niet goed.

Berichten: 2.589

Re: Eenvoudige laagdoorlaat filter in matlab.

Afbeelding

dit is het frequentie gedrag. maar wat gebeurd er na pi? spert die dan volledig?

Reageer