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) |
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.
|
|
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) |
(27) |
a equação (26) pode ser escrita como
ou
Fazendo
(28) |
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)=
|
|
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.
|
|
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) |
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.