Você está na página 1de 4

Trabalho 3 Processamento Digital de Sinais Clculo da DFT, da IDFT, da FFT e da IFFT 1 Introduo

A FFT um recurso numrico extremamente poderoso na obteno do espectro de frequncia de um determinado sinal. No MatLab as funes fft(...), ifft(...) e fftshift(...) realizam o trabalho de transformao direta para o domnio da frequncia, a transformao inversa do domnio da frequncia, e ajuste da frequncia zero para o centro do grfico da FFT. Para um sinal (vetor) de entrada de comprimento N, a transformada de Fourier discreta (DFT) (calculada pela funo fft(...)) ser o vetor X, tambm de comprimento N, calculado por
N 1

X [k ] x[ n]e j 2 nk / N ,
n0

0 k N 1

(1)

E a transformada de Fourier discreta inversa (IDFT) (calculada pela funo ifft(...)):


1 x[n] N
N 1

X [k ]e
k 0

j 2 nk / N

0 n N 1

(2)

A funo fftshift(...) desloca a componente de frequncia zero para o centro do espectro. Para um vetor X, a execuo de fftshift (X) troca de lugar as metades esquerda e direita do vetor. Para uma matriz Y, a execuo de fftshift (Y) troca o primeiro e terceiro quadrantes e o segundo e quarto quadrantes.

Atividades: 1. A transformada de Fourier comumente usada para se encontrar as componentes de frequncia existentes em um sinal ruidoso. O programa abaixo realiza as seguintes tarefas: - Considera um sinal contnuo no tempo amostrado a 1000 Hz. - Forma um sinal contendo componentes senoidais de 50 e 120Hz. - Acrescenta algum rudo randmico de mdia zero. - Calcula a fft do sinal. - Calcula e plota a potncia do espectro do sinal. Programa MatLab:
t = 0:0.001:0.6; % tempo em milisegundos x = sin(2*pi*50*t)+sin(2*pi*120*t); % sinal sem rudo r = 2*randn(size(t)); % rudo de mdia zero y = x + r; % sinal ruidoso plot(t(1:50),y(1:50)) title('Sinal Corrompido por Rudo de Mdia Zero') xlabel('tempo (milisegundos)') Y = fft(y,512); % espectro de freqncia Pyy = Y.* conj(Y) / 512; % potncia do espectro f = 1000*(0:256)/512; figure plot(f,Pyy(1:257)) title('Potencia do Espectro de y') xlabel('frequencia (Hz)')

Execute este programa e analise seu resultado.

2.

Some os sinais senoidais x1 e x2 dados abaixo, que possuem a mesma frequncia, mas com amplitudes e fases diferentes. Aplique a funo fft( ) a cada um dos sinais (x1, x2 e a soma). Plote os sinais originais e o mdulo da resposta em frequncia de cada um deles usando a funo stem( ). Verifique a frequncia do sinal resultante e comente o resultado.

x1 (n) sen(2 .0, 05.n) x2 (n) 4sen(2 .0, 05.n / 4)

3. Calcule a transformada de Fourier discreta de um pulso retangular usando a funo fft( ) e discuta os resultados.

4. Aplique a funo fftshift( ) ao pulso retangular e discuta o resultado e a diferena em relao ao item anterior.

5.

Calcular a FFT e a IFFT dos sinais de voz dos arquivos BOLA_m.wav (gravado de uma voz masculina) e BOLA_F.wav (gravado de uma voz feminina). - Utilizar somente as amostras dos sinais partir da 1000 at a 2000. - Dividir o trecho de voz contido entre as amostras 1000 e 2000 em quadros de tamanho 128 amostras e calcular a fft de cada quadro.

Obs: O nmero de frames deve ser calculado conforme a equao abaixo.


nmero de frames nmero de amostras tamanho do frame

Escolher como nmero de frames o valor inteiro mais prximo superior. O ltimo quadro deve ser preenchido com os dados do arquivo se houver dados nele, caso contrrio deve-se preench-lo com zeros.

6. Repetir todo o procedimento do item 5 utilizando as funes DFT e IDFT implementadas em aula de laboratrio. Medir o tempo gasto para a execuo das funes DFT e IDFT implementadas e comparar 3

com o tempo gasto pelas funes do MatLab fft() e ifft(). Comparar o tempo de processamento e comentar. Dica: Para medir o tempo de processamento pode-se utilizar os comandos tic e toc da seguinte forma:
TempoInicio = tic(); % cdigo TempoDespendido = toc(TempoInicio)

Data de Entrega: 17/02/14 (segunda-feira)


Fazer um relatrio no Word contendo todos os cdigos e/ou linhas de comando do MatLab, todos os resultados, figuras e comentrios.

Enviar para o e-mail: milena@eletrica.ufu.br