Salta al contenuto
Note per Studenti Esercizio - Conversione di frequenza da 44,1 kHz a 48 kHz

Esercizio - Conversione di frequenza da 44,1 kHz a 48 kHz

In questa pagina 4

Testo (esempio della lezione 20 del corso Multimedia Signal Processing, UniPD). Un segnale audio campionato a Fs=44,1F_s=44{,}1 kHz deve essere portato a Fs′=48F_s'=48 kHz.

  1. Determinare i fattori LL e MM del sistema di conversione e la frequenza intermedia.
  2. Disegnare lo schema a blocchi e dire quale taglio deve avere il filtro (in rad e in Hz) e quale guadagno.
  3. Il filtro deve avere banda passante fino a 2020 kHz, banda oscura da 22,0522{,}05 kHz e attenuazione 8080 dB: stimare la lunghezza con la finestra di Kaiser e confrontare il numero di moltiplicazioni al secondo con la realizzazione ingenua e con quella polifase.
  4. Cosa succederebbe nella conversione inversa (48→44,148\to44{,}1 kHz) senza filtro?

Teoria usata: Elaborazione multirate - decimazione e interpolazioneL'elaborazione multirate cambia la frequenza di campionamento di un segnale. Interpolazione per $L$ (da $F_s$ a $LF_s$): l'espansore inserisce $L-1$ zeri fra i campioni, $W(\hat\omega)=X(L\hat\omega)$, lo spettro si ripete $L$ volte nell'asse più ampio; un passabasso con taglio $\pi/L$ e guadagno $L$ elimina le immagini, e con il sinc ideale $h[n]=\operatorname{sinc}(n/L)$ i campioni originali sono conservati ($y[nL]=x[n]$); in pratica FIR a finestre o interpolatore lineare (triangolo). Decimazione per $M$ (da $F_s$ a $F_s/M$): $y[n]=x[nM]$, $Y(\hat\omega)=\frac1M\sum_{k=0}^{M-1}X\big(\frac{\hat\omega-2\pi k}M\big)$, repliche sovrapposte (aliasing) se la banda supera $\pi/M$: si fa precedere da un passabasso con taglio $\pi/M$. Conversione razionale $F_s'=\frac LMF_s$ ($L,M$ coprimi): espansore $L$, un solo passabasso di taglio $\min(\frac\pi L,\frac\pi M)$ e guadagno $L$, decimatore $M$; $y[n]=\sum_kx[k],g[nM-kL]$ non è una convoluzione e il sistema è periodicamente tempo-invariante. Realizzare il tutto in più stadi (fattori piccoli prima per l'interpolazione, grandi prima per la decimazione) e con strutture polifase riduce molto il costo.Elaborazione multirate - decimazione e interpolazione →, Progetto di filtri FIR con il metodo delle finestreUn filtro FIR a fase lineare di tipo I (ordine $N$ pari, $h[n]=h[N-n]$) ha risposta $H(e^{j\hat\omega})=e^{-j\hat\omega N/2}\bar H(\hat\omega)$ con ampiezza $\bar H(\hat\omega)=\sum_{n=0}^{N/2}p_n\cos(n\hat\omega)$. Per approssimare un'ampiezza desiderata $D(\hat\omega)$ (passa-basso: $1$ in banda passante, $0$ in banda oscura, con tolleranze $\delta_p,\delta_s$ e frequenze $\hat\omega_p,\hat\omega_s$) ci sono tre metodi. Finestre: si tronca la serie di Fourier di $D$, cioè $h[n]=h_d[n-N/2],w[n]$ con $h_d[n]=\frac{\hat\omega_0}{\pi}\operatorname{sinc}\frac{\hat\omega_0 n}{\pi}$; la rettangolare è ottima in errore quadratico ma dà il fenomeno di Gibbs (9%, $21$ dB), le finestre rastremate (Hann, Hamming, Blackman, Kaiser) abbassano i lobi laterali allargando la transizione ($\hat\omega_s-\hat\omega_p\simeq\alpha,2\pi/L$). Campionamento in frequenza: $h=\mathrm{IDFT}$ dei campioni di $D$, esatto solo sui campioni. Minimax (Parks-McClellan): errore pesato minimo nel caso peggiore, soluzione equiripple con almeno $r+2$ alternanze, ordine più basso a parità di specifiche.Progetto di filtri FIR con il metodo delle finestre →, Campionamento e ricostruzioneIl campionamento $s_c(nT)=s(nT)$ trasforma un segnale continuo in uno discreto e, in frequenza, ripete lo spettro con periodo $F_c=1/T$: $S_c(f)=\sum_kS(f-kF_c)$. Se le repliche si sovrappongono si ha aliasing e il segnale non è recuperabile. Un interpolatore $\mathbb Z(T)\to\mathbb R$ con risposta impulsiva $g$ produce $\tilde s(t)=\sum_nT g(t-nT)s(nT)$ e $\tilde S=G,S_c$. Teorema del campionamento: se $s$ ha banda $B$ e $F_c\ge2B$, l'interpolatore ideale $G=\operatorname{rect}(f/F_c)$ ricostruisce esattamente $s(t)=\sum s(nT)\operatorname{sinc}(F_c(t-nT))$. Se le ipotesi non valgono c'è un errore, in banda e fuori banda, riducibile con un prefiltro anti-aliasing.Campionamento e ricostruzione →.

1. Fattori di conversione

Il rapporto Fs′Fs=4800044100\frac{F_s'}{F_s}=\frac{48000}{44100} si riduce ai minimi termini dividendo per il massimo comune divisore 300300: Fs′Fs=160147 ⇒ L=160,M=147,gcd⁡(160,147)=1 (coprimi).\frac{F_s'}{F_s}=\frac{160}{147}\ \Rightarrow\ L=160,\quad M=147,\quad\gcd(160,147)=1 \text{ (coprimi)} . Si interpola per L=160L=160 e si decima per M=147M=147. La frequenza intermedia, la più alta del sistema, è Fs′′=L Fs=160⋅44,1 kHz=7056 kHzF_s''=L\,F_s=160\cdot44{,}1\text{ kHz}=7056\text{ kHz} (=M Fs′=147⋅48=M\,F_s'=147\cdot48 kHz, e coincide con mcm⁡(44100,48000)=7 056 000\operatorname{mcm}(44100,48000)=7\,056\,000 Hz). L'ordine dei blocchi è: prima si interpola, poi si decima.

2. Schema e filtro

x[n] (44,1 kHz) → ↑160 → g[m] (7056 kHz) → ↓147 → y[n] (48 kHz).x[n]\ (44{,}1\text{ kHz})\ \to\ \boxed{\uparrow160}\ \to\ \boxed{g[m]}\ (7056\text{ kHz})\ \to\ \boxed{\downarrow147}\ \to\ y[n]\ (48\text{ kHz}). Un solo filtro gg fa sia l'anti-immagine sia l'anti-aliasing, con taglio ω^c=min⁡(πL,πM)=min⁡(π160,π147)=π160\hat\omega_c=\min\big(\frac\pi L,\frac\pi M\big)=\min\big(\frac\pi{160},\frac\pi{147}\big)=\frac\pi{160} (rispetto a Fs′′F_s''): in Hz fc=ω^cFs′′2π=7056320=22,05f_c=\hat\omega_c\frac{F_s''}{2\pi}=\frac{7056}{320}=22{,}05 kHz, cioè Fs2\frac{F_s}2 (essendo Fs<Fs′F_s<F_s' il taglio è fissato dall'ingresso: tutta la banda dell'ingresso passa, quella di uscita è più larga). Il guadagno in banda passante è L=160L=160 (che compensa gli L−1L-1 zeri inseriti).

3. Costo del filtro

Banda di transizione da 2020 a 22,0522{,}05 kHz, cioè 2,052{,}05 kHz a Fs′′=7056F_s''=7056 kHz: Δω^=2π20507 056 000=1,825⋅10−3\Delta\hat\omega=2\pi\frac{2050}{7\,056\,000}=1{,}825\cdot10^{-3} rad. Con la formula di Kaiser: N≥As−814,36 Δω^2π=7214,36⋅2,905⋅10−4=17 258,N\ge\frac{A_s-8}{14{,}36\,\frac{\Delta\hat\omega}{2\pi}}=\frac{72}{14{,}36\cdot2{,}905\cdot10^{-4}}=17\,258 , e scipy.signal.kaiserord dà N=17 275N=17\,275, β=7,857\beta=7{,}857: circa 17 30017\,300 coefficienti. Un filtro così lungo calcolato ingenuamente a 70567056 kHz richiede 17 276 moltiplicazioni×7 056 000 campioni/s≃1,2⋅1011 moltiplicazioni/s.17\,276\ \text{moltiplicazioni}\times7\,056\,000\ \text{campioni/s}\simeq1{,}2\cdot10^{11}\ \text{moltiplicazioni/s}. Impossibile in tempo reale. La struttura efficiente sfrutta due fatti: dopo l'espansore L−1=159L-1=159 campioni su 160160 sono zero (non servono moltiplicazioni) e il decimatore butta via 146146 uscite su 147147 (non vanno calcolate). Restano solo N+1L≃108\frac{N+1}{L}\simeq108 prodotti per campione d'uscita: 108×48 000≃5,2⋅106 moltiplicazioni/s,108\times48\,000\simeq5{,}2\cdot10^{6}\ \text{moltiplicazioni/s}, cioè 1,2⋅1011/5,2⋅106=23 520=L⋅M1{,}2\cdot10^{11}/5{,}2\cdot10^6=23\,520=L\cdot M volte meno. I coefficienti usati variano periodicamente da un'uscita all'altra (sistema periodicamente tempo-invariante, con periodo LL uscite): è la struttura polifase.

Esempio. scipy.signal.resample_poly(x, 160, 147) fa esattamente questo, con un filtro di Kaiser (β=5\beta=5) di 2⋅10⋅max⁡(L,M)+1=32012\cdot10\cdot\max(L,M)+1=3201 coefficienti per default. Convertendo 11 s di un tono a 11 kHz campionato a 44,144{,}1 kHz si ottengono 48 00048\,000 campioni e, a parte i bordi, la differenza dal tono ideale a 4848 kHz è 6,7⋅10−46{,}7\cdot10^{-4} (il filtro scelto è più corto di quello da 8080 dB, quindi ha una transizione più larga).

4. Il caso inverso

Da 4848 kHz a 44,144{,}1 kHz si ha L=147L=147 e M=160M=160, e il taglio è min⁡(π147,π160)=π160\min\big(\frac\pi{147},\frac\pi{160}\big)=\frac\pi{160} rispetto a 70567056 kHz: 22,0522{,}05 kHz, fissato dall'uscita. Il filtro è necessario, perché le frequenze fra 22,0522{,}05 e 2424 kHz dell'ingresso non possono essere rappresentate a 44,144{,}1 kHz. Senza filtro (per esempio prendendo semplicemente il campione più vicino all'istante m/44100m/44100) un tono a 2323 kHz verrebbe ripiegato (aliasing) a 44,1−23=21,144{,}1-23=21{,}1 kHz con ampiezza piena: il picco dello spettro del segnale così ottenuto cade a 21 10021\,100 Hz (verificato numericamente).

Versione ripasso

Esercizio 1 - fattori. Fs′Fs=4800044100=160147\frac{F_s'}{F_s}=\frac{48000}{44100}=\frac{160}{147}, con gcd⁡(160,147)=1\gcd(160,147)=1: L=160L=160, M=147M=147. Si interpola per LL, poi si decima per MM. La frequenza intermedia è Fs′′=L Fs=160⋅44,1=7056F_s''=L\,F_s=160\cdot44{,}1=7056 kHz, uguale a M Fs′=147⋅48M\,F_s'=147\cdot48 kHz.

Esercizio 2 - filtro. Un solo filtro gg fa anti-immagine e anti-aliasing, con taglio ω^c=min⁡(π160,π147)=π160\hat\omega_c=\min\big(\frac\pi{160},\frac\pi{147}\big)=\frac\pi{160}. In Hz: fc=7056320=22,05f_c=\frac{7056}{320}=22{,}05 kHz, cioè Fs2\frac{F_s}2. Guadagno in banda passante L=160L=160, che compensa gli L−1L-1 zeri inseriti dall'espansore.

Esercizio 3 - costo. Transizione da 2020 a 22,0522{,}05 kHz: Δω^=2π20507 056 000=1,825⋅10−3\Delta\hat\omega=2\pi\frac{2050}{7\,056\,000}=1{,}825\cdot10^{-3} rad. Kaiser: N≥As−814,36 Δω^2π=7214,36⋅2,905⋅10−4≃17 258N\ge\frac{A_s-8}{14{,}36\,\frac{\Delta\hat\omega}{2\pi}}=\frac{72}{14{,}36\cdot2{,}905\cdot10^{-4}}\simeq17\,258, e kaiserord dà N=17 275N=17\,275, β=7,857\beta=7{,}857.

  • Ingenua: 17 276×7 056 000≃1,2⋅101117\,276\times7\,056\,000\simeq1{,}2\cdot10^{11} moltiplicazioni/s, impossibile in tempo reale.
  • Polifase: restano N+1L≃108\frac{N+1}{L}\simeq108 prodotti per uscita, cioè 108×48 000≃5,2⋅106108\times48\,000\simeq5{,}2\cdot10^6 moltiplicazioni/s, cioè L⋅M=23 520L\cdot M=23\,520 volte meno.

Esercizio 4 - inversa (48→44,148\to44{,}1 kHz). L=147L=147, M=160M=160, taglio π160\frac\pi{160} rispetto a 70567056 kHz, cioè 22,0522{,}05 kHz, fissato dall'uscita. Senza filtro un tono a 2323 kHz si ripiega a 44,1−23=21,144{,}1-23=21{,}1 kHz con ampiezza piena.

Teoria: Elaborazione multirate - decimazione e interpolazioneL'elaborazione multirate cambia la frequenza di campionamento di un segnale. Interpolazione per $L$ (da $F_s$ a $LF_s$): l'espansore inserisce $L-1$ zeri fra i campioni, $W(\hat\omega)=X(L\hat\omega)$, lo spettro si ripete $L$ volte nell'asse più ampio; un passabasso con taglio $\pi/L$ e guadagno $L$ elimina le immagini, e con il sinc ideale $h[n]=\operatorname{sinc}(n/L)$ i campioni originali sono conservati ($y[nL]=x[n]$); in pratica FIR a finestre o interpolatore lineare (triangolo). Decimazione per $M$ (da $F_s$ a $F_s/M$): $y[n]=x[nM]$, $Y(\hat\omega)=\frac1M\sum_{k=0}^{M-1}X\big(\frac{\hat\omega-2\pi k}M\big)$, repliche sovrapposte (aliasing) se la banda supera $\pi/M$: si fa precedere da un passabasso con taglio $\pi/M$. Conversione razionale $F_s'=\frac LMF_s$ ($L,M$ coprimi): espansore $L$, un solo passabasso di taglio $\min(\frac\pi L,\frac\pi M)$ e guadagno $L$, decimatore $M$; $y[n]=\sum_kx[k],g[nM-kL]$ non è una convoluzione e il sistema è periodicamente tempo-invariante. Realizzare il tutto in più stadi (fattori piccoli prima per l'interpolazione, grandi prima per la decimazione) e con strutture polifase riduce molto il costo.Elaborazione multirate - decimazione e interpolazione →, Progetto di filtri FIR con il metodo delle finestreUn filtro FIR a fase lineare di tipo I (ordine $N$ pari, $h[n]=h[N-n]$) ha risposta $H(e^{j\hat\omega})=e^{-j\hat\omega N/2}\bar H(\hat\omega)$ con ampiezza $\bar H(\hat\omega)=\sum_{n=0}^{N/2}p_n\cos(n\hat\omega)$. Per approssimare un'ampiezza desiderata $D(\hat\omega)$ (passa-basso: $1$ in banda passante, $0$ in banda oscura, con tolleranze $\delta_p,\delta_s$ e frequenze $\hat\omega_p,\hat\omega_s$) ci sono tre metodi. Finestre: si tronca la serie di Fourier di $D$, cioè $h[n]=h_d[n-N/2],w[n]$ con $h_d[n]=\frac{\hat\omega_0}{\pi}\operatorname{sinc}\frac{\hat\omega_0 n}{\pi}$; la rettangolare è ottima in errore quadratico ma dà il fenomeno di Gibbs (9%, $21$ dB), le finestre rastremate (Hann, Hamming, Blackman, Kaiser) abbassano i lobi laterali allargando la transizione ($\hat\omega_s-\hat\omega_p\simeq\alpha,2\pi/L$). Campionamento in frequenza: $h=\mathrm{IDFT}$ dei campioni di $D$, esatto solo sui campioni. Minimax (Parks-McClellan): errore pesato minimo nel caso peggiore, soluzione equiripple con almeno $r+2$ alternanze, ordine più basso a parità di specifiche.Progetto di filtri FIR con il metodo delle finestre →, Campionamento e ricostruzioneIl campionamento $s_c(nT)=s(nT)$ trasforma un segnale continuo in uno discreto e, in frequenza, ripete lo spettro con periodo $F_c=1/T$: $S_c(f)=\sum_kS(f-kF_c)$. Se le repliche si sovrappongono si ha aliasing e il segnale non è recuperabile. Un interpolatore $\mathbb Z(T)\to\mathbb R$ con risposta impulsiva $g$ produce $\tilde s(t)=\sum_nT g(t-nT)s(nT)$ e $\tilde S=G,S_c$. Teorema del campionamento: se $s$ ha banda $B$ e $F_c\ge2B$, l'interpolatore ideale $G=\operatorname{rect}(f/F_c)$ ricostruisce esattamente $s(t)=\sum s(nT)\operatorname{sinc}(F_c(t-nT))$. Se le ipotesi non valgono c'è un errore, in banda e fuori banda, riducibile con un prefiltro anti-aliasing.Campionamento e ricostruzione →.

Errori tipici:

  • Scambiare LL e MM: la diretta ha L=160L=160.
  • Riferire il taglio πL\frac\pi L a FsF_s invece che a Fs′′F_s''.

Teoria collegata