Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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)
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)')
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.
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.
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)