Sprungantwort des Moving Average

OP #4245501
Lesenswert?

Hey Leute,

ich bin gerade dabei die Sprungantwort für meinen Moving Average filter 
herzuleiten. Dies Versuche ich über die Z-transformierte.

H(z)=1/M * (1-z^-M)/(1-z^-1), das 1/M lass ich im späteren Verlauf aber 
mal weg, weil es nur ein konstanter Faktor ist.

Die Sprungantwort A(z) = H(z)*S(z); wobei S(z)=z/(z-1) der unit step ist

Nun komme ich auf A(z)=(1-z^-M)/(1-2z^-1-z^-2)

Um zurück in den Zeitbereich zu kommen versuche ich die 
Partialbruchzerlegung. Die Polstellen sind: z1=1+sqrt2=a und 
z2=1-sqrt2=b

Zuvor musste ich aber Nenner und Zähler mit z^2 erweitern.

Nun habe ich: A(z)=(z^2-z^(-M+2))/((z-a)*(z-b))

So und hier weiß ich nun nicht weiter...
Könnte mir einer Grundsätzlich die Formel für die Sprungantwort im 
Zeitbereich für einen Moving Average sagen oder bei der weiteren 
Herleitung einen Tipp geben?

Gruß
Stefan
Gast #4245529
Lesenswert?

Grundsätzlich ist das bei einem Moving-Average ohne große Rechnung recht 
einfach: Du hast im Prinzip ein Rechteckfenster(Folge von M dirac-stoßen 
mit der Amplitude 1/M), welches du über dein Signal (hier: 
Sprungfunktion von 0 auf 1) verschiebst.

In dem Bereich wo dein Eingangsignal 0 ist, ist auch dein Ausgangsignal 
0. Nun kommt schließlich der Übergang wo der Sprung stattfindet. An der 
Stelle wo das erste Sample vom Sprung mit eingeht, mittelst du ja über M 
Werte die bis auf einen alle Null sind. Also ist das Ausgangssignal an 
dieser Stelle 1/M. An der nächsten Stelle gehen schon zwei Samples mit 
dem Wert 1 ein, d.h. 2/M. usw.

Also: eine aufsteigende Treppe mit M-Stufen und ab dann konstant auf 1

Im Endeffekt: Sprungfunktion gefaltet mit einem Rechteckfester
OP #4246665
Lesenswert?

@ Matthias: Wenn ich zuerst die Differenzengleichung für meinen 
rekursiven MA aufstelle und dann in den z-Bereich transformiere, hab ich 
ja nur wieder meine Übertragungsfunktion im z-Bereich oder verstehe ich 
dich da falsch?


Hab mal in Matlab versucht die Sprungantwort zu plotten. Da der Filter 
Kernel eine endliche Länge hat, sieht es wie ein Trapez aus. Ist das 
soweit richtig?
1
% Step Response of CIC an MA
2

3
% a(z)=(1-z^-M)/(1-2z^-z^-2) or in laplace: a(s)=(1/s)*(1-e^-sTM)/(1-e^-sT)
4

5
clear all
6
close all
7

8
f=ones(1,5000);
9
r=zeros(1,500);
10
s=[r,f];        %Step function
11
M=500;          %Number of points
12

13
% h=[zeros(1,length(r/2)),(1/M).*ones(1,length(M)),zeros(1,length(r/2))];     
14

15
h=[(1/M).*ones(1,M)]; %Filter kernel or square window with the length M
16

17
a=conv(s, h);   %Convultion of step function with filter kernel
18

19
v=length(h);
20
w=length(s);
21
x=0:1:(w+v)-2;  %X-axis
22

23
figure(1)
24
plot(x, a)      %Plot of the convultion
25
axis([0 6000 -0.2 1.5])
26
title('step response of recursive MA / CIC')
27

28
figure(2)
29
subplot(1,2,1) %Plot of step function
30
plot(s)
31
axis([-500 6000 -0.1 1.5])
32
title('step function')
33

34
subplot(1,2,2) %plot of filter kernel
35
plot(h,'x')
36
title('recursive MA / CIC filter kernel')
37
axis([-50 550 -0.001 0.005])
Angehängte Dateien:
#4307279
Lesenswert?

S(z)H(z)= 1/M * (1-z^-M)/(1-z^-1) * z/(z-1) =
=  (1/M * z^2 / (z-1)^2) - (1/M *  z^-M * z^2/(z-1)^2) =
= (1/M z * z/(z-1)^2) - (1/M * z^(-M+1) *  z/(z-1)^2)


z/(z-1)^2 <=> n*s[n]  für |z|>1


=> 1/M  * (n+1) * s[n+1] - 1/M * (n-M+1) * s[n-M+1]


lg
Markus
PS: Rechenfehler darf sich jeder selbst behalten :)
PS2: S(z) <=> s[n] "union step"

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren