Salta al contenuto
Note per Studenti Esercizio - Laboratorio 2, filtri notch e audio

Esercizio - Laboratorio 2, filtri notch e audio

In questa pagina 5

Testo (laboratorio 2 del corso Multimedia Signal Processing, UniPD; lezione 14). Un file audio contiene un messaggio disturbato da toni sinusoidali aggiunti. Si vogliono togliere i toni, in due passi: (a) determinare dallo spettrogramma le frequenze dei disturbi; (b) filtrarle con filtri FIR notch. Più precisamente:

  1. leggere il file, plottare lo spettrogramma normalizzato (frequenza in unità di π\pi rad/campione) e leggere le frequenze dei toni;
  2. ricavare la funzione di sistema di un filtro FIR a tre coefficienti h={1,A,1}h=\{1,A,1\} che annulla un coseno e normalizzarla a guadagno 11 in continua (ω^=0\hat\omega=0);
  3. progettare un filtro per ogni tono, metterli in cascata (convoluzione), tracciare modulo e fase della risposta totale;
  4. filtrare l'audio, plottare lo spettrogramma dell'uscita e riascoltare: l'operazione dà risultati soddisfacenti?

Dati. Il file SunshineSquare.wav sta nella cartella del laboratorio 2 su Moodle. È un file mono a 1616 bit, Fs=11025F_s=11025 Hz, 119 071119\,071 campioni (10,810{,}8 s). I risultati sotto sono ottenuti eseguendo il codice su questo file.

Teoria usata: Filtri notch e applicazioni dei filtri FIRUno zero di H(z) sulla circonferenza unitaria in z0 = e^{j w0} annulla (a regime) le sinusoidi alla pulsazione w0. Per eliminare un coseno servono i due zeri coniugati: H(z) = (1 - e^{jw0} z^-1)(1 - e^{-jw0} z^-1) = 1 - 2 cos(w0) z^-1 + z^-2, cioè h = {1, -2cos w0, 1}, un FIR simmetrico di tipo I (ritardo 1). Si normalizza dividendo per 2 - 2cos(w0) per avere guadagno 1 in continua; più toni si eliminano mettendo in cascata (convoluzione) un filtro per ogni tono. Segue una panoramica delle applicazioni dei FIR (equalizzazione audio), vantaggi (fase lineare, stabilità) e costo (N moltiplicazioni per campione, molte più di un IIR).Filtri notch e applicazioni dei filtri FIR →, Risposta in frequenza dei sistemi FIRSe all'ingresso di un FIR c'è un esponenziale complesso A e^{jφ} e^{jω̂n} (per ogni n), l'uscita è lo stesso esponenziale moltiplicato per H(ω̂) = Σ b_k e^{-jω̂k}: la frequenza non cambia, ampiezza e fase sono modificate da |H| (guadagno) e ∠H (sfasamento). Per sovrapposizione si trattano somme di sinusoidi. H è periodica di periodo 2π e, per coefficienti reali, hermitiana (|H| pari, fase dispari). La cascata ha H = H1·H2. Esempi: ritardo (fase lineare), differenza prima (passa-alto), {1,2,1} (passa-basso), media mobile di L punti (Dirichlet: |H| = |sin(Lω̂/2)/(L sin(ω̂/2))|, fase lineare -(L-1)ω̂/2).Risposta in frequenza dei sistemi FIR →, Sistemi LTI e convoluzione discretaUn sistema lineare e tempo-invariante (LTI) è completamente descritto dalla sua risposta impulsiva h[n]: y[n] = Σ x[k] h[n-k] = x[n] * h[n] (somma di convoluzione). Si ricava scomponendo x in impulsi traslati e usando linearità e invarianza. La convoluzione è commutativa, associativa e distributiva; una cascata di LTI equivale a un solo filtro con h = h1 * h2 e l'ordine non conta. Se x ha lunghezza N e h lunghezza L, y ha lunghezza N+L-1. Si calcola col metodo della finestra scorrevole o a tabella. I FIR sono LTI; altri sistemi (n·x[n], x[-n], x²) non lo sono.Sistemi LTI e convoluzione discreta →, Trasformata di Fourier a tempo breve e spettrogrammaPer un segnale lungo il cui contenuto in frequenza cambia nel tempo si calcolano tante DFT brevi: X[k, l] = sum_{n=0}^{L-1} w[n] x[l+n] e^{-j2pi kn/N}, con finestra di analisi w di lunghezza L, istante l = m R (passo R, di solito L/2) e DFT a N >= L punti. Il modulo (o i dB) di X[k, l] come immagine tempo-frequenza è lo spettrogramma. La finestra impone un compromesso: lunga = ottima risoluzione in frequenza (Delta w circa 8pi/L per Hann) ma transizioni temporali sfocate su circa L/2 campioni; corta = buona localizzazione nel tempo ma righe vicine fuse. Si provano più lunghezze.Trasformata di Fourier a tempo breve e spettrogramma →.

Passo 1: le frequenze dei toni

Con le impostazioni del corso (finestra di Hamming di 256256 campioni, 50%50\% di sovrapposizione, nfft=256) lo spettrogramma ha una riga ogni Fs/256=43,07F_s/256=43{,}07 Hz, cioè ogni 0,0078π0{,}0078\pi. Mediato nel tempo mostra tre righe orizzontali molto marcate (da 4040 a 4646 dB sopra il resto) nei canali di 1593,51593{,}5, 3143,83143{,}8 e 4737,34737{,}3 Hz, cioè a 0,289π0{,}289\pi, 0,570π0{,}570\pi, 0,859π0{,}859\pi. Il risultato è limitato dalla risoluzione del grafico: la FFT dell'intero file (119 071119\,071 campioni) dà f1=1575,0 Hz,f2=3150,0 Hz,f3=4725,0 Hz,f_1=1575{,}0\ \mathrm{Hz},\quad f_2=3150{,}0\ \mathrm{Hz},\quad f_3=4725{,}0\ \mathrm{Hz}, cioè ω^1=0,2857π\hat\omega_1=0{,}2857\pi, ω^2=0,5714π\hat\omega_2=0{,}5714\pi, ω^3=0,8571π\hat\omega_3=0{,}8571\pi: sono esattamente Fs/7F_s/7, 2Fs/72F_s/7, 3Fs/73F_s/7, cioè ω^=2π7,4π7,6π7\hat\omega=\frac{2\pi}{7},\frac{4\pi}{7},\frac{6\pi}{7}. Le frequenze della soluzione del corso (0,2857π0{,}2857\pi, 0,5709π0{,}5709\pi, 0,8573π0{,}8573\pi) sono quelle lette dal grafico: la prima è esatta, la seconda e la terza sono a 0,0005π0{,}0005\pi e 0,0002π0{,}0002\pi da quelle vere. Il fatto che siano multipli di 2π7\frac{2\pi}7 non è un caso e si userà nel passo 3.

Com'è fatto il file:

  • i toni sono presenti solo nell'ultimo tratto, da circa 7,57{,}5 s alla fine (10,810{,}8 s); nei primi 7,57{,}5 s c'è solo il messaggio. Nel tratto 88-10,510{,}5 s l'ampiezza dei tre toni (stimata con la DFT del tratto) è 1,1631{,}163, 0,2870{,}287, 0,4150{,}415 (scala in cui il fondo scala è 11): il primo tono da solo supera il fondo scala, ma i tre toni sono sfasati e la loro somma resta sotto (picco del file 0,999970{,}99997);
  • il messaggio ha valore efficace 0,01440{,}0144 (stimato nei primi 66 s, senza continua) e il tratto con i toni 0,8970{,}897: i toni sono circa 3636 dB sopra il messaggio, che per questo non si sente;
  • il file ha una componente continua di 0,0360{,}036 (maggiore del valore efficace del messaggio);
  • nel messaggio (primi 66 s, senza continua) la potenza è concentrata nelle basse frequenze: il 50%50\% sotto 541541 Hz (0,098π0{,}098\pi) e il 90%90\% sotto 15471547 Hz (0,28π0{,}28\pi).

Passo 2: il filtro per un tono

Un coseno è somma di due esponenziali a ±ω^0\pm\hat\omega_0 (Numeri complessi, formula di Eulero ed esponenziali complessiUn numero complesso si scrive in forma cartesiana a+jb o polare |x|e^{jφ}; il prodotto moltiplica i moduli e somma le fasi. La formula di Eulero e^{jα}=cos α + j sin α lega esponenziali e sinusoidi e permette di trattare tutti i segnali del corso come somme di esponenziali complessi e^{(σ+jω)t}.Numeri complessi, formula di Eulero ed esponenziali complessi →); servono quindi due zeri in z1,2=e±jω^0z_{1,2}=e^{\pm j\hat\omega_0}: H(z)=(1−ejω^0z−1)(1−e−jω^0z−1)=1−2cos⁡(ω^0) z−1+z−2.H(z)=(1-e^{j\hat\omega_0}z^{-1})(1-e^{-j\hat\omega_0}z^{-1})=1-2\cos(\hat\omega_0)\,z^{-1}+z^{-2}. Si sono usate ejω^0+e−jω^0=2cos⁡ω^0e^{j\hat\omega_0}+e^{-j\hat\omega_0}=2\cos\hat\omega_0 e ejω^0e−jω^0=1e^{j\hat\omega_0}e^{-j\hat\omega_0}=1. I coefficienti sono b0=1b_0=1, b1=A=−2cos⁡ω^0b_1=A=-2\cos\hat\omega_0, b2=1b_2=1, cioè hh = [1, AA, 1]. Il guadagno in continua è H(1)=2−2cos⁡ω^0H(1)=2-2\cos\hat\omega_0, quindi la versione normalizzata è h={1,A,1}/(2−2cos⁡ω^0)h=\{1,A,1\}/(2-2\cos\hat\omega_0).

tono ω^i/π\hat\omega_i/\pi Ai=−2cos⁡ω^iA_i=-2\cos\hat\omega_i 2−2cos⁡ω^i2-2\cos\hat\omega_i hih_i normalizzata
1 0.2857 −1.2470-1.2470 0.75300.7530 {1.3281,−1.6562,1.3281}\{1.3281,-1.6562,1.3281\}
2 0.5709 +0.4418+0.4418 2.44182.4418 {0.4095,0.1809,0.4095}\{0.4095,0.1809,0.4095\}
3 0.8573 +1.8024+1.8024 3.80243.8024 {0.2630,0.4740,0.2630}\{0.2630,0.4740,0.2630\}

Passo 3: la cascata

La risposta impulsiva della cascata è la convoluzione dei tre filtri: ha 3+3−1=53+3-1=5 coefficienti dopo due filtri e 5+3−1=75+3-1=7 dopo tre. hout={0.1430, 0.1426, 0.1427, 0.1432, 0.1427, 0.1426, 0.1430},∑hout[n]=1.h_{\rm out}=\{0.1430,\ 0.1426,\ 0.1427,\ 0.1432,\ 0.1427,\ 0.1426,\ 0.1430\},\qquad\sum h_{\rm out}[n]=1. Risultato notevole: i sette coefficienti sono praticamente uguali a 1/7=0.14291/7=0.1429 (scarto massimo 0.00040.0004). I tre toni sono infatti, come si è visto nel passo 1, i multipli 27π\frac27\pi, 47π\frac47\pi, 67π\frac67\pi, cioè gli zeri ej2πk/7e^{j2\pi k/7} di una media mobile a 7 punti. Il filtro è simmetrico (tipo I, Filtri FIR a fase lineare - tipi e zeriI FIR a fase lineare di ordine N si dividono in quattro tipi: I (N pari, h simmetrica), II (N dispari, simmetrica), III (N pari, antisimmetrica), IV (N dispari, antisimmetrica). Si scrive H = e^{-jwN/2} e^{jb} A(w), con A somma di coseni (tipi I e II) o di seni (III e IV). Dalla relazione H(z) = ±z^{-N} H(1/z) segue che gli zeri vengono in gruppi (z0, z0*, 1/z0, 1/z0*) e che ci sono zeri forzati: tipo II in z = -1, tipo III in z = 1 e z = -1, tipo IV in z = 1, tipo I nessuno. Quindi II non fa passa-alto, III non fa passa-basso né passa-alto, IV non fa passa-basso. Ogni tipo II, III, IV è un tipo I moltiplicato per (1+z^-1), (1-z^-2), (1-z^-1).Filtri FIR a fase lineare - tipi e zeri →), con fase lineare e ritardo 33 campioni; il modulo vale 00 nei tre zeri e 11 in continua.

Poiché le frequenze del corso sono arrotondate, gli zeri della cascata cadono a 0,2857π0{,}2857\pi, 0,5709π0{,}5709\pi, 0,8573π0{,}8573\pi (il modulo vale lì 10−1610^{-16}) e non esattamente sulle frequenze vere dei toni. Calcolato in 2π7,4π7,6π7\frac{2\pi}7,\frac{4\pi}7,\frac{6\pi}7 il modulo vale 5,2⋅10−55{,}2\cdot10^{-5} (−85,7-85{,}7 dB), 1,06⋅10−31{,}06\cdot10^{-3} (−59,5-59{,}5 dB), 2,5⋅10−42{,}5\cdot10^{-4} (−71,9-71{,}9 dB): il tono a frequenza intermedia è quello attenuato meno, perché è quello letto peggio dal grafico.

Grafico interattivo: Laboratorio 2: modulo della cascata dei tre notch (FIR del corso) e di tre notch IIR con r = 0,9 sulle stesse frequenze

La curva continua è il modulo della cascata del corso: tre zeri, e fra uno zero e l'altro i lobi laterali arrivano a 0,230{,}23 (cioè è una media mobile a 77 punti, il cui modulo è ∣sin⁡(7ω^/2)7sin⁡(ω^/2)∣\left|\frac{\sin(7\hat\omega/2)}{7\sin(\hat\omega/2)}\right|). Il guadagno a ω^=π\hat\omega=\pi è 0,1430{,}143; il guadagno è 0,810{,}81 a 0,1π0{,}1\pi e scende a 0,370{,}37 a 0,2π0{,}2\pi. La curva tratteggiata è la cascata di tre notch IIR del laboratorio 5 (Filtri IIR - definizione e confronto con i FIRUn filtro IIR (infinite impulse response) è un sistema LTI descritto da $y[n]=\sum_{\ell=1}^{N}a_\ell y[n-\ell]+\sum_{k=0}^{M}b_kx[n-k]$: l'uscita usa anche le uscite passate (retroazione), per questo si chiama ricorsivo. Con le condizioni di riposo iniziale è LTI, $H(z)=\frac{\sum b_kz^{-k}}{1-\sum a_\ell z^{-\ell}}$ è un rapporto di polinomi, l'ordine è $N$ (numero di poli) e la risposta impulsiva ha durata infinita. Nel primo ordine $y[n]=a_1y[n-1]+b_0x[n]$ si ha $h[n]=b_0a_1^nu[n]$, ROC $|z|>|a_1|$, stabile se $|a_1|<1$; il gradino dà $b_0\frac{1-a_1^{n+1}}{1-a_1}\to\frac{b_0}{1-a_1}$. Si implementa iterando l'equazione alle differenze, non con la convoluzione. Rispetto ai FIR gli IIR rispettano le stesse specifiche di modulo con ordine molto più basso, ma possono essere instabili e non hanno fase lineare. Progetto: per tentativi (notch), con la trasformazione $s\to z$ dai filtri analogici, o con ottimizzazione numerica.Filtri IIR - definizione e confronto con i FIR →) sulle stesse frequenze: resta vicina a 11 quasi dappertutto.

Passo 4: il codice

python
import numpy as np
from scipy.io import wavfile
from scipy.signal import spectrogram, lfilter, convolve, freqz

fs, xx = wavfile.read('SunshineSquare.wav')      # int16, fs = 11025
if xx.ndim > 1:
    xx = xx[:, 0]                                  # primo canale (qui il file e' mono)
xx = xx / 32768.0                                  # float in [-1, 1) (come soundfile.read)

# spettrogramma normalizzato (Hamming 256, 50 % di sovrapposizione, come nel corso)
f, t, Sxx = spectrogram(xx, fs, window=np.hamming(256), nfft=256, noverlap=128)
w_norm = f / (fs / 2)                              # in unita' di pi rad/campione

# frequenze lette dal corso (unita' di pi) e filtri notch normalizzati
w_toni = np.array([0.2857, 0.5709, 0.8573]) * np.pi

def notch(w0):
    A = -2 * np.cos(w0)
    return np.array([1, A, 1]) / (2 - 2 * np.cos(w0))     # guadagno 1 in continua

hh = [notch(w) for w in w_toni]
h_out = convolve(convolve(hh[0], hh[1]), hh[2])           # cascata = convoluzione

ww = np.linspace(-np.pi, np.pi, 201)
_, HH = freqz(h_out, 1, worN=ww)                          # modulo: np.abs(HH), fase: np.unwrap(np.angle(HH))

yy = lfilter(h_out, 1, xx)                                # filtraggio

def ampiezza_tono(s, w0):                                 # ampiezza stimata con la DFT del tratto
    k = np.arange(s.size)
    return 2 * abs(np.sum(s * np.exp(-1j * w0 * k))) / s.size
tratto = slice(int(8 * fs), int(10.5 * fs))               # tratto in cui i toni sono presenti
for w in 2 * np.pi * np.array([1, 2, 3]) / 7:
    print(w / np.pi, ampiezza_tono(xx[tratto], w), ampiezza_tono(yy[tratto], w))

Uscita ottenuta eseguendo il codice sul file del corso.

  • Ampiezze dei tre toni nel tratto 88-10,510{,}5 s: da 1,1631{,}163, 0,2870{,}287, 0,4150{,}415 nell'ingresso a 8,2⋅10−58{,}2\cdot10^{-5}, 3,0⋅10−43{,}0\cdot10^{-4}, 9,8⋅10−59{,}8\cdot10^{-5} nell'uscita, cioè attenuazioni di 83,083{,}0, 59,659{,}6 e 72,672{,}6 dB (coerenti con il modulo della cascata nelle tre frequenze vere, 85,785{,}7, 59,559{,}5, 71,971{,}9 dB).
  • Valore efficace nel tratto 88-10,510{,}5 s: da 0,8970{,}897 a 0,01000{,}0100, cioè −39-39 dB. Il valore efficace del messaggio nei primi 66 s è 0,01440{,}0144 in ingresso e 0,01090{,}0109 in uscita: l'uscita nel tratto con i toni (0,01000{,}0100) ha lo stesso ordine di grandezza dell'uscita senza toni, quindi i toni sono davvero spariti e resta il messaggio.
  • Sul file intero il valore efficace passa da 0,4760{,}476 a 0,0690{,}069 (−16,8-16{,}8 dB): quasi tutta l'energia del file (97,7%97{,}7\%) era nei tre toni.

Passo 5: il filtraggio è soddisfacente?

Versione ripasso

Passo 1 - frequenze. File SunshineSquare.wav: mono, Fs=11025F_s=11025 Hz, 10,810{,}8 s. Lo spettrogramma (Hamming 256256, nfft=256: una riga ogni 4343 Hz) mostra tre righe a 15931593, 31443144, 47374737 Hz; la FFT dell'intero file le dà esatte: 15751575, 31503150, 47254725 Hz, cioè ω^=2π7,4π7,6π7\hat\omega=\frac{2\pi}7,\frac{4\pi}7,\frac{6\pi}7 (0,2857π0{,}2857\pi, 0,5714π0{,}5714\pi, 0,8571π0{,}8571\pi). Il corso usa 0,2857π0{,}2857\pi, 0,5709π0{,}5709\pi, 0,8573π0{,}8573\pi. I toni ci sono solo da 7,57{,}5 s a 10,810{,}8 s e sono circa 3636 dB sopra il messaggio (il 97,7%97{,}7\% dell'energia del file).

Passo 2 - notch per un tono. Due zeri in e±jω^0e^{\pm j\hat\omega_0}: H(z)=1−2cos⁡(ω^0) z−1+z−2.H(z)=1-2\cos(\hat\omega_0)\,z^{-1}+z^{-2}. Il guadagno in continua è H(1)=2−2cos⁡ω^0H(1)=2-2\cos\hat\omega_0, quindi h={1,A,1}/(2−2cos⁡ω^0)h=\{1,A,1\}/(2-2\cos\hat\omega_0) con A=−2cos⁡ω^0A=-2\cos\hat\omega_0. Per i tre toni: {1,3281; −1,6562; 1,3281}\{1{,}3281;\,-1{,}6562;\,1{,}3281\}, {0,4095; 0,1809; 0,4095}\{0{,}4095;\,0{,}1809;\,0{,}4095\}, {0,2630; 0,4740; 0,2630}\{0{,}2630;\,0{,}4740;\,0{,}2630\}.

