Decimazione in frequenza (Decimation in frequency) Si può pensare di derivare direttamente un algoritmo FFT di decimazione nel dominio della frequenza, invece di fare una trasposizione di un algoritmo dato di decimazione nel tempo. A tale scopo si divide la sequenza in due metà e si definiscono le sequenze somma e differenza di lunghezza N/2 attraverso: ~ f ( n) = ~ x ( n) + ~ x ( n + N / 2) e g~ ( n) = ~ x ( n) − ~ x ( n + N / 2) per n = 0, 1, . . . , (N/2) - 1. M. Usai Circuiti digitali 7_5 (7.4.5) 1 Valutando la DFT a N/2 punti si ha: ~ F (l ) = ( N / 2 ) −1 ∑ ~ f (n)(W 2 ) ln , n=0 ( N / 2 ) −1 = ∑ ( N / 2 ) −1 ~ x (n)W 2 ln + n=0 n=0 ( N / 2 ) −1 = ∑ n=0 ∑ ~ x (n + N / 2)W 2 ln ~ x (n)W 2 ln + N −1 ∑ n= N / 2 ~ x (n)W 2 ln l = 0, 1,. . . , (N/2) - 1, (7.4.6) dove si è trascurato il fattore W-2l(N/2) dall’ultima sommatoria in (7.4.2) poiché WlN è uguale all’unità per tutti i valori di l. M. Usai Circuiti digitali 7_5 2 Quindi: ~ F (l ) = N −11 ∑ ~ ~ x (n)W 2 ln = X (2l ), l = 0, 1, . . . , (N/2) - 1 (7.4.7) n =0 cioè da i campioni numerati pari della DFT. Comunque se si valuta la DFT di ordine N/2 punti della sequenza delle differenze modulate , si ottiene: ~ Gm (l ) = ( N / 2 ) −1 ∑ W n g~ (n)(W 2 ) ln , n =0 = = ( N / 2 ) −1 ( N / 2 ) −1 n=0 ( N / 2 ) −1 n=0 ∑ ∑ n=0 ~ x (n)W ( 2l +1) n − ~ x (n)W ( 2l +1) n + ∑ ~ x (n + N / 2)W ( 2l +1) n N −1 ∑ ~ x (n)W ( 2l +1) n l = 0, 1,. . . , (N/2) - 1, n= N / 2 (7.4.8) dove si è sostituito il fattore W-(2l+1)(N/2) con il suo valore(-1) nell’ultima sommatoria in (7.4.8). M. Usai Circuiti digitali 7_5 3 Quindi: ~ G (l ) = N −1 ∑ ~ ( 2l +1) n ~ x (n)W = X (2l + 1), l = 0, 1, . . . , (N/2) - 1, n=0 cioè da i campioni numerati dispari di . I fattori di modulazione Wn nella sequenza W n g~ (n) sono fattori di rotazione nell’algoritmo. Come nel caso dell’algoritmo della decimazione nel tempo, questo concetto viene applicato di seguito più volte sino a quando si ha solamente da valutare la DFT di ordine 2. Cioè le sequenza a N/2 punti e vengono divise ciascuna in due sequenze di N/4 punti, essendo modulate le ultime due metà con W2n e così via per r stadi dove N=2r. L’algoritmo risultante della decimazione in frequenza corrisponde alla figura 7.17, ma con l’incorporazione della farfalla in figura 7.16 M. Usai Circuiti digitali 7_5 4 Figura 7.16 Decimazione butterfly in frequenza con una sola moltiplicazione complessa. M. Usai Circuiti digitali 7_5 5 Figura 7.17 Diagramma della FFT con una decimazione in frequenza a 8 punti. M. Usai Circuiti digitali 7_5 6 In tabella 7.3 è riportato un programma FORTRAN per l’algoritmo FFT della decimazione in frequenza M. Usai Circuiti digitali 7_5 7 Oltre alle possibilità precedentemente menzionate per calcolare direttamente l’operatore Wqn=cos(2πqn/N)-j sin(2πqn/N) o definendolo in una matrice predefinita, una terza possibilità consiste nel calcolarlo ricorsivamente usando una semplice equazione alle differenze Wqn=WqWq(n-1) (7.4.10) per n=1, 2, 3, . . .. M. Usai Circuiti digitali 7_5 8 Il terzo metodo corrisponde alla quadratura (quadrature) dell’oscillatore digitale dove si mostra che attualmente vengono richieste solo due moltiplicazioni reali per ricorsione e non 4 come per una moltiplicazione complessa arbitraria. Quindi gli errori cumulativi di quantizzazione risultanti dall’uso ripetitivo di (7.4.10) causeranno eventualmente grandi errori nei valori calcolati per Wqn, a meno che le condizioni iniziali per la ricorsione vengano reimpostati periodicamente. Una scelta ovvia per resettare Wqn si ha quando (qn)mod N =0 poiché W0=1. M. Usai Circuiti digitali 7_5 9 DFT inversa: IDFT Potrebbe sembrare dalle definizioni della DFT in (7.1.4) e dalla DFT inversa IDFT in (7.1.6) che potrebbero essere richiesti diverse forme di vari algoritmi FFT per valutare la DFT e la IDFT. Quindi coniugando la (7.1.6) si trova che : 1 ~ x * ( n) = N N −1 ∑ ~ X * (k )W kn , n = 0, 1, ..., N - 1 (7.4.11) k =0 Cioè la DFT della matrice ridotta di 1/N, da il coniugato della matrice di output desiderata . Quindi si può usare l’algoritmo FFT per calcolare la DFT inversa attraverso una prima coniugazione della matrice di input calcolando la sua DFT e quindi coniugando la matrice di output risultante. Certamente se la matrice di output ha valori reali, l’operazione di coniugazione finale non è richiesta. M. Usai Circuiti digitali 7_5 10 Shuffling (mescolamento) Come visto in precedenza per entrambi gli algoritmi della decimazione nel tempo e della decimazione nella frequenza, sia la matrice dei dati di input che di output saranno ordinati a bit rovesciati, se vengono impiegate le configurazioni a farfalle in place. Per molte applicazioni è quindi richiesto l’ordinamento o shuffling (mescolamento) della matrice di bit rovesciati a partire dall’ordine naturale. Se la FFT è implementata in hardware, è insignificante costruire un contatore binario che conta i bit in ordine inverso- proprio invertire gli r outputs bit da un contatore standard lineare binario 2r. • • Se quindi l’FFT deve essere implementata in software, contare in ordine bit inverso, diventa talvolta più complesso. M. Usai Circuiti digitali 7_5 11 Robin e Gold danno un diagramma di flusso dovuto a Rader per questo contatore a bit inverso [91] Per eseguire un ordinamento (sorting) alla matrice degli output dall’algoritmo della decimazione in frequenza, si devono ~ % X ( k ) X scambiare e (k ' ) , dove k’ è l’indice nell’ordine naturale. ~ ~ Per esempio in fig. 7.17, dobbiamo scambiare e X (4) con X (3) . Quando k=k’, ovviamente, non è necessario alcuno scambio altrimenti devono ~ essere scambiati X% (k ) con X (k ' ) . Per essere sicuri che lo scambio è fatto solamente una volta, fare lo scambio solo se k>k’ (o viceversa). M. Usai Circuiti digitali 7_5 12 Quindi l’algoritmo completo di sorting richiede una implementazione di un contatore (k’) in ordine naturale, un altro contatore in ordine bit-inverso e ~ lo scambio di X% (k ) con X (k ' ) ogni qualvolta che k > k’. In alcune applicazioni della FFT l’ordinamento(sorting) di dall’ordine bitinverso all’ordine naturale non è richiesto. ~ ~ ~ Per esempio se la convoluzione y ( n ) = x ( n ) * h ( n) è stata implementata ~ ~ calcolando la DFT X (k ) e H ' (k ) , quindi moltiplicandole per ottenere ~ ~ ~ ~ inversa Y (k ) per Y ( k ) = X (k ) H (k ) e infine~facendo~ la trasformata ~ determinare ~ y ( k ) , allora X (k ) , Y (k ) e H (k ) possono rimanere tutte in ordine inverso. ~ Così per esempio X~ (k ) e H (k ) possono essere valutate attraverso ~ ~ h l’algoritmo della decimazione di frequenza da e x ( k ) e (k ) in ordine ~ ~ naturale e y (n) può essere calcolato da Y (k ) usando l’algoritmo della decimazione nel tempo, eccetto per la matrice input a bit inverso. M. Usai Circuiti digitali 7_5 13 ~ Viceversa , se la funzione di autocorrelazione r (n) è stata valutata come 2 la DFT inversa della S~ (k ) = X~ (k~) / N , come descritto nel paragrafo 7.6 , allora non è necessario che X (k ) sia in ordine naturale. FFT a radice 4 ( Radix-4 FFT) Tutti gli algoritmi FFT precedenti sono basati su valutazioni a farfalla di 2 input e 2 output e sono classificati come algoritmi a radice 2 (radix-2). Possono essere usati altri valori di radice intera n per sviluppare gli algoritmi FFT. Per esempio nella prima derivazione di ordine 8 della decimazione nel tempo, si potrebbe scegliere di implementare direttamente di ordine 4 la DFT come illustrato in figura 7.18. Si noti che nelle due farfalle risultanti a radice 4, si sono indicati i coefficienti: W2 come –j; W4 come –1 e W6 come j. (ricordare che N =8). M. Usai Circuiti digitali 7_5 14 Ciò enfatizza il fatto che questi coefficienti non richiedono attualmente moltiplicazioni perché W2(a+jb)=b-ja; W4(a+jb)=-a-jb; W6(a+jb)=-b+ja. Gli algoritmi FFT a radice 2 e a radice 4 sono i più comuni sebbene altri valori di radice possono essere impiegati (e sono richiesti se N≠2r) M. Usai Circuiti digitali 7_5 15 7.18 FFT ottenuta con una decimazione nel tempo con 8 punti incorporando 2 farfalle a radice 4 M. Usai Circuiti digitali 7_5 16 Per esempio per valutare una FFT a 320 punti, si possono usare farfalle a radice 2 e a radice 5 o farfalle a radice 4 e radice 5 o tutti e tre. Così le FFT sono dette essere algoritmi a radice mista (mixed radix). Sono utilizzabili diversi programmi FFT [16]. Dati a valore reale Poiché più subroutines FFT o hardware accettano i dati input con valori complessi, stiamo sprecando alcune delle potenzialità dell’algoritmo che si hanno quando i dati di input sono valori reali. Questa potenzialità sprecata può facilmente essere utilizzata. Se si hanno due sequenze ~x1 (n) e ~x2 (n) da trasformare, supponendo che le corrispondenti di DFT siano: ~ ~ ~ X 1 (k ) = E1 (k ) + jO1 (k ), ~ ~ ~ X 2 (k ) = E2 (k ) + jO2 (k ) M. Usai Circuiti digitali 7_5 (7.4.12) 17 ~ E dove, come riportato nelle tabelle 7.1, le parti reali i ( k ) sono funzioni ~ O pari di k e le parti immaginarie i (k ) sono dispari cioè: ~ ~ Ei (k ) = Ei ( N − k ), (7.4.13) ~ ~ Oi (k ) = −Oi ( N − k ) Formando la sequenza composta di input a valore complesso: ~ x ( n) = ~ x1 (n) + j ~ x2 (n), (7.4.14) ~ X (k ) che per la linearità è semplicemente: si valuta la sua DFT ~ ~ ~ X ( k ) = X 1 ( k ) + jX 2 ( k ) ~ ~ ~ ~ = E1 ( k ) + O2 (k ) + j E2 (k ) + O1 (k ) [ M. Usai ] [ Circuiti digitali 7_5 ] (7.4.15) 18 Quindi dalla 7.4.13 [ ] [ ~ ~ ~ ~ ~ X ( N − k ) = E1 ( k ) − O2 ( k ) + j E2 ( k ) − O1 ( k ) ] ~ ~ ~ X ( k ) X ( k ) X e le DFT desiderate 1 e 2 possono essere ricavate da (k ) attraverso: ~ ~ + X ( k ) X * (N − k) ~ = X 1 (k ) 2 (7.4.16) ~ ~ X (k ) − X * ( N − k ) ~ X 2 (k ) = 2j dove * indica il complesso coniugato. M. Usai Circuiti digitali 7_5 19 Convoluzione ad alta velocità L’implementazione di un filtro FIR corrisponde al calcolo della convoluzione lineare • della sequenza di dati x(n) e • della risposta ad impulso di durata finita h(n) di ordine M. Se inoltre la sequenza di dati ha una durata finita N1 diverso da M, la convoluzione lineare può essere implementata moltiplicando le corrispondenti DFT sulle quali si è precedentemente eseguito lo zero-padding a N2 >> N1+M campioni, come descritto in figura 7.2. Il vantaggio potenziale di questo approccio è che l’algoritmo FFT può essere usato per calcolare la DFT riducendo il numero delle moltiplicazioni e addizioni. M. Usai Circuiti digitali 7_5 20 Figura 7.2 Lo zero padding delle sequenze della figura rende la convoluzione circolare equivalente alla convoluzione lineare M. Usai Circuiti digitali 7_5 21 In particolare, - il calcolo diretto della convoluzione dovrebbe richiedere circa M⋅N1 operazioni reali (moltiplicazioni addizioni), mentre - la FFT dei dati zero-padded comporta circa N2 ⋅ log N2 valutazioni complesse per N2 >> N1+M, il prodotto delle DFT richiede N2 calcoli complessi e la FFT inversa del prodotto richiede altri N2log N2 calcoli complessi (si assume che la DFT zero-padded di h(n) sia sempre utilizzabile e che non debba essere calcolata). Questo approccio è stato chiamato convoluzione ad alta velocità (high-speed convolution) [64]. Spesso le sequenze di lunghezza N1 sono troppo grandi per permettere una valutazione di una singola DFT di dati. Questo è soprattutto vero nei sistemi a tempo reale, dove la sequenza dei dati di input è di durata infinita. M. Usai Circuiti digitali 7_5 22 In questi casi: • le sequenze dei dati possono essere divise in sequenze più corte di conveniente lunghezza, e • ciascun segmento convoluto con h(n) attraverso le DFT. Quindi ci saranno effetti finali dovuti a ciascuna convoluzione come descritto nei paragrafi 7.1 e 7.2, delle quali si deve tener conto quando i segmenti vengono ricombinati per produrre una sequenza di output. Esistono due procedure per effettuare questa segmentazione e ricombinazione dei dati: overlap_add e overlap_save. M. Usai Circuiti digitali 7_5 23 Nel metodo overlap-add, la sequenza di input viene divisa in segmenti non-sovrapposti xk(n) di lunghezza N1=N2-M dove N2 è la lunghezza desiderata della FFT e ciascun segmento zero-padded è convoluto con h(n) per produrre un segmento yk(n) di lunghezza N2. x ( n) = Poiché: ∑ xk ( n) k (7.4.17) e la convoluzione è un’operazione lineare, l’output y(n) è semplicemente: y ( n) = ∑ y k ( n) (7.4.18) Comunque ciascun segmento di output yk(n) si sovrappone al segmento seguente yk+1(n) negli M campioni e quindi la (7.4.18) implica una addizione reale di segmenti non semplicemente una concatenazione come nella (7.4.17). Nei tratti di lunghezza L intermedi le convoluzioni parziali, quando si sommando tra di loro le sequenze filtrate, danno come risultato una convoluzione esatta. k M. Usai Circuiti digitali 7_5 24 Quindi i segmenti di output vengono “overlapedd” (sovrapposti) e “added” (“sommati”),. Ciò è illustrato in figura 7.19. Figura 7 19 Rappresentazione del metodo overlap-add M. Usai Circuiti digitali 7_5 25 Nel metodo overlape-save invece vengono overlapped (sovrapposti) i segmenti di input mentre i segmenti di output vengono troncati per non essere sovrapposti e quindi concatenati. In particolare i segmenti di input xk(n) di lunghezza N2 vengono presi con un overlap di M campioni tra i segmenti. Le convoluzioni circolari della xk(n) e h(n) attraverso le DFT a N2 punti producono i segmenti di output yk(n) in cui i primi M campioni non sono utilizzabili perché sono affetti da equivocazione temporale. Quindi i primi M campioni di ciascun yk(n) vengono scartati come illustrato in figura 7.20 e segmenti risultanti a N1 punti vengono concatenati per produrre y(n). M. Usai Circuiti digitali 7_5 26 Figura 7.20 Rappresentazione del metodo overlap-save In entrambi i metodi la generazione di N1 campioni di output richiede circa N2 log N2 calcoli complessi. Chiaramente per evitare eccessiva overlap, si sceglierà generalmente: N1 > M e spesso N1 >> M. M. Usai Circuiti digitali 7_5 27 Stockham[64] ha determinato che per un incremento effettivo della velocità di calcolo attraverso una convoluzione “high-speed”: M deve essere almeno uguale a 32. Sono riportati di seguito i fattori approssimati di incremento della velocità, calcolati da Stockham, : Filter Order (M) 16 32 64 128 256 512 1024 Speed-up Factor 0.7 1.3 2.3 4 6 13 24 Per valori grandi di M, anche la risposta impulsiva h(n) può essere segmentata per produrre le DFTs della lunghezza desiderata. M. Usai Circuiti digitali 7_5 28