clear all; close all; echo on;
%----------------------------------------------------------------------------
% Exercício 1: Geração de Sinais
%----------------------------------------------------------------------------

% 1.1)	Gere uma função x(n)=Acos(wn/N) com N=1024 amostras, A=1, f=25Hz.
%----------------------------------------------------------------------------

% Inicializacao das variaveis
N=1024; % numero de amostras
A=1;    % amplitude 
f=25;% frequencia angular

% Geracao do sinal x(n)=Acos(wn/N)
n = 1:N;            % tempo discreto (vetor abscissa)
x = A*cos(2*pi*f*n/N);   % sinal (vetor ordenada)

% -------------------------------------------
% Calcule a Transformada de Fourier Discreta  
% -------------------------------------------
X = fft(x);

% -------------------------------------------
% Construa os gráficos de x(n) e |X(k)|
% -------------------------------------------

% calculando o modulo de X(k)
Modulo_X = abs(X);

% construindo os graficos
figure,
subplot(2,1,1),plot(n,x)
subplot(2,1,2),plot(n,Modulo_X)
pause, close

% 1.2)	Modifique o valor da amplitude para A=100. 
%----------------------------------------------------------------------------
A=100;
x = A*cos(2*pi*f*n/N);
X = fft(x);
Modulo_X = abs(X);
% construindo os graficos
figure,
subplot(2,1,1),plot(n,x)
subplot(2,1,2),plot(n,Modulo_X)
pause, close

% 1.3)  Gere uma função y(n)= sum[A(i) cos(w(i)n/N)] com N=1024 amostras
%       A = [1 10 50 100], w = [50pi 100pi 500pi 1000pi]
%----------------------------------------------------------------------------

% gerando o sinal y(n)
y=zeros(1,N); % inicializando o vetor y com N amostras
A = [4 2 2 3];
f = [25 100 150 300];
for i=1:4
    y = y + A(i)*cos(2*pi*f(i)*n/N);
end

% -------------------------------------------
% Calcule a Transformada de Fourier Discreta
% -------------------------------------------
Y = fft(y);

% -------------------------------------------
% Construa os gráficos de y(n) e |Y(k)|
% -------------------------------------------

% calculando o modulo de Y(k)
Modulo_Y = abs(Y);

% construindo os graficos
figure,
subplot(2,1,1),plot(n,y)
subplot(2,1,2),plot(n,Modulo_Y)
pause, close


% 1.4)	Utilize um filtro passa-baixa, com freqüência de corte fc=40Hz, no sinal y(n)
%       Construa o gráfico do sinal filtrado. Comente o resultado
%----------------------------------------------------------------------------

% Inicializacao das Variaveis
Ordem_Filtro = 7;
fc= 40;
Wn = fc/N;      % frequencia normalizada

%Filtro Butter
[B,A] = butter(Ordem_Filtro,2*Wn);
[H2, wT] = freqz(B, A, N/2);
normfreq = wT/(2*pi);

% Grafico da resposta do filtro
figure,
subplot(4,1,1),plot(1:N/2, abs(H2),'r-');  
subplot(4,1,2),plot(1:N/2,Modulo_Y(1:N/2)); 
pause

z = filter(B, A, y); % Filtragem do Sinal y(n)
Z = fft(z); % FFT do sinal filtrado z(n)
Modulo_Z = abs(Z);

% Grafico do espectro do sinal filtrado
subplot(4,1,3),plot(n, z,'r-');  
subplot(4,1,4),plot(1:N/2,Modulo_Z(1:N/2)); 
pause, close

% 1.5)	Utilize um filtro passa-alta, com freqüência de corte fc=200Hz, no sinal y(n)
%       Construa o gráfico do sinal filtrado. Comente o resultado
%----------------------------------------------------------------------------

% Inicializacao das Variaveis
Ordem_Filtro = 7;
fc= 200;
Wn = fc/N;      % frequencia normalizada

%Filtro Butter
[B,A] = butter(Ordem_Filtro,2*Wn,'high');
[H2, wT] = freqz(B, A, N/2);
normfreq = wT/(2*pi);

% Grafico da resposta do filtro
figure,
subplot(4,1,1),plot(1:N/2, abs(H2),'r-');  
subplot(4,1,2),plot(1:N/2,Modulo_Y(1:N/2)); 
pause

z = filter(B, A, y); % Filtragem do Sinal y(n)
Z = fft(z); % FFT do sinal filtrado z(n)
Modulo_Z = abs(Z);

% Grafico do espectro do sinal filtrado
subplot(4,1,3),plot(n, z,'r-');  
subplot(4,1,4),plot(1:N/2,Modulo_Z(1:N/2)); 
pause,close

echo off


