Meu ultimo trabalho na disciplina de Analise de Sistemas Lineares foi fazer uma aplicacao da transformada de fourier. Usei o matlab para dimensionar e simular um filtro digital para filtrar ruidos em um sinal. Segue abaixo o codigo:%% INICIALIZACAO DAS VARIAVEIS E DEFINICAO DO SINALfs = 500; % frequencia de amostragemTs = 1/fs; % periodo de amostragemt = 0:Ts:1-Ts; % intervalo de amostragemn = length(t); % tamanho do vetorf1 = 6; % frequencia 1f2 = 20; % frequencia 2A1 = 0.7; % amplitude 1A2 = 1; % amplitude 2x = A1*sin(2*pi*f1*t) + A2*sin(2*pi*f2*t);y = awgn(x,2,'measured');% plotando o sinalfigure(1)subplot(2,1,1)plot(t,x),title('Onda senoidal 6Hz + 20Hz'),gridsubplot(2,1,2)plot(t,y,'r'),title('Sinal com Ruido'),gridxlabel('Tempo (s)')ylabel('y(t)')%% TRANSFORMADA DE FOURIERY = fft(y); % modulo da transformada de fourier% plota a transformada em troncosfigure(2)plot(abs(Y)); gridxlabel('Frequencia?')ylabel('Amplitude?')title('Primeira iteracao da FFT')%% NORMALIZANDO E CENTRALIZANDO O ESPECTRO DE FREQUENCIAN = length(x); % numero de pontos da fftw = -fs/2:fs/2-1; % intervalo de frequencia centralizado% a amplitude apos fft e uma funcao do numero de pontos,%technical note 1702Yshift = fftshift(Y); % plota a transformada normalizada em troncosfigure(3)plot(w,2*abs(Yshift)/N);gridxlabel('Frequencia (Hz)')ylabel('Amplitude')title('FFT centralizada')%% CRIANDO UM FILTRO DIGITALfil1 = [zeros(1,N/2-f1),ones(1,1),zeros(1,N/2-1+f1)];fil2 = [zeros(1,N/2+f1),ones(1,1),zeros(1,N/2-1-f1)];fil3 = [zeros(1,N/2-f2),ones(1,1),zeros(1,N/2-1+f2)];fil4 = [zeros(1,N/2+f2),ones(1,1),zeros(1,N/2-1-f2)];fil = fil1+fil2+fil3+fil4;figure(4)plot(w,2*abs(Yshift)/N,w,2*fil,'-.r')gridxlabel('Frequencia (Hz)')ylabel('Amplitude')title('Faixa de Corte do Filtro')axis([-80 80 0 1.1])legend('Espectro de Frequencia','Frequencia de Corte')%% APLICANDO O FILTRO DIGITAL E A TRANSFORMADA INVERSA DE FOURIERYf = fil.*Yshift;yf = ifft(fftshift(Yf));figure(5)subplot(2,1,1)plot(t,real(yf)),title('Sinal apos aplicacao do filtro'),gridsubplot(2,1,2)plot(t,x),title('Sinal Original'),gridxlabel('Tempo (s)')ylabel('y(t)')O codigo e bem auto explicativo, mas ainda acho valido falar algumas coisas:- fft retorna o espectro de frequencia negativo, se todas as componentes do sinal forem reais.- fftshift(y) desloca o espectro de frequencia no tempo. Como o grafico da fft(y) e simetrico apos Fs/2 (Frequencia de Nyquist), o ideal e que a representacao do espectro de frequencia seja centralizado no zero.- O algoritimo da fft no matlab retorna uma magnitude (Amplitude) de A*N/2, ou seja, a amplitude real da componente de frequencia e Anorm = 2*A/N.- Quando aplicar a ifft, nao aplicar sobre o modulo da fft, pois o espectro positivo vai gerar um deslocamento de pi/2 no sinal de saida devido a uma componente complexa. Apos a aplicacao de ifft de um sinal puramente real, uma componente complexa da ordem de 10^-15 ainda pode estar presente, por isso e importante plotar apenas a parte real.O filtro foi dimensionado em funcao das frequencias que nos escolhemos, mas, em um caso real, o sinal adquirido teria uma frequencia desconhecida, assim o filtro teria que "envolver" os picos mais relevantes do espectro de frequencia.Ate a proxima. "Fragil voce tem tanta vontade de chorar, tanta vontade de ir embora. Para que o protejam, para que sintam falta. Tanta vontade de viajar para bem longe, romper todos os lacos, sem deixar endereco. Um dia mandara um cartao-postal de algum lugar improvavel. Bali, Madagascar, Sumatra. Escrevera: penso em voce. Deve ser bonito, mesmo melancolico, alguem que se foi pensar em voce num lugar improvavel como esse. Voce se comove com o que nao acontece, voce sente frio e medo. Parado atras da vidraca, olhando a chuva que, aos poucos comeca a passar."Caio Fernando AbreuEle sempre me entende.. hahaha! :)Vou colocar um textinho que a thata me passou e eu acho