%% Periodicidade
%
% Prova da periodicidade de senóiides discretas, baseada na seção 9.1 do Lathi
%
clear all; close all; clc

% Numero de ciclos da senoide
Nciclos = 3;

%% Senoide periodica
%
% Garantimos que Omega/2*pi = m/No seja um numero racional
%

% Frequencia angular da senoide
W = 0.1*pi;

% Exibindo os resultados
display('----- Omega:')
display(W);
display('----- Verificacao da periodicidade:')
display(W/(2*pi))
display('----- Periodo da senoide:')
display(2*pi/W)

while 1
    
    % Esperando o usuario entrar com o m
    display('Digite o menor valor inteiro para multiplicar o resultado anterior e faze-lo um inteiro:')
    m = input('> ');
    
    % Conferindo o resultado
    display('Conferindo:')
    display(m*2*pi/W)
    
    display('O resultado eh um numero inteiro? {0,1}')
    resp = input('> ');
    
    if resp
        break
    end
end

% Calcula e mostra o valor do periodo da onda:
No = m*(2*pi/W);

display('----- Periodo da senoide:')
display(No)

% Calcula o eixo discreto do tempo
n = 0:Nciclos*No;

% Exibe os resultados
figure
stem(n,cos(W*n),'.k')
title('Uma senoide periodica')
xlabel('n'); grid on

%% Senoide nao periodica
%
% Nao passamos nenhuma garantia de que Omega/2*pi = m/No seja um numero racional
%

% Frequencia angular da senoide
W = 0.8;

% Exibindo os resultados
display('----- Omega:')
display(W);
display('----- Verificacao da periodicidade:')
display(W/(2*pi))
display('----- Periodo da senoide:')
display(2*pi/W)
display('Nao ha valor inteiro que faca o valor anterior se tornar inteiro, digite o periodo da onda:')
No = input('> ');

% Calcula o eixo discreto do tempo
n = 0:Nciclos*No;

% Exibe os resultados
figure
stem(n,cos(W*n),'.k')
title('Uma senoide aperiodica')
xlabel('n'); grid on








