% Verifica computazionale DFT


clear;
close all;

Fs=8000;
Ts=1/Fs;
f1=100; % frequenza di test
N=80;  % dimensione in numero di campioni della finestra di segnale da analizzare

% Generazione di una finestra N di campioni di un tono puro a frequenza f1

for n=0:N-1
    x(n+1)=sin(2*pi*f1*n*Ts);
end
plot(x);
s1=x; % s1 è la funzione di trasformazione

% Test della trasformata diretta di Fourier relativamnte alla condizione:
% se f coincide con la frequenza e la funzione di trasformazione (seno)
% allora il risultato del calcolo è non nullo;


X1=0;
for n=1:N
    X1=X1+x(n)*s1(n); % calcolo parziale della DFT relativamente alla sola frequenza f=f1
end

% Il risultato di questo calcolo è l'ampiezza della componente frequenziale
% in x moltiplicato per il fattore di scala computazionale N

f2=200; % nuova frequenza per la funzione di trasformazione f2!=f

for n=0:N-1
    s2(n+1)=sin(2*pi*f2*n*Ts);
end

% s2 è la nuova funzione di trasformazione 

X2=0;   % Ampiezza della seconda frequenza f2

for n=1:N
    X2=X2+x(n)*s2(n); % calcolo DFT per f=f2
end

% il risultato di questo calcolo sarà nullo perchè f2!=f, cioè in x la componente
% frequenziale alla frequenza f è di ampiezza nulla, cioè tale componente
% frequenziale non è presente in x.


% composizione di un tono complesso (bitono): somma di due toni puri (100 Hz + 0.5 200 Hz)

x12=0;
for n=1:N
    x12(n)=s1(n)+0.5*s2(n); % x12 è il mix di 2 frequeze (f1 e f2)
end

figure;
plot(s1);
figure;
plot(s2);
figure;
plot(x12);

% Analisi frequenziale discreta di Fourier (DFT) per f1 e f2

X21=0;
X22=0;
for n=1:N
    X21=X21+x12(n)*s1(n);   % misura della componente a 100 Hz
    X22=X22+x12(n)*s2(n);   % misura della componente a 200 Hz
end

% Composizione grafica dello spettro frequenziale (empirica)

%calcolo dell'ampiezza effettiva;
    
X21=(X21/N)*2; 
X22=(X22/N)*2;

for k=1:400
    X(k)=0;
end

X(100)=X21;
X(200)=X22;

plot(X);

    






