Vous êtes sur la page 1sur 3

Algoritmo di Goetzel

Lalgoritmo di Goetzel usato nei telefoni moderni (multifrequenza) con e tastiera a 16 tasti. Perch non usare 16 sinussoidi? Perch cos i confronto e e valori di due frequenze ed pi dicile incorrere in errori. Denisco una e u matrice 4x4: 1209 1336 1477 1633 1 2 3 A 4 5 6 B 7 8 9 C 0 canc D

667 770 852 941

Dove sulla prima riga ho le frequenze colonna (fc ) e sulla prima colonna le frequenze riga (fr ). Alla pressione del tasto viene eseguita una somma delle due sinussoidi generate. In centrale per elaborare che tasti sono stati eettivamente premuti c un e sistema digitale, quindi come prima cosa bisogna implementare un ADC. A questo punto importante denire la relazione tra frequenza anologie ca e digitale. Per capirlo analizziamo la discretizzazione della funzione sinussoidale: x(t) = Acos(2F0 t) = Acos(0 t) x[n] = Acos(0 Ts n) = Acos(0 n) Da qui facile dedurre che: e 0 = 0 Ts (Naturalmente nel caso di un segnale campionato, alcuni segnali invece nascono digitali). A questo punto nasce immeditamente un problema: devo individuare le i nel segnale x(t), in particolare una coppia di frequenze. Viene naturale pensare di calcolare tutta la DFT, ma questoperazione molto ineciente. e Con Fs = 8192Hz N = 8192campioni (infatti il tempo di pressione di e un secondo). Quindi devo calcolare 8192 campioni di DFT quando me ne servono solamente 8. Qui interviene lalgoritmo di Goetzel con cui calcolo solo 8 i : kN Nel nostro caso abbiamo che WN = 1 quindi una costante che non e cambia il risultato. Quindi posso scrivere
N 1

X[k] =
l=0

kl x[l]WN come da denizione di DFT

N 1

N 1 kl x[l]WN

kN WN l=0

=
l=0

x[l]WN

k(N l)

Ora consideriamo la sequenza data da x[n] estesa ossia una sequenza xe [n] = 0 per n < 0, n N e xe [n] = x[n] per 0 n N 1 e consideriamo kn un sistema con risposta allimpulso h[n] = WN [n]. Allora luscita del sistema con ingresso xe [n] sar la convoluzione: a
n

yk [n] =
l=0

xe [l]WN

k(nl)

X[k] = yk [N ] Quindi uguale alla DFT quando valutato in N . E vero che la sommatoria del secondo arriva no a N ma xe [N ] = 0. Andiamo adesso nel dominio ZT: He (z) = Z[hk [n]] = Y (z) = 1 k 1 Wn z 1

Xe (z) k 1 Wn z 1 E risolvendo e antitrasformando diventa:


k Yk (z) = Xe (z) + Yk (z)WN z 1 k yk [n] = xe [n] + WN yk [n 1]

Che lequazione da implementare sul DSP. Questo lalgorimto di Goetzel e e di primordine. Faccio otto di queste macchine ognuna con il k giusto e

Figura 1: Implementazione Algoritmo di primordine

sembra tutto ok. k Per WN complesso e nel caso di un x[n] complessa potrei dover molo e tiplicare due numeri complessi, il che ha un costo elevato. Sarebbe bello moltiplicare per un numero reale per aumentare lecienza.Consideriamo la seguente e lecita moltiplicazione: Hk (z) =
k 1 1 WN z 1 k k 1 WN z 1 1 WN z 1

Moltiplico e divido per il complesso coniugato del denominatore. A questo punto se svolgo i calcoli e antitrasformo ottengo: y[n] = 2cos( 2k k )y[n 1] y[n 2] + xe [n] WN xe [n 1] N

Con un occhio attento si vede che questa formula nasconde una bomba totale. Proviamo a riscrivere H(z) come H1 (z)H2 (z), dove: H1 (z) = 1 1+ cos( 2k )z 1 N + z 2

k H2 (z) = 1 WN z 1

Allora si pu vedere il sistema totale come la cascata dei due sistemi. Questo o lalgoritmo di Goetzel di secondordine che introduce un MUST: e Denominatore parte Backward, retroazione, IIR Numeratore parte Forward, non va mai indietro, FIR

Figura 2: Implementazione diH1 (z)

Figura 3: Implementazione diH1 (z)H2 (z)

Vous aimerez peut-être aussi