Algoritmo CZT (Chirp Z-Transform) 

Como foi visto anteriormente, é possível computar a Transformada Discreta de Fourier (DFT) de uma sequência de maneira eficiente.

Equivalentemente, é possível computar de maneira eficiente as amostras de transformada Z de uma sequência finita, avaliadas em pontos igualmente espaçados no círculo unitário.
Para que tal eficiência seja atingida, N deve ser um número composto.

Além disso, pode-se querer amostrar a transformada Z em outro contorno que não o círculo unitário, ou pode-se não precisar de amostras da transformada Z sobre todo o círculo unitário, mas sobre apenas sobre uma parte deste.

Logo, esquemas que aumentem a flexibilidade da computação da DFT são de considerável interesse.

Suponha então que deseja-se obter amostras da transformada Z de uma sequência finita sobre um círculo que é concêntrico ao círculo unitário e que as amostras devem ser igualmente espaçadas em ângulo ao longo do círculo. Para tal, com uma pequena modificação, um algoritmo FFT deve ser utilizado.

Especificamente, se x(n) for uma sequência finita de tamanho N, então a DFT da sequência irá fornecer N amostras igualmente espaçadas em ângulo sobre o círculo de raio a no plano z. Se houver interesse em obter amostras de frequência igualmente espaçadas sobre uma pequena porção do círculo unitário, o melhor será utilizar um algoritmo FFT para computar as amostras de frequência com o espaçamento desejado, porém obtendo também amostras fora da faixa de frequência de interesse.

Por exemplo, se for considerada uma sequência de 128 pontos e houver interesse em obter 128 amostras da transformada Z no círculo unitário entre w= -p /8 e w = +p /8, o processo mais eficiente deverá ser computar uma DFT de 1024 pontos, (aumentando-se a sequência com amostras nulas) e guardar somente os 128 pontos desejados.

Um processo alternativo, que em muitas situações é o mais eficiente, é utilizar o algoritmo CZT (Chirp Z-Transform).

Esse algoritmo é direcionado à computação de amostras da transformada Z em um contorno espiral, igualmente espaçadas em ângulo sobre alguma porção da espiral.

Especificamente, seja x(n) uma sequência de N pontos e X(z) sua transformada Z. Utilizando-se o algoritmo CZT, X(Z) pode ser avaliada nos pontos zk dados por 
 
(25)
onde
 
com A0 e W0 reais positivos.

Consequentemente, o contorno sobre o qual as amostras são obtidas encontra-se ilustrado na fig.11, reproduzida de Oppenheim e Schafer, Digital Signal Processing,1975.
 
 
 

 
Figura 11

O contorno mostrado acima é uma espiral no plano z. O parâmetro W0 controla a taxa na qual a espiral se forma. Se W0 é maior que um, a espiral se forma em direção à origem conforme k cresce, e se W0 é menor que um, a espiral se forma em direção oposta à origem conforme k cresce. Os parâmetros A0 e q 0 são o raio e o ângulo, respectivamente, da primeira amostra, i.e., k=0.

As amostras restantes estão localizadas ao longo da espiral com espaçamento angular f0. Consequentemente, se W0=1, a espiral se torna um arco circular, e se A0=1, este arco é parte do círculo unitário.

Com os valores de zk dados pela equação (25), deseja-se computar 
 
(26)
onde N é o tamanho da sequência x(n). Usando a identidade
 
(27)

a equação (26) pode ser escrita como


ou

Fazendo
 
pode-se escrever
 
(28)
Avaliando a equação (28), o somatório é reconhecido como a convolução das sequências g(n) e .

Assim, o esquema de computação da equação (28) é ilustrado na fig.12, reproduzida de Oppenheim e Schafer, Digital Signal Processing,1975, onde
h(n)= 
 
Figura 12
Quando A e W0 são unitários, a sequência h(n) pode ser vista como uma exponencial complexa com frequência linearmente crescente. Em sistemas de radar, tais sinais são denominados "chirp signals", por isso o nome "Chirp Z-Transform". Um sistema similar ao da fig.12 é comumente utilizado para análise de espectro em problemas de radar.

Como g(n) é finita, a convolução na equação (28) pode ser tratada por meio da DFT, a qual deve ser computada utilizando-se uma algoritmo FFT.

Embora a sequência g(n) seja finita, a segunda sequência na convolução não o é; consequentemente, se a covolução for implementada utilizando-se a DFT, então é preciso seccionar a segunda sequência.

Note-se também que, embora o resultado da convolução seja de tamanho indefinido, só há interesse em tal resultado para k = 0, 1, ..., M-1. Consequentemente, ao se seccionar a segunda sequência, será vantajoso escolher tais seções de tal forma que o resultado da computação de uma das seções resulte nos M pontos desejados. A Fig.13, reproduzida de Oppenheim e Schafer, Digital Signal Processing,1975, ilustra as sequências envolvidas no processo para o caso n=10 e M=6.
 
 
 

 
Figura 13

 
Ao se implementar a convolução, a única parte da segunda sequência requerida para se computar o resultado da convolução no intervalo [0,...,M-1] é a parte que vai de –N+1 a M-1, inclusive. Consequentemente, a convolução pode ser implementada computando-se a DFT de (N+M+1) pontos de g(n) (aumentada de M-1 zeros) e a DFT de (N+M-1) pontos da segunda sequência (correspondente ao intervalo delimitado por linhas pontilhadas na fig.13(b)). A transformada inversa do produto das duas DFT’s será a convolução circular de g(n) com a seção de  citada acima.

Parte da convolução circular irá corresponder a uma convolução linear, e parte não.

Pode-se fazer com que os pontos desejados estejam na região 0 £  n £  M-1 interpretando o índice n modulo (N+M-1). Isto significa computar a DFT da sequência 
 

como ilustrado na fig.13(c). Multiplicando-se as DFT’s de g(n) e h(n), os primeiros M valores da transformada inversa correspondente são os valores desejados da convolução em questão.

Na discussão acima, o tamanho das DFT’s computadas era (N+M-1). Se for desejado computar a Transformada Discreta de Fourier usando-se um algoritmo de potência de 2, pode-se completar as sequências de (N+M-1) pontos com amostras nulas de tal forma que o tamanho total de tais sequências seja uma potência de 2. Como o número de operações necessárias para a computação de cada DFT é da ordem de
(N+M-1) log2(N+M-1)
fica claro que a computação total requerida para implementar a avaliação da equação (26), utilizando-se o algoritmo CZT, é proporcional a quantidade acima. Em contraste, a avaliação direta da equação (26) requer um número de equações proporcional a NM. Claramente, o método direto será mais eficiente para valores suficientemente pequenos de N ou M; no entanto, para N ou M suficientemente grandes (da ordem de 50), o algoritmo CZT será mais eficiente.

Além do aumento na eficiência, o algoritmo CZT também oferece flexibilidade na computação das amostras da transformada Z de uma sequência finita. Não precisamos ter necessariamente N=M como nos algoritmos FFT, e nem N nem M precisam ser números compostos; de fato eles podem ser primos se desejado. Além, as amostras da transformada Z podem ser avaliadas em contornos mais gerais que incluem o círculo unitário como caso especial.