English

not defined

no text concepts found

Digital filters Honza Černocký, ÚPGM Aliases • • • • Numerical filters Discrete systems Discrete-time systems etc. 2 What for ? Processing of signals • Emphasizing • Attenuating • Detecting 3 Emphasis • Basses – low frequencies 4 Emphasis • Trebles – high frequencies 5 Emphasis • Telephone band 300-3400 Hz 6 Attenuating • A signal contamined by 1kHz and its cleaning by a sharp band-stop 7 Detection • Couple of peaks in noise 8 Detection • Matched filter 9 • A nice app: RICHTER Jiří. Echo-Based Distance Measurement on Mobile Phone, BP FIT, 2014/2015 10 What will be needed ? • Sampled signal – At some sampling frequency (most often 8kHz, 16kHz, 44.1kHz (CD), 48kHz, 96kHz) • For visualization, will show it as continuous (stem vs. plot) • For ISS no special formats (MP3, OGG, WAV), but a plain RAW – No header, sequence of 16-bit shorts … wire.c 11 What next ? • Only 3 simple operations – Multiplication with a constant – Summation (addition) * + – Shift 12 Shift ? Only to the past ! x[n] n „now“, „presence“ past future 13 Shift off-line x[n-1] x[n] n-1 n … just changing the value of the pointer. 14 Shift on-line • We have only x[n] • Function with a memory float filter (float xn) { static float xn1, xn2; … some processing … xn2 = xn1; xn1 = xn; return something; } 15 A simple filter y[n] = b0x[n] + b1x[n-1] + b2x[n-2] + b3x[n-3] … difference equation 16 How does it work ? 17 Implementation off-line • Allocation of space for the output signal. • Then absolutely verbatim re-writing of the difference equation fir_offline.c 18 Implementation on-line • A function for filtering is called for every sample • It must memorize the past samples fir_online.c 19 What will it do for … b0 b1 b2 b3 0.25 0.25 1 2 0.25 -0.25 0 0 0.25 0.25 0 0 0.25 -0.25 0 0 0 0 0 1 20 Another possible implementation… 21 How to represent a filter ? y[n] = b0x[n] + b1x[n-1] + b2x[n-2] + b3x[n-3] … difference equation b0 x[n] z-1 b1 z-1 b2 z-1 b3 S y[n] … scheme 22 Impulse response • Reaction to unit impulse 0 0 0 0 0 1 0 0 0 0 0 0 23 Finite / infinite impulse response? 24 Convolution … demo on our filter 25 It works also the other way round (convolution is commutative…) … demo on our filter – homework ? 26 Convolution - summary • Flip the impulse response • Shift it to given „n“ • Mutliply • Add • Write the results … „paper strip“ method – demo 27 Making use of filter output • Feedback – recursive filters 28 Diference equation y[n] = b0x[n] + b1x[n-1] + b2x[n-2] + b3x[n-3] - a1y[n-1] - a2y[n-2] - a3y[n-3] … why not a0 ? … and why do the feed-back coefficients have negative sign ? 29 Scheme b0 x[n] S y[n] z-1 b1 -a1 z-1 z-1 b2 -a2 z-1 z-1 b3 -a3 z-1 30 Implementation off-line • Digging also in the old outputs … … iir_offline.c 31 Implementation on-line • The function has to memorize also the past outputs. … iir_online.c 32 Impulse response • For example for a simple, purely recursive filter (nothing done with the input) x[n] S y[n] -a1 z-1 • Infinite impulse response - IIR 33 Stability • Mathematically „Bounded Input Bounded Output“ • Popularly: “if reasonable stuff on the input expecting reasonable stuff on the output” 34 Stability of FIR 35 Stability of IIR 36 First order IIR x[n] S y[n] -a1 z-1 • What must be respected for a1? • And how about for more complicated IIR filters ? 37 General filter 38 General filter • Order of input Q • Order of output P Difference equation y[n] = b0x[n] + b1x[n-1] + … + bQx[n-Q] - a1y[n-1] + … + aPy[n-P] 39 Implementation off-line • … still the same, this time with cycles iirbig_offline.c 40 Implementation on-line • The cycles must run backward (otherwise the old values rewrite the new ones) • The cycle for the output must stop at index 1. • „Trash“ memory fields, that will never be used – make things easier and save us some „if“s. iirbig_online.c 41 Frequency responses • For FIR filters: • The coefficients of the filter (resp. of its impulse response) act as a machining tool – the result will be similar 42 Tests • 2s of chamber „a“ (440 Hz) plus some noise See the Matlab file matlab_filtry.m (section “filcy atd”) 43 Mason’s float • 20 equal samples valued 1/20 • Smoothing, less noise => Low-pass 44 Mason’s superfloat • 181 equal samples valued 1/181 • Smoothing, less noise but almost no signal left => Even more low-pass 45 Cutter with a dented edge => High pass 46 Band-pass ? • We want to select 440 Hz. • The output will resemble the impulse response … … listen to the result also on a speech file. 47 Frequency response more precisely • Currently, interested only in magnitude • i.e. how individual frequencies are amplified / attenuated • … not how they are shifted See the last part of matlab_filtry.m 48 Method 1 – measure ! filtr 49 Method 2 – use impulse response • Generate impulse response and perform its frequency transform • But the impulse response can be loooonnnnng. 50 The ultimate solution z-transform Basic tools: x[n] => X(z) a x[n] => a X(z) x[n-k] => X(z) z-k 51 Difference equation => transfer function y[n] = b0x[n] + b1x[n-1] + … + bQx[n-Q] - a1y[n-1] + … + aPy[n-P] 52 Transfer function => frequency response z => ej2pf • f is normalized by the sampling frequency • Will obtain a complex number, must take only its magnitude. • Matlab: by hand or with freqz 53 Relation of time and spectra y[n] = x[n] * h[n] (convolution) Y(f) = X(f) H(f) (mutliplication) • Attention, must multiply the complex numbers in spectra ! 54 Summary Describing the filter by • Scheme • Difference equation • Impulse response • Transfer function • Frequency response 55 Summary II. • Types of filters – FIR – IIR • Implementation – Mutliplication – Summation – Shifts • Off-line • On-line 56 Summary III. • Computing the frequency response – Ugly: • „measurement“ • Analysis of h[n] – Nicely • Transfer function: replacing z by ej2pf • f is normalized frequency 57 TODO’s • • • • Phase – shifts of signals Stability for more complex IIR filters Design of filters Learning filters on data 58 The END 59