Você está na página 1de 3

Trabalho 4 – Processamento Digital de Sinais

Cálculo da DFT, da IDFT, da FFT e da IFFT

1 – Introdução

A FFT é um recurso numérico extremamente poderoso na obtenção do


espectro de frequência de um determinado sinal.

No MatLab as funções fft(...), ifft(...) e fftshift(...) realizam o trabalho de


transformação direta para o domínio da frequência, a transformação
inversa do domínio da frequência, e ajuste da frequência zero para o
centro do gráfico da FFT.

Para um sinal (vetor) de entrada de comprimento N, a transformada de


Fourier discreta (DFT) (calculada pela função fft(...)) será o vetor X,
também de comprimento N, calculado por

N 1
X [k ]   x[n]e  j 2 nk / N , 0  k  N 1 (1)
n0

E a transformada de Fourier discreta inversa (IDFT) (calculada pela


função ifft(...)):

1 N 1
x[n]   X [k ]e j 2 nk / N , 0  n  N 1 (2)
N k 0

A função fftshift(...) desloca a componente de frequência zero para o


centro do espectro. Para um vetor X, a execução de fftshift (X) troca de
lugar as metades esquerda e direita do vetor. Para uma matriz Y, a
execução de fftshift (Y) troca o primeiro e terceiro quadrantes e o segundo
e quarto quadrantes.

1
Atividades:

1. A transformada de Fourier é comumente usada para se encontrar as


componentes de frequência existentes em um sinal ruidoso.
O programa abaixo realiza as seguintes tarefas:

- Considera um sinal contínuo no tempo amostrado a 1000 Hz.


- Forma um sinal contendo componentes senoidais de 50 e 120Hz.
- Acrescenta algum ruído randômico de média zero.
- Calcula a fft do sinal.
- Calcula e plota a potência 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 ruído
r = 2*randn(size(t)); % ruído de média zero
y = x + r; % sinal ruidoso
plot(t(1:50),y(1:50))
title('Sinal Corrompido por Ruído de Média Zero')
xlabel('tempo (milisegundos)')
Y = fft(y,512); % espectro de freqüência
Pyy = Y.* conj(Y) / 512; % potência 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


frequência, mas com amplitudes e fases diferentes. Aplique a função
fft( ) a cada um dos sinais (x1, x2) e à soma deles. Plote os sinais
originais e o módulo da resposta em frequência de cada um deles
usando a função stem( ). Verifique a frequência do sinal resultante
e comente o resultado.
x1 (n)  sen(2 .0, 05.n)
x2 (n)  4sen(2 .0, 05.n   / 4)

2
3. Calcule a transformada de Fourier discreta de um pulso retangular
usando a função fft( ) e discuta os resultados.

4. Aplique a função fftshift( ) ao pulso retangular e discuta o resultado e a


diferença em relação 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 número de quadros deve ser calculado conforme a equação abaixo.

𝑛ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑎𝑚𝑜𝑠𝑡𝑟𝑎𝑠
𝑛ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑞𝑢𝑎𝑑𝑟𝑜𝑠 =
𝑡𝑎𝑚𝑎𝑛ℎ𝑜 𝑑𝑜 𝑞𝑢𝑎𝑑𝑟𝑜

Escolher como número de quadros o valor inteiro mais próximo superior.


O último quadro deve ser preenchido com os dados do arquivo se houver
dados nele, caso contrário deve-se preenchê-lo com zeros.

Entrega:
Fazer um relatório contendo todos os códigos e/ou linhas de comando do MatLab,
todos os resultados, figuras e comentários.

Enviar o relatório pelo moodle!

Você também pode gostar