clear all, close all, clc

%% Simulazione del Tempo Discreto

fNorm = 0.05; % Variabile scalare, o anche un array 1x1
n = 0:100; % Array di elementi da 0 a 100, primo indice dell'array è 1

Sinusoide = sin(2*pi*fNorm*n); % prodotto scalare per vettore e poi funzione sul vettore

%% Disegno

FigHandler = figure; % creo una figura e salvo il riferimento all'oggetto per gestirne le proprietà

StemHandler = stem(n,Sinusoide); % Disegno con impulsi, salvo l'handler del plot per gestirne le proprietà (non visto in questo lab)

FigHandler.CurrentAxes.YLim = [-1.5 1.5]; hold on; grid on % cambio i limiti dell'asse y
pause

%% Alcuni Filtri, vedi fdatool, uso del plot

LowPass = [0.5 1 0.5]; % vettore riga
LowPass = LowPass/sum(abs(LowPass)); % normalizzo in modo che i coefficienti sommino a 1 in modulo

fvtool(LowPass, 1) % strumento per l'analisi dei filtri numerici
pause

LowPassed = conv(Sinusoide, LowPass, 'same'); % faccio la convoluzione, vedi "help conv" sulla command window per il significato di 'same'

FigHandler = figure; % creo una figura e salvo il riferimento all'oggetto per gestirne le proprietà

StemHandler = stem(n,Sinusoide); 
hold on; grid on

StemHandler = stem(n,LowPassed);

FigHandler.CurrentAxes.YLim = [-1.5 1.5];
FigHandler.CurrentAxes.Title.String = sprintf('Sinusoide attraverso passa basso con normalized frequency f = %g', fNorm);
% Inserisco il titolo con una stringa formattata tramite l'handler, si può fare anche con title(sprintf('...'))
FigHandler.CurrentAxes.XLabel.String = 'n [samples]';
% Inserisco il titolo dell'asse x tramite l'handler, si può fare anche con xlabel('...')
FigHandler.CurrentAxes.YLabel.String = 'sin(2\pifn)';
% Inserisco il titolo dell'asse y tramite l'handler, si può fare anche con ylabel('...')
pause

HighPass = [-0.5 1 -0.5];
HighPass = HighPass/sum(abs(HighPass)); % normalizzo

fvtool(HighPass, 1)
pause

HighPassed = conv(Sinusoide, HighPass, 'same');

FigHandler = figure;
StemHandler = stem(n,Sinusoide);
hold on; grid on

StemHandler = stem(n,HighPassed);

FigHandler.CurrentAxes.YLim = [-1.5 1.5];
FigHandler.CurrentAxes.Title.String = sprintf('Sinusoide attraverso passa alto con normalized frequency f = %g', fNorm);
FigHandler.CurrentAxes.XLabel.String = 'n [samples]';
FigHandler.CurrentAxes.YLabel.String = 'sin(2\pifn)';
pause

% DA QUI IN POI NON ANCORA VISTO A LEZIONE

%% Frequenza Variabile

n = 1:500; % vettore riga [1,2,3,....N]
Chirp = sin(2*pi/3e3*n.^2); % Sinusoide a freq normalizzata che cresce come n/3000

LowPassedChirp = conv(Chirp, LowPass, 'same');

FigHandler = figure; 

StemHandler = stem(n,Chirp); 
hold on; grid on

StemHandler = stem(n,LowPassedChirp);

FigHandler.CurrentAxes.YLim = [-1.5 1.5];
FigHandler.CurrentAxes.Title.String = sprintf('Chirp attraverso passa basso');
FigHandler.CurrentAxes.XLabel.String = 'n [samples]';
FigHandler.CurrentAxes.YLabel.String = 'sin(2\pifn)';
pause

% Disegno un filtro passa banda tra 0.1 e 0.2 con una funzione matlab, vedi "help butter"
% su command window

[Num, Den] = butter(6, 2*[0.1 0.2]);
fvtool(Num, Den)
pause

FilteredChirp = filter(Num, Den, Chirp); % Gestisco il filtraggio di un filtro con un Denominatore
% (al contrario dei filtri usati in precedenza dove bastava la convoluzione, il denominatore qui è diverso da 1)

FigHandler = figure;

StemHandler = stem(n,Chirp);
hold on; grid on

StemHandler = stem(n,FilteredChirp);

FigHandler.CurrentAxes.YLim = [-1.5 1.5];
FigHandler.CurrentAxes.Title.String = sprintf('Chirp attraverso passa banda');
FigHandler.CurrentAxes.XLabel.String = 'n [samples]';
FigHandler.CurrentAxes.YLabel.String = 'sin(2\pifn)';
pause

%% Fir1 Stopband

% Uso la funzione fir1 (help fir1 per capirne di più) per costruire uno
% stoppabanda FIR (Finite Impulse Response, che significa all'atto pratico con solo il Numeratore, quindi il
% Denominatore è 1)PrimoLab_1_Studenti

Num = fir1(100, [0.1 0.2], 'stop');
Den = 1;
fvtool(Num,Den)
pause

FilteredChirp = filter(Num, Den, Chirp);

FigHandler = figure; 

StemHandler = stem(n,Chirp); 
hold on; grid on

StemHandler = stem(n,FilteredChirp); 

FigHandler.CurrentAxes.YLim = [-1.5 1.5];
FigHandler.CurrentAxes.Title.String = sprintf('Chirp attraverso stoppa banda');
FigHandler.CurrentAxes.XLabel.String = 'n [samples]';
FigHandler.CurrentAxes.YLabel.String = 'sin(2\pifn)';
pause