Contents
Programmbeschreibung
The applet should clarify the properties of digital filters, whereby we confine ourselves to filters of the order M=2. Both non-recursive filters (FIR, Finite Impulse Response) as well as recursive filters (IIR, Infinite Impulse Response).
The input signal x(t) is represented by the sequence 〈x_ν〉 of its samples, where x_ν stands for x(ν · T_{\rm A}). The output sequence 〈y_ν〉is calculated, i.e. the discrete-time representation of the output signal y(t).
- T_{\rm A} denotes the time interval between two samples.
- We also limit ourselves to causal signals and systems, which means that x_ν \equiv 0 and y_ν \equiv 0 for ν \le 0.
It should also be noted that we denote the initial sequence 〈y_ν〉 as
(1) the discrete-time impulse response 〈h_ν〉 if the “discrete-time Dirac function” is present at the input: 〈x_ν〉= 〈1,\ 0,\ 0,\ 0,\ 0,\ 0,\ 0, \text{...}〉,
(2) the time-discrete step response 〈\sigma_ν〉 if the “time-discrete step function” is present at the input: 〈x_ν〉= 〈1,\ 1,\ 1,\ 1,\ 1,\ 1,\ 1, \text{...}〉,
(3) the discrete-time rectangle response 〈\rho_ν^{(2, 4)}〉 if the “discrete-time rectangle function” is present at the input: 〈x_ν〉= 〈0,\ 0,\ 1,\ 1,\ 1,\ 0,\ 0, \text{...}〉;
In quotation marks are the beginning of the ones (2) and the position of the last ones (4).
Theoretical background
General block diagram
Each signal x(t) can only be represented on a computer by the sequence 〈x_ν〉 of its samples, where x_ν stands for x(ν · T_{\rm A}). right |frame| Block diagram of a digital (IIR–) filter M–order
- The time interval T_{\rm A} between two samples is limited by the sampling theorem.
- We limit ourselves here to causal signals and systems, which means that x_ν \equiv 0 for ν \le 0.
- In order to determine the influence of a linear filter with frequency response H(f) on the time-discrete input signal 〈x_ν〉, it is advisable to describe the filter discrete-time. In the time domain, this happens with the discrete-time impulse response 〈h_ν〉.
- On the right you can see the corresponding block diagram. The following therefore applies to the samples of the output signal 〈y_ν〉 thus holds:
- y_\nu = \sum\limits_{\mu = 0}^M {a_\mu } \cdot x_{\nu - \mu } + \sum\limits_{\mu = 1}^M {b_\mu } \cdot y_{\nu - \mu } .
The following should be noted here:
- The index \nu refers to sequences, for example at the input 〈x_ν〉 and output 〈y_ν〉.
- On the other hand, we use the index \mu to identify the a and b filter coefficients.
- The first sum describes the dependency of the current output y_ν on the current input x_ν and on the M previous input values x_{ν-1}, ... , x_{ν-M}.
- The second sum indicates the influence of y_ν by the previous values y_{ν-1}, ... , y_{ν-M} at the filter output. It specifies the recursive part of the filter.
- The integer parameter M is called the order of the digital filter. In the program, this value is limited to M\le 2.
\text{Definitions:}
(1) The output sequence 〈y_ν〉 is called the discrete-time impulse response 〈h_ν〉 if the “discrete-time Dirac function” is present at the input:
- 〈x_ν〉= 〈1,\ 0,\ 0,\ 0,\ 0,\ 0,\ 0, \text{...}〉 .
(2) The output sequence 〈y_ν〉 is called the time-discrete step response 〈\sigma_ν〉 if the “time-discrete step function” is present at the input:
- 〈x_ν〉= 〈1,\ 1,\ 1,\ 1,\ 1,\ 1,\ 1, \text{...}〉 .
(3) The output sequence 〈y_ν〉 is called the discrete-time rectangle response 〈\rho_ν^{(2, 4)}〉 if the “discrete-time rectangular function” is present at the input:
- 〈x_ν〉= 〈0,\ 0,\ 1,\ 1,\ 1,\ 0,\ 0, \text{...}〉 .
- The beginning of ones (2) and the position of the last ones (4) are given in single quotes.
Non-recursive filter ⇒ FIR–filter
right |frame| Non-recursive digital filter (FIR filter) M order \text{Definition:} If all feedback coefficients b_{\mu} = 0 , one speaks of one non-recursive filter. In the English language literature, the term FIR filter (Finite Impulse Response) is also used for this.
The following applies to the order M applies:
- The output value y_ν depends only on the current and the previous M input values:
- y_\nu = \sum\limits_{\mu = 0}^M {a_\mu \cdot x_{\mu - \nu } } .
- Time-discrete impulse response with 〈x_ν〉= 〈1,\ 0,\ 0,\ 0,\ 0,\ 0,\ 0, \text{...}〉:
- 〈h_\mu〉= 〈a_0,\ a_1,\ \text{...},\ a_M〉 .
\text{Example 1:} A two-way channel where
- the signal on the main path arrives undamped compared to the input signal but is delayed by 2\ \rm µ s arrives with a delay, and
- at 4\ \rm µ s distance – so absolutely at time t = 6\ \rm µ s – follows an echo with half the amplitude,
can be simulated by a non-recursive filter according to the sketch above, whereby the following parameter values must be set:
- M = 3,\quad T_{\rm A} = 2\;{\rm{µ s} },\quad a_{\rm 0} = 0,\quad a_{\rm 1} = 1, \quad a_{\rm 2} = 0, \quad a_{\rm 3} = 0.5.
\text{Example 2:} Consider a non-recursive filter with the filter coefficients a_0 = 1,\hspace{0.5cm} a_1 = 2,\hspace{0.5cm} a_2 = 1. [[Datei:P_ID608__Sto_Z_5_3.png|right|frame|Nichtrekursives Filter]] '''(1)''' The conventional impulse response is: h(t) = \delta (t) + 2 \cdot \delta ( {t - T_{\rm A} } ) + \delta ( {t - 2T_{\rm A} } ). <br> ⇒ discrete-time impulse response: 〈h_\mu〉= 〈1,\ 2,\ 1〉 . '''(2)''' The frequency response H(f) is the Fourier transform of h(t). By applying the displacement theorem: :'"`UNIQ-MathJax9-QINU`"' '''(3)''' It follows that the '''time-discrete step response''' 〈\sigma_ν〉 tends to become 4 for large \nu. '''(4)''' The discrete-time convolution of the input sequence \left\langle \hspace{0.05cm}{x_\nu } \hspace{0.05cm}\right\rangle = \left\langle {\;1,\;0,\;0,\;0,\;1,\;0,\;0,\;0,\;\text{...} } \hspace{0.05cm} \right\rangle with \left\langle \hspace{0.05cm}{h_\nu } \hspace{0.05cm}\right\rangle = \left\langle \hspace{0.05cm}{1, \ 2,\ 1 } \hspace{0.05cm}\right\rangle results :'"`UNIQ-MathJax10-QINU`"' '''(5)''' The discrete-time convolution of the input sequence \left\langle \hspace{0.05cm}{x_\nu } \hspace{0.05cm}\right\rangle = \left\langle {\;1,\;1,\;0,\;0,\;1,\;0,\;0,\;0,\;\text{...} } \hspace{0.05cm} \right\rangle with \left\langle \hspace{0.05cm}{h_\nu } \hspace{0.05cm}\right\rangle = \left\langle \hspace{0.05cm}{1, \ 2,\ 1 } \hspace{0.05cm}\right\rangle results :'"`UNIQ-MathJax11-QINU`"' <div style="clear:both;"> </div> </div> ==='"`UNIQ--h-4--QINU`"'Recursive filter ⇒ IIR filter === <div class="bluebox"> [[Datei:P_ID607__Sto_A_5_3.png|right|frame|First order recursive filter]] \text{Definition:} *If at least one of the feedback coefficients is b_{\mu} \ne 0, then this is referred to as a '''recursive filter''' (see graphic on the right). The term '''IIR filter''' (''Infinite Impulse Response'') is also used for this, particularly in the English-language literature. This filter is dealt with in detail in the trial implementation. *If all forward coefficients are also identical a_\mu = 0 with the exception of a_0, a '''purely recursive filter''' is available (see graphic on the left). [[Datei:P_ID554__Sto_T_5_2_S3_neu.png|left|frame| Purely recursive first order filter]] <div style="clear:both;"> </div> </div> Im Folgenden beschränken wir uns auf den Sonderfall „Rein rekursives Filter erster Ordnung”. Dieses Filter weist folgende Eigenschaften auf: *Der Ausgangswert y_ν hängt (indirekt) von unendlich vielen Eingangswerten ab: :'"`UNIQ-MathJax12-QINU`"' *Dies zeigt die folgende Rechung: :'"`UNIQ-MathJax13-QINU`"' *Die zeitdiskrete Impulsantwort ist definitionsgemäß gleich der Ausgangsfolge, wenn am Eingang eine einzelne „Eins” bei t =0 anliegt. :'"`UNIQ-MathJax14-QINU`"' <div class="bluebox"> \text{Fazit:} Bei einem rekursiven Filter reicht die (zeitdiskrete) Impulsantwort schon mit M = 1 bis ins Unendliche: *Aus Stabilitätsgründen muss b_1 < 1 gelten. *Bei b_1 = 1 würde sich die Impulsantwort h(t) bis ins Unendliche erstrecken und bei b_1 > 1 würde h(t) sogar bis ins Unendliche anklingen. *Bei einem solchen rekursiven Filter erster Ordnung ist jede einzelne Diraclinie genau um den Faktor b_1 kleiner als die vorherige Diraclinie: :'"`UNIQ-MathJax15-QINU`"' <div style="clear:both;"> </div> </div> <div class="greybox"> [[Datei:Sto_T_5_2_S3_version2.png |frame| Zeitdiskrete Impulsantwort | rechts]] \text{Beispiel 3:} Die nebenstehende Grafik zeigt die zeitdiskrete Impulsantwort 〈\hspace{0.05cm}h_\mu\hspace{0.05cm}〉 eines rekursiven Filters erster Ordnung mit den Parametern a_0 = 1 und b_1 = 0.6. *Der (zeitdiskrete) Verlauf ist exponentiell abfallend und erstreckt sich bis ins Unendliche. *Das Verhältnis der Gewichte zweier aufeinanderfolgender Diracs ist jeweils b_1 = 0.6. <div style="clear:both;"> </div> </div> ==='"`UNIQ--h-5--QINU`"'Rekursives Filter als Sinus–Generator=== [[Datei:P_ID622__Sto_A_5_4.png|right|frame|Vorgeschlagene Filterstruktur '''ändern auf''' T_{\rm A}]] Die Grafik zeigt ein digitales Filter zweiter Ordnung, das zur Erzeugung einer zeitdiskreten Sinusfunktion auf einem digitalen Signalprozessor (DSP) geeignet ist, wenn die Eingangsfolge \left\langle \hspace{0.05cm} {x_\nu } \hspace{0.05cm}\right\rangle eine (zeitdiskrete) Diracfunktion ist: :'"`UNIQ-MathJax16-QINU`"' Die fünf Filterkoeffizienten ergeben sich aus der [https://de.wikipedia.org/wiki/Z-Transformation Z-Transformation]: :'"`UNIQ-MathJax17-QINU`"' Nach Umsetzung dieser Gleichung durch ein rekursives Filter zweiter Ordnung erhält man folgende Filterkoeffizienten: :'"`UNIQ-MathJax18-QINU`"' *Auf die Filterkoeffizienten a_0 und a_2 kann verzichtet werden und b_2=-1 hat einen festen Wert. *Die Kreisfrequenz \omega_0 der Sinusschwingung wird also nur durch a_0 und a_0 festelegt. <div class="greybox"> \text{Beispiel 3:} Es gelte a_1 = 0.5, b_1 = \sqrt 3, x_0 = 1 und x_{\nu \hspace{0.05cm}\ne\hspace{0.05cm} 0} = 0. '''(1)''' Dann gilt für die Ausgangswerte y_\nu zu den Zeitpunkten \nu \ge 0:<br> :* y_0 = 0; :* y_1 = 0.5 ⇒ die „1” am Eingang wirkt sich wegen a_0= 0 am Ausgang erst zum Zeitpunkt \nu = 1 aus; :* y_2 = b_1 \cdot y_1 - y_0 = {\sqrt 3 }/{2} \approx 0.866 ⇒ bei \nu = 2 wird auch der rekursive Teil des Filters wirksam; :* y_3 = \sqrt 3 \cdot y_2 - y_1 = \sqrt 3 \cdot {\sqrt 3 }/{2} - {1}/{2} = 1 ⇒ für \nu \ge 2 ist das Filter rein rekursiv: y_\nu = b_1 \cdot y_{\nu - 1} - y_{\nu - 2}; :* y_4 = \sqrt 3 \cdot y_3 - y_2 = \sqrt 3 \cdot 1 - {\sqrt 3 }/{2} = {\sqrt 3 }/{2}; :* y_5 = \sqrt 3 \cdot y_4 - y_3 = \sqrt 3 \cdot {\sqrt 3 }/{2} - 1 = 0.5; :* y_6 = \sqrt 3 \cdot y_5 - y_4 = \sqrt 3 \cdot {1}/{2} - {\sqrt 3 }/{2} = 0; :* y_7 = \sqrt 3 \cdot y_6 - y_5 = \sqrt 3 \cdot 0 - {1}/{2} = - 0.5. '''(2)''' Durch Fortsetzung des rekursiven Algorithmuses erhält man für große \nu–Werte: y_\nu = y_{\nu - 12} ⇒ T_0/T_{\rm A}= 12. <div style="clear:both;"> </div> </div> =='"`UNIQ--h-6--QINU`"'Versuchsdurchführung== [[Datei:Exercises_binomial_fertig.png|right]] *Wählen Sie zunächst die Nummer '''1''' ... '''10''' der zu bearbeitenden Aufgabe. *Eine Aufgabenbeschreibung wird angezeigt. Die Parameterwerte sind angepasst. *Lösung nach Drücken von „Musterlösung”. *Die Nummer '''0''' entspricht einem „Reset”: Gleiche Einstellung wie beim Programmstart. <br clear="all"> <div class="bluebox"> '''(1)''' Die Filterkoeffizienten seien a_0=0.25, a_1=0.5, a_2=0.25, b_1=b_2=0. Um welches Filter handelt es sich? <br> Interpretieren Sie die Impulsantwort 〈h_ν〉, die Sprungantwort 〈\sigma_ν〉 und die Rechteckantwort 〈\rho_ν^{(2, 8)}〉 jeweils in zeitdiskreter Darstellung. <div style="clear:both;"> </div> </div> :* Aufgrund der fehlenden b–Koeffizienten handelt es sich um ein nichtrekursives digitales Filter ⇒ '''FIR–Filter''' (''Finite Impulse Response''). :* Die Impulsantwort setzt sich aus M+1=3 Diraclinien gemäß den a–Koeffizienten zusammen: 〈h_ν〉= 〈a_0, \ a_1,\ a_2〉= 〈0.25, \ 0.5,\ 0.25,\ 0, \ 0, \ 0,\text{...}〉 . :* Die Sprungantwort lautet: 〈\sigma_ν〉= 〈0.25, \ 0.75,\ 1,\ 1, \ 1, \ 1,\text{...}〉 . Der Endwert ist gleich dem Gleichsignalübertragungsfaktor H(f=0)=a_0+a_1+a_2 = 1. :* Die Verzerrungen bei Anstieg und Abfall erkennt man auch aus der Rechteckantwort 〈\rho_ν^{(2, 8)}〉= 〈0,\ 0, 0.25, \ 0.75,\ 1,\ 1, \ 1, \ 1, \ 1, \ 0.75, \ 0.25, \ \text{...}〉. <div class="bluebox"> '''(2)''' Wie unterscheiden sich die Ergebnisse mit a_2=-0.25? <div style="clear:both;"> </div> </div> :* Unter Berücksichtigung von H(f=0)= 0.5 ergeben sich vergleichbare Folgen ⇒ Sprungantwort: 〈\sigma_ν〉= 〈0.25, \ 0.75,\ 0.5,\ 0.5, \ 0.5, \ 0.5,\text{...}〉 . <div class="bluebox"> '''(3)''' Nun seien die Filterkoeffizienten a_0=1, b_1=0.9 sowie a_1=a_2= b_2=0. Um welches Filter handelt es sich? Interpretieren Sie die Impulsantwort 〈h_ν〉. <div style="clear:both;"> </div> </div> :* Es handelt sich um ein rekursives digitales Filter ⇒ '''IIR–Filter''' (''Infinite Impulse Response'') erster Ordnung. Es ist das zeitdiskrete Analogon zum RC–Tiefpass. :* Ausgehend von h_0= 1 gilt h_1= h_0 \cdot b_0= 0.9, h_2= h_1 \cdot b_0= b_0^2=0.81, h_3= h_2 \cdot b_0= b_0^3=0.729, usw. ⇒ 〈h_ν〉 reicht bis ins Unendliche. :* Impulsantwort h(t) = {\rm e}^{-t/T} mit T: Schnittpunkt (Tangente bei t=0, Abszisse) ⇒ h_\nu= h(\nu \cdot T_{\rm A}) = {\rm e}^{-\nu/(T/T_{\rm A})} mit T/T_{\rm A} = 1/(h_0-h_1)= 10. :* Also: Die Werte der zeitkontinuierlichen unterscheiden sich von der zeitdiskreten Impulsantwort. Hierfür ergeben sich die Werte 1.0, \ 0.9048,\ 0.8187 ... <div class="bluebox"> '''(4)''' Die Filtereinstellung wird beibehalten. Interpretieren Sie die Sprungantwort 〈h_ν〉 und die Rechteckantwort 〈\rho_ν^{(2, 8)}〉. Welcher Wert ergibt sich für H(f=0)? <div style="clear:both;"> </div> </div> :* Die Sprungantwort ist das Integral über die Impulsantwort: \sigma(t) = T \cdot (1-{\rm e}^{-t/T}) ] ⇒ \sigma_\nu= 10 \cdot (1-{\rm e}^{-\nu/10}) ⇒ \sigma_0=1, \sigma_1=1.9, \sigma_2=2.71, ... :* Für große \nu–Werte tendiert die (zeitdiskrete) Sprungantwort gegen den Gleichsignalübertragungsfaktor H(f=0)= 10: \sigma_{40}=9.867, \sigma_{50}=9.954, \sigma_\infty=10. :* Die Rechteckantwort 〈\rho_ν^{(2, 8)}〉 steigt mit einer Verzögerung von 2 in gleicher Weise an wie 〈\sigma_ν〉. Im Bereich \nu \ge 8 fallen die \rho_ν– Werte exponentiell ab. <div class="bluebox"> '''(5)''' Wir betrachten weiterhin das Filter mit a_0=1, b_1=0.9, a_1=a_2= b_2=0. Wie lautet die Ausgangsfolge 〈y_ν〉 für die Eingangsfolge 〈x_ν〉= 〈1,\ 0,\ -0.5〉? <br> ''Hinweis'': Die Aufgabe lässt sich ebenfalls mit diesem Programm lösen, obwohl die hier betrachtete Konstellation nicht direkt einstellbar ist. <div style="clear:both;"> </div> </div> :* Man behilft sich, indem man den Koeffizienten a_2=-0.5 setzt und dafür die Eingangsfolge auf 〈x_ν〉= 〈1,\ 0,\ 0,\ \text{ ...}〉 ⇒ „Diracfunktion” reduziert. :* Die tatsächliche Impulsantwort dieses Filters (mit a_2=0) wurde in Aufgabe '''(3)''' ermittelt: h_0= 1, h_1= 0.9, h_2= 0.81, h_3= 0.729, h_4= 0.646. :* Die Lösung dieser Aufgabe lautet somit: y_0 = h_0= 1, y_1= h_1= 0.9, y_2 =h_2-h_0/2= 0.31, y_3 =h_3-h_1/2= 0.279, y_4 =h_4-h_2/2= 0.251. :* Vorsicht: Sprungantwort und Rechteckantwort beziehen sich nun auf das fiktive Filter (mit a_2=-0.5) und nicht auf das eigentliche Filter (mit a_2=0). <div class="bluebox"> '''(6)''' Betrachten und interpretieren Sie die Impulsanwort und die Sprungantwort für die Filterkoeffizienten a_0=1, b_1=1, a_1=a_2= b_2=0. <div style="clear:both;"> </div> </div> :* '''Das System ist instabil''': Eine zeitdiskrete Diracfunktion am Eingang (zur Zeit t=0) bewirkt im Ausgangsignal unendlich viele Diracs gleicher Höhe. :* Eine zeitdiskrete Sprungfunktion am Eingang bewirkt im Ausgangsignal unendlich viele Diracs mit monoton ansteigenden Gewichten (bis ins Unendliche). <div class="bluebox"> '''(7)''' Betrachten und interpretieren Sie Impulsanwort und Sprungantwort für die Filterkoeffizienten a_0=1, b_1=-1, a_1=a_2= b_2=0. <div style="clear:both;"> </div> </div> :* Im Gegensatz zur Aufgabe '''(6)''' sind hier die Gewichte der Impulsantwort 〈h_ν〉 nicht konstant gleich 1, sondern alternierend \pm 1. Das System ist ebenfalls instabil. :* Bei der Sprunganwort 〈\sigma_ν〉 wechseln sich dagegen die Gewichte alternierend zwischen 0 (bei geradem \nu) und 1 (bei ungeradem \nu) ab. <div class="bluebox"> '''(8)''' Wir betrachten den „Sinusgenerator”: a_1=0.5, b_1=\sqrt{3}= 1.732, b_2=-1. Vergleichen Sie die Impulsantwort mit den berechneten Werten in \text{Beispiel 4}. <br> Wie beinflussen die Parameter a_1 und b_1 die Periodendauer T_0/T_{\rm A} und die Amplitude A der Sinusfunktion? <div style="clear:both;"> </div> </div> :* 〈x_ν〉=〈1, 0, 0, \text{...}〉 ⇒ 〈y_ν〉=〈0, 0.5, 0.866, 1, 0.866, 0.5, 0, -0.5, -0.866, -1, -0.866, -0.5, 0, \text{...}〉 ⇒ '''Sinus''', Periode T_0/T_{\rm A}= 12, Amplitude 1. :* Die Vergrößerung/Verkleinerung von b_1 führt zur größeren/kleineren Periodendauer T_0/T_{\rm A} und zur größeren/kleineren Amplitude A. Es muss b_1 < 2 gelten. :* a_1 beinflusst nur die Amplitude, nicht die Periodendauer. Für a_1 gibt es keine Wertebegrenzumg. Bei negativem a_1 ergibt sich die Minus–Sinusfunktion. :* '''Gibt es hier keine Diskrepanz zu h(t) wertkontinuierlich ???''' <div class="bluebox"> '''(9)''' Die Grundeinstellung bleibt erhalten. Mit welchen a_1 und b_1 ergibt sich eine Sinusfunktion mit Periodendauer T_0/T_{\rm A}=16 und Amplitude A=1? <div style="clear:both;"> </div> </div> :* Durch Probieren erreicht man mit b_1= 1.8478 tatsächlich die Periodendauer T_0/T_{\rm A}=16. Allerdings erhöht sich dadurch die Amplitude auf A=1.307. :* Die Anpassung des Parameters a_1= 0.5/1.307=0.3826 führt dann zur gewünschten Amplitude A=1. :* Oder man kann das auch wie im Beispiel berechnen: b_1 = 2 \cdot \cos ( {2{\rm{\pi }}\cdot{T_{\rm A}}/{T_0 }})= 2 \cdot \cos (\pi/8)=1.8478, a_1 = \sin (\pi/8)=0.3827. <div class="bluebox"> '''(10)''' Wir gehen weiter vom „Sinusgenerator” aus. Welche Modifikationen muss man vornehmen, um damit einen „Cosinus” zu generieren? <div style="clear:both;"> </div> </div> :* Mit a_1=0.5, b_1=\sqrt{3}= 1.732, b_2=-1 sowie 〈x_ν〉=〈1, 1, 1, \text{...}〉 ist die Ausgangsfolge 〈y_ν〉 das zeitdiskrete Analogon der Sprungantwort \sigma(t)$.
- Es fehlen noch einige Statements
Zur Handhabung des Applets
Über die Autoren
Dieses interaktive Berechnungstool wurde am Lehrstuhl für Nachrichtentechnik der Technischen Universität München konzipiert und realisiert.
- Die erste Version wurde 2005 von Bettina Hirner im Rahmen ihrer Diplomarbeit mit „FlashMX–Actionscript” erstellt (Betreuer: Günter Söder).
- 2020 wurde das Programm von Andre Schulz (Bachelorarbeit LB, Betreuer: Benedikt Leible und Tasnád Kernetzky ) unter „HTML5” neu gestaltet.