Ta = 0.01;
f0=1;
T0 = 1/f0;
Np=10; %A questao pede apos N numero de passos
t = [0:Ta:(Np*T0)-Ta]'; %É imṕortante retirar o ultimo Ta, pois a última, em fourier, já é entendida como a primeira  da próxima iteração do sinal
x = sin(2*pi*f0*t);
[X,fx] = DFT(x,Ta);
stem(fx,abs(X));


T0=5 %%A questão pede após 5s
t = [0:Ta:(T0-Ta)]';
y = sin(10*pi*f0*t) + cos(12*pi*f0*t) + cos(14*pi*f0*t - pi/4);
%A frequencia de uma soma de senos e cossenos é o MDC das frequencias dos sinais que compões este sinal 
[Y, fy] = DFT(y,Ta);
plot(t,y);

T0 = 5;
t = [0:Ta:(T0-Ta)]';
f0=1;
z = (square (2*pi*f0*t)+1)/2; %square sozinho vai entre -1 e 1, adicionamos 1 e logo apos dividimos por 2 para que os valores fiquem condizentes
[Z, fz] = DFT(z,Ta);
plot(t,z);

%TESTANDO A FUNÇÃO IDFT E DFT E PERCEBEMOS QUE O GRAFICO É IGUAL
[z1,t1]=IDFT(Z,fz);
plot(t1,z1);



T0 = 5;
t = [0:Ta:(T0-Ta)]';
f0=1;
q = sawtooth(2*pi*f0*t+pi/2, 1/2);%Usamos os segundo parametro para ter certeza de que teremos uma onda TRIANGULAR, nao dente de serra
plot(t,q);

%TESTANDO A FUNÇÃO IDFT E DFT E PERCEBEMOS QUE O GRAFICO É IGUAL
[Q,fq] = DFT(q,Ta);
[q3,t3] = IDFT(Q,fq);
plot(t3,q3);

%QUESTAO NUMERO 5
Ta=0.01;
T0 = 5;
t = [0:Ta:(T0-Ta)]';
y = sin(10*pi*t) + cos(12*pi*t) + cos(14*pi*t - pi/4);

%TESTANDO A FUNÇÃO IDFT E DFT E PERCEBEMOS QUE O GRAFICO É IGUAL
[Y,f] = DFT(y,Ta);
[y2,t2] = IDFT (Y,f);
figure(2);
plot(t,y);
figure(3)
plot (t2,y2);

%QUESTAO NUMERO 6%
Ta=0.01;
x=[-5:Ta:5]';
y=x';
N=length(x);
z=zeros(N,N);
for m=1:N
for n=1:N
    z(m,n)= sin(2*pi*(2*x(m)+y(n)));  % pode ser simplificado como z(:,N)=sin(2*pi(2*x+y(n))
end
end
mesh(x,y,z) %funcao pra graficos 3 dimensoes
view(2);
colorbar;

%B%
[Z,fx,fy] = DFT2(z,Ta);
mesh(fx,fy,abs(Z));

%EXTRA%
Ta=0.01;
x=[-5:Ta:5]';
y=x';
N=length(x);
z=zeros(N,N);
for m=1:N
for n=1:N
    z(m,n)= sin(2*pi*sqrt(((x(m)).^2)+(y(n).^2)));  % pode ser simplificado como z(:,N)=sin(2*pi(2*x+y(n))
end
end

[Z,fx,fy] = DFT2(z,Ta);
mesh(fx,fy,abs(Z));




IDFT2(Z,fx,fy);
mesh(x,y,z);

Ta = 0.2 / 100;

t = 0:Ta:2-Ta;

f = 1;
T = f^-1;



%%teste
x = sawtooth(2*pi*f*t + pi/2  , 1/2);

plot(t,x);

[X1,f1] = DFT(x,Ta);

plot(f1, abs(X1));
%%teste
x = sawtooth(2*pi*f*t + pi/2  , 1/2);

plot(t,x);

[X1,f1] = DFT(x,Ta);

stem(f1,X1)

%


t = 0:1/12:12;
y=cos(4*pi*t+pi/3)+ cos(16*pi*t-pi/4);
[x,t] = DFT(y,1/12)
plot(t,abs(x))
%%


%

function [x,f] = Espetro(x,Ta)
    N = length(x)    
    x = fftshift(fft(x))/N;
    fa = 1/Ta
    Fq_fundamental = (1/Ta) * N % a frequencia de amostragem é 1/Ta, logo se nos for dado que foi repetido N vezes, devemos multiplicar por N para ter a frequencia fundamental
    f = [0: (N-1)]' * Fq_fundamental - fa/2
    xlim
    stem(f, abs(x))
end

%####################UTIL#####################%
%fft()          %Usamos para encontrar os Ck para o cálculo
%fftshift()     %Usamos para a entrega dos resultados da função fft virem
%na forma e ordem correta de -fa/2 ate fa/2
%ifft()         Nos retorna o inverso do fft
%mesh()         Grafico 3 dimensoes. 
% view()        Se usarmos o comando view apos o mash, podemos selecionar se queremos visao 2d ou 3d
%sawtooth()     Dente de Serra------argumento 1/2 para triangular
%Squares()      Quadrada

%

function [x,f] = DFT(x,Ta)
fa = 1/Ta;
N = length(x);
f = [0:(N-1)]'/ (N*Ta) - fa/2;  %%ENTENDER MELHOR ESTA PARTE
x = fftshift(fft(x)/N);
end

function [x,t] =  IDFT (X,f)  %oposto da DFT
  N = length(X);
  fa = -f(1)*2;     %%sabemos que o primeiro f(1) é sempre -fa/2, logo basta usar um jogo matemático
  Ta = 1/fa;
  t = [0:(N-1)]'*Ta;
  x = ifft(ifftshift(X)) * N; 
end

function [Z,fx,fy] = DFT2(z,h)
fa=1/h;
[M,N] = size(z);
fx = [0:(M-1)]'/(M*h)-fa/2;
fy = [0:(N-1)]'/(N*h)-fa/2;
Z = fftshift(fft2(z)/(M*N));
end

function [z,x,y] = IDFT2(Z,fx,fy)%oposto da DFT2
[M,N] = size(Z);
fax=-fx(1)*2;
hx=1/fax;
fay=-fy(1)*2;
hy=1/fay;
x=[0:(M-1)]'*hx;
x=[0:(N-1)]*hy;
z=real(ifft2(ifftshift(Z)*M*N));
end