
% Cancellazione Attiva del Rumore

% Progetto di Segnali per le Comunicazioni AA 2025

% Autore:  Nome .................  Cognome  ..........................

% Data:  gg/mm/aaaa

%----------------------------------------------------------------------------------------
% Dato in ingresso il segnale audio rumoroso AudioNoisy.mat e un rumore esterno 
% Noise_ext.mat, trovare il segnale Noise_Stimato (Noise_ext ritardato) che sottratto a 
%  AudioNoisy, minimizza la potenza di Audio= AudioNoisy-Noise_Stimato.
% Scrivere il valore del ritardo trovato in secondi.
% Riprodurre e visualizzare il segnale rumoroso AudioNoisy e quello "ripulito" Audio.
%----------------------------------------------------------------------------------------

clear
close all

% Frequenza di campionamento
 Fs=22050;

% Lettura Audio+Rumore
load('AudioNoisy.mat')

% Lettura Rumore esterno
load('Noise_ext.mat')

% Intervallo di campionamento
T=1/Fs;

% Lunghezza del brano musicale in campioni
L=length(AudioNoisy);

% Durata del brano musicale in secondi
Durata=T*L

% Asse dei tempi
t=(0:L)*T;

% Grafico dei primi 30000 campioni del segnale rumoroso (blu) e del rumore (rosso)
display('Premi un tasto per visualizzare i primi 30000 campioni del segnale rumoroso (blu) e del rumore (rosso)')
figure(1)
plot(t(1:30000),AudioNoisy(1:30000))
hold on
plot(t(1:30000),Noise_ext(1:30000),'r')
hold off

% Riproduzione del brano musicale rumoroso
display('Premi un tasto per ascoltare il brano rumoroso')
pause
sound(AudioNoisy,Fs);

%**************************************************************************
%  INIZIO DEL PROGETTO
%**************************************************************************

% 1  -----------------------------------------------------------------------------------
% Calcolare la Cross-correlazione (funzione xcorr) "R" tra Rumore esterno e Audio+Rumore per stimare il
% ritardo relativo tra i due segnali.
% Attenzione, la Cross-correlazione è lunga 2*L-1 campioni ed è simmetrica rispetto all'origine.
% Tuttavia in Matlab i campioni della Cross-correlazione sono scritti in un
% vettore che va da 1 a 2*L-1. LO ZERO CAPITA DUNQUE IN POSIZIONE L.
%---------------------------------------------------------------------------------------

R=

% 2 -------------------------------------------------------------------------------------
% Riportare in figura 2 il grafico della Cross-correlazione "R" tra n=-L+1 a
% n=L-1 (ingrandire il grafico in corrispondenza del massimo per avere
% un'idea dell'entità dello shift e quindi controllare la "ragionevolezza"
% del risultato finale)

display('premi un tasto per visualizzare la Cross-correlazione tra Audio+Rumore e Rumore esterno ')
pause
figure(2)


% 3 ---------------------------------------------------------------------------------------
%  Calcolare il valore massimo (funzione max) "Rmax" e la posizione del massimo "nmax" della 
%  Cross-correlazione appena calcolata

[Rmax,nmax]=

% 4 ---------------------------------------------------------------------------------------
%  Calcolare il numero intero di campioni di shift  "n_tau" tra i 2 segnali 
% e il valore dello stesso shift espresso in secondi (tau_intero).

n_tau=
tau_intero=

% 5 ---------------------------------------------------------------------------------------
% Eseguire l'interpolazione parabolica tra i 3 campioni R0=R(nmax), Rm1=R(nmax-1) 
%  e Rp1=R(n_max+1) per trovare la posizione "tau_frazionario" del massimo 
%  della Cross-correlazione "R" 

R0=Rmax;
Rp1=R(nmax+1);
Rm1=R(nmax-1);

 .....
   

fraz_campioni=
tau_frazionario=
    

% 6 ---------------------------------------------------------------------------------------
% Eseguire lo shift del rumore estereo "Noise_ext" del "tau_frazionario"
% appena calcolato utilizzando la tecnica della FFT moltiplicata per l'exp
% complesso. Sottrarre il rumore stimato (Noise_Stimato) così ottenuto dal
% segnale audio rumoroso (AudioNoisy) ottenendo il sgnale "ripulito"
% (Audio)
% Attenzione: è necessario imporre che il risultato della "ifft" sia reale 
% per eliminare le parti immaginarie derivanti dalla precisione finita dei
% calcoli.

Esp_cmplx_formato_simmetrico=
Esp_cmplx_formato_FFT=
Noise_Stimato=
Audio=AudioNoisy-Noise_Stimato;

% 7 ---------------------------------------------------------------------------------------
% Riportare in figure 3 il grafico dei primi 30000 campioni del segnale rumoroso (blu) 
% e del segnale "ripulito" (rosso)

display('Premi un tasto per visualizzare i primi 30000 campioni del segnale rumoroso e di quello "ripulito"')
pause
figure(3)


% 8 ---------------------------------------------------------------------------------------
% Riproduzione del brano musicale "ripulito"
display('Premi un tasto per ascoltare il  brano ripulito')
pause
sound(Audio,Fs);