Passo 3 - cascata. La convoluzione dei tre filtri ha 77 coefficienti ≈17=0,1429\approx\frac17=0{,}1429 (scarto massimo 0,00040{,}0004): i toni sono gli zeri ej2πk/7e^{j2\pi k/7} di una media mobile a 77 punti. Filtro di tipo I, ritardo 33 campioni, modulo 00 nelle frequenze del corso e 11 in continua. Nelle frequenze vere il modulo vale −85,7-85{,}7, −59,5-59{,}5, −71,9-71{,}9 dB (le frequenze del corso sono arrotondate).

Passo 4 - codice. wavfile.read, poi xx/32768; hh = [notch(w) for w in w_toni], h_out = convolve(convolve(hh[0], hh[1]), hh[2]), yy = lfilter(h_out, 1, xx). Ampiezze dei toni nel tratto 88-10,510{,}5 s: da 1,1631{,}163; 0,2870{,}287; 0,4150{,}415 a 8⋅10−58\cdot10^{-5}; 3⋅10−43\cdot10^{-4}; 10−410^{-4}, cioè −83-83, −60-60, −73-73 dB.

Passo 5 - risultato. I toni spariscono dopo un transitorio di 66 campioni; il valore efficace sul file passa da 0,4760{,}476 a 0,0690{,}069. Ma la cascata è un passabasso con −3-3 dB a 0,128π0{,}128\pi (705705 Hz): il messaggio perde 2,52{,}5 dB (fasce sopra 0,2π0{,}2\pi: da −13,5-13{,}5 a −19-19 dB) e il guadagno a ω^=π\hat\omega=\pi è 0,1430{,}143. Tre notch IIR con r=0,9r=0{,}9 attenuano i toni di ≈94\approx94 dB perdendo solo 0,390{,}39 dB di messaggio.

