% Programmazione e architetture DSP
% Prof. Mario Malcangi
% 
% Simulazione in ambiente Matlab  della teoria della sintesi e analisi
% frequenziale di FOURIER.

clear;
close all;

% Inizio Setup 
Fs=8000;    % [Hz]
Ts=1/Fs;    %[s]
D=1;        %[s]    Durata complessiva del segnale
N=1/Ts;     %[campioni]  Numeri di campioni corrispondenti alla durata D
f0=10;      %[Hz]       Frequenza del segnale x
f1=20;      %[20 Hz]    Frequenza del segnale x1
W=0.1*N;    %[campioni] Finestra di analisi (1/10 di secondo)
F0=1/(W*Ts);% [Hz] Frequenza fondamentale di analisi   
%Fine setup

% Sintesi di segnali elementari (sinusoidi) e complessi campionati
for n=0:W-1
    x(n+1)=sin(2*pi*f0*n*Ts);   % Campionamento di una sinusoide a f0 Hz
    x1(n+1)=0.25*sin(2*pi*f1*n*Ts);% Campionamento di una sinusoide a f1 Hz
    x2(n+1)=x(n+1)+x1(n+1);       % Sintesi additiva
end
figure;
plot(x);    % Visualizza il segnale campionato x
figure;
plot(x1);   % Visualizza il segnale campionato x1
figure;
plot(x2);   % Visualizza il segnale campionato x2
% Fine sintesi segnali campionati

% Calcolo dello spettro frequenziale
Xi(1:W/2)=0; % Alloca un vettore di dati X inizializzato a 0 di dimensione W/2
            % X sarà il vettore di campionamento dello spettro frequenziale
Xr(1:W/2)=0; % Alloca un vettore di dati X inizializzato a 0 di dimensione W/2
            % X sarà il vettore di campionamento dello spettro frequenziale
for(k=0:(W/2)-1)    % Ciclo di campionamento delle frequenze
    for n=0:W-1     %Ciclo di calcolo delle frequenze
        Xi(k+1)=Xi(k+1)+x2(n+1)*sin(2*pi*k*F0*n*Ts); 
        Xr(k+1)=Xr(k+1)+x2(n+1)*cos(2*pi*k*F0*n*Ts);
    end
end
Xi=(Xi/W)*2;    %Scaling 2/W
Xr=(Xr/W)*2;    %Scaling 2/W
Xa=sqrt(Xi.^2+Xr.^2); % spettro di ampiezza
figure;
Fax=(0:F0:(Fs/2)-1); % genera la scala frequenziale per il plot
plot(Fax,Xa); 
    

    
    