clear all; close all; clc

%% Sinais discretos
%
% Será criada uma senóide discreta para demonstrar a amostragem de sinais

% Frequência de amostragem do sinal
fs = 1000;
ts = 1/fs;

% Amplitude e frequência da senoide
A = 1;
fo = 10;

% Número de amostras e criação do eixo do tempo
N = 10000;
n = 0:N-1;

% Criação do sinal
x = A*cos(2*pi*fo*n*ts);

% Demonstrando os resultados
figure
subplot(3,1,1); plot(n*ts,x); title('Sinal Contínuo'); xlabel('t'); axis([0 0.2 -1.1 1.1])
subplot(3,1,2); stem(n*ts,x,'Marker','none'); title('Sinal Contínuo amostrado'); xlabel('t'); axis([0 0.2 -1.1 1.1])
subplot(3,1,3); stem(n*ts,x,'Marker','none'); title('Sinal Discreto'); xlabel('n'); axis([0 0.2 -1.1 1.1])

%% Eixo do tempo para as operações
%
% Daqui para a frente será utilizado um novo eixo do tempo

n = -20:20;

%% Deslocamento
%
% Deslocamento do sinal

figure
subplot(2,1,1); stem(n,s(n)); xlabel('n'); grid on; title('x[n]')
subplot(2,1,2); stem(n,s(n-5)); xlabel('n'); grid on; title('x[n - 5]')

%% Reversão no tempo
%
% Reversão no tempo do sinal

figure
subplot(2,1,1); stem(n,s(n)); xlabel('n'); grid on; title('x[n]')
subplot(2,1,2); stem(n,s(-n)); xlabel('n'); grid on; title('x[-n]')

%% Operações conjuntas - Primeiro desloca depois reverte

figure
subplot(3,1,1); stem(n,s(n)); xlabel('n'); grid on; title('x[n]')
subplot(3,1,2); stem(n,s(n-5)); xlabel('n'); grid on; title('x[n - 5]')
subplot(3,1,3); stem(n,s(-n-5)); xlabel('n'); grid on; title('x[-n - 5]')

%% Operações conjuntas - Primeiro reverte depois desloca

figure
subplot(3,1,1); stem(n,s(n)); xlabel('n'); grid on; title('x[n]')
subplot(3,1,2); stem(n,s(-n)); xlabel('n'); grid on; title('x[-n]')
subplot(3,1,3); stem(n,s(-(n+5))); xlabel('n'); grid on; title('x[-(n + 5)] = x[-n - 5]')

%% Decimação
%
% Redução da frequência de amostragem do sinal

figure
subplot(2,1,1); stem(n,s(n)); xlabel('n'); grid on; title('x[n]')
subplot(2,1,2); stem(n,s(2*n)); xlabel('n'); grid on; title('x[2n]')

%% Interpolação
%
% Aumento da taxa de amostragem do sinal. Realizado em duas etapas: 1)
% Criação de amostras iguais a zero entre duas amostras do sinal; 2)
% Cálculo via algoritmo de interpolação dos valores das amostras criadas.

% Eixo do tempo
n = -2:30;

% Criação de amostras zero entre as amostras do sinal
sinal_interpolado = s((1/2)*(0:20));

% Faz a interpolação via média aritmética (algoritmo desenvolvido desta
% forma é válido apenas para este sinal)
for i = 1:length(sinal_interpolado)
    
    % Se uma amostra for igual a zero
    if sinal_interpolado(i) == 0
        
        % Calcula o valor das amostras com base nas duas amostras
        % adjacentes
        sinal_interpolado(i) = (sinal_interpolado(i-1) + sinal_interpolado(i+1))/2;
        
    end
    
end

% Recria o sinal
x = [0 0 sinal_interpolado zeros(size(11:20))];

% Exibe os resultados
figure
subplot(3,1,1); stem(n,s(n)); xlabel('n'); grid on; title('Sinal')
subplot(3,1,2); stem(n,s((1/2)*n)); xlabel('n'); grid on; title('Sinal expandido')
subplot(3,1,3); stem(n,x); xlabel('n'); grid on; title('Sinal interpolado')
