Teoria: Filtri notch e applicazioni dei filtri FIRUno zero di H(z) sulla circonferenza unitaria in z0 = e^{j w0} annulla (a regime) le sinusoidi alla pulsazione w0. Per eliminare un coseno servono i due zeri coniugati: H(z) = (1 - e^{jw0} z^-1)(1 - e^{-jw0} z^-1) = 1 - 2 cos(w0) z^-1 + z^-2, cioè h = {1, -2cos w0, 1}, un FIR simmetrico di tipo I (ritardo 1). Si normalizza dividendo per 2 - 2cos(w0) per avere guadagno 1 in continua; più toni si eliminano mettendo in cascata (convoluzione) un filtro per ogni tono. Segue una panoramica delle applicazioni dei FIR (equalizzazione audio), vantaggi (fase lineare, stabilità) e costo (N moltiplicazioni per campione, molte più di un IIR).Filtri notch e applicazioni dei filtri FIR →, Risposta in frequenza dei sistemi FIRSe all'ingresso di un FIR c'è un esponenziale complesso A e^{jφ} e^{jω̂n} (per ogni n), l'uscita è lo stesso esponenziale moltiplicato per H(ω̂) = Σ b_k e^{-jω̂k}: la frequenza non cambia, ampiezza e fase sono modificate da |H| (guadagno) e ∠H (sfasamento). Per sovrapposizione si trattano somme di sinusoidi. H è periodica di periodo 2π e, per coefficienti reali, hermitiana (|H| pari, fase dispari). La cascata ha H = H1·H2. Esempi: ritardo (fase lineare), differenza prima (passa-alto), {1,2,1} (passa-basso), media mobile di L punti (Dirichlet: |H| = |sin(Lω̂/2)/(L sin(ω̂/2))|, fase lineare -(L-1)ω̂/2).Risposta in frequenza dei sistemi FIR →, Sistemi LTI e convoluzione discretaUn sistema lineare e tempo-invariante (LTI) è completamente descritto dalla sua risposta impulsiva h[n]: y[n] = Σ x[k] h[n-k] = x[n] * h[n] (somma di convoluzione). Si ricava scomponendo x in impulsi traslati e usando linearità e invarianza. La convoluzione è commutativa, associativa e distributiva; una cascata di LTI equivale a un solo filtro con h = h1 * h2 e l'ordine non conta. Se x ha lunghezza N e h lunghezza L, y ha lunghezza N+L-1. Si calcola col metodo della finestra scorrevole o a tabella. I FIR sono LTI; altri sistemi (n·x[n], x[-n], x²) non lo sono.Sistemi LTI e convoluzione discreta →, Trasformata di Fourier a tempo breve e spettrogrammaPer un segnale lungo il cui contenuto in frequenza cambia nel tempo si calcolano tante DFT brevi: X[k, l] = sum_{n=0}^{L-1} w[n] x[l+n] e^{-j2pi kn/N}, con finestra di analisi w di lunghezza L, istante l = m R (passo R, di solito L/2) e DFT a N >= L punti. Il modulo (o i dB) di X[k, l] come immagine tempo-frequenza è lo spettrogramma. La finestra impone un compromesso: lunga = ottima risoluzione in frequenza (Delta w circa 8pi/L per Hann) ma transizioni temporali sfocate su circa L/2 campioni; corta = buona localizzazione nel tempo ma righe vicine fuse. Si provano più lunghezze.Trasformata di Fourier a tempo breve e spettrogramma →, Numeri complessi, formula di Eulero ed esponenziali complessiUn numero complesso si scrive in forma cartesiana a+jb o polare |x|e^{jφ}; il prodotto moltiplica i moduli e somma le fasi. La formula di Eulero e^{jα}=cos α + j sin α lega esponenziali e sinusoidi e permette di trattare tutti i segnali del corso come somme di esponenziali complessi e^{(σ+jω)t}.Numeri complessi, formula di Eulero ed esponenziali complessi →, Filtri FIR a fase lineare - tipi e zeriI FIR a fase lineare di ordine N si dividono in quattro tipi: I (N pari, h simmetrica), II (N dispari, simmetrica), III (N pari, antisimmetrica), IV (N dispari, antisimmetrica). Si scrive H = e^{-jwN/2} e^{jb} A(w), con A somma di coseni (tipi I e II) o di seni (III e IV). Dalla relazione H(z) = ±z^{-N} H(1/z) segue che gli zeri vengono in gruppi (z0, z0*, 1/z0, 1/z0*) e che ci sono zeri forzati: tipo II in z = -1, tipo III in z = 1 e z = -1, tipo IV in z = 1, tipo I nessuno. Quindi II non fa passa-alto, III non fa passa-basso né passa-alto, IV non fa passa-basso. Ogni tipo II, III, IV è un tipo I moltiplicato per (1+z^-1), (1-z^-2), (1-z^-1).Filtri FIR a fase lineare - tipi e zeri →, Filtri IIR - definizione e confronto con i FIRUn filtro IIR (infinite impulse response) è un sistema LTI descritto da $y[n]=\sum_{\ell=1}^{N}a_\ell y[n-\ell]+\sum_{k=0}^{M}b_kx[n-k]$: l'uscita usa anche le uscite passate (retroazione), per questo si chiama ricorsivo. Con le condizioni di riposo iniziale è LTI, $H(z)=\frac{\sum b_kz^{-k}}{1-\sum a_\ell z^{-\ell}}$ è un rapporto di polinomi, l'ordine è $N$ (numero di poli) e la risposta impulsiva ha durata infinita. Nel primo ordine $y[n]=a_1y[n-1]+b_0x[n]$ si ha $h[n]=b_0a_1^nu[n]$, ROC $|z|>|a_1|$, stabile se $|a_1|<1$; il gradino dà $b_0\frac{1-a_1^{n+1}}{1-a_1}\to\frac{b_0}{1-a_1}$. Si implementa iterando l'equazione alle differenze, non con la convoluzione. Rispetto ai FIR gli IIR rispettano le stesse specifiche di modulo con ordine molto più basso, ma possono essere instabili e non hanno fase lineare. Progetto: per tentativi (notch), con la trasformazione $s\to z$ dai filtri analogici, o con ottimizzazione numerica.Filtri IIR - definizione e confronto con i FIR →.

Errori tipici:

  • Scrivere {1,A,1}\{1,A,1\} senza il fattore 1/(2−2cos⁡ω^0)1/(2-2\cos\hat\omega_0): il guadagno in continua non è 11.
  • Usare A=+2cos⁡ω^0A=+2\cos\hat\omega_0: il segnale non viene annullato, il segno è negativo.
  • Dire che il notch elimina solo il tono: il filtro FIR con pochi coefficienti è largo (qui è un passabasso).
  • Leggere la frequenza dal grafico dello spettrogramma senza ricordare che ha una risoluzione di 4343 Hz.
  • Dimenticare il transitorio di 66 campioni all'inizio dell'uscita.

Teoria collegata