Forum: Digitale Signalverarbeitung / DSP / Machine Learning Sprungantwort des Moving Average


von Stefan W. (slev1n)


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

von Alex (Gast)


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

von Stefan W. (slev1n)


Lesenswert?

Das macht auf jedenfall Sinn.
Die Faltung im Zeitbereich entspricht ja der Multiplikation im 
Frequenzbereich.
Ich schau mir das ganze nochmal genauer an und melde mich dann :)

Gruß
Stefan

von Matthias M. (Gast)


Lesenswert?

Hm... der MA hat keine Pole. Du könntest zuerst die Differenzengleichung 
aufstellen und dann mit dem Verschiebungssatz z-transformen.

von Stefan W. (slev1n)



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])

von Matthias M. (Gast)


Lesenswert?

Ich meinte, dass der MA eine andere H(z) hat. Im Zeitbereich geht die 
Sprungantwort  einfacher auszurechnen als mit hin und her 
transformieren...

von Markus B. (russenbaer)


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"

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.