gela
31-05-2010, 19:08
Buongiorno, devo eliminare un rumore del tipo A*cos(w0*t), causato da effetto Larsen, da un segnale audio. Ipotizzando di conoscere la frequenza fondamentale 'f0'del rumore devo costruire un filtro.
Io avevo pensato ad un gradino+rect+gradino, opportunamente scalati e traslati, con il quale moltiplicare la trasformata di fourier del segnale. Il filtro in codice è questo:
function [y]= filtro2(s, Fs, f0)
N=length(s);
FTs=fftshift(fft(s));
ff=(-Fs/2):Fs/N:((Fs/2)-(Fs/N)); %asse freq
Df=abs(ff(2)-ff(1));
%Filtro
filtro=(gradino(-ff-(f0+Df))+rect(ff/(2*(f0-Df)))+gradino(ff-(f0+Df)));
figure(2)
plot(ff, filtro)
xlabel('f')
ylabel('S(f)')
title('Filtro applicato al segnale')
FTsnr= FTs.*filtro; %tolgo il rumore
%grafici
figure(3);
subplot(2,1,1)
semilogy(ff, abs(FTs))
xlabel('f')
ylabel('S(f)')
title('Trasformata segnale si ingresso al filtro')
subplot(2,1,2)
semilogy(ff, abs(FTsnr))
xlabel('f')
ylabel('S(f)')
title('Trasformata segnale in uscita dal filtro');
y=ifft(ifftshift(FTsnr));
Qusto è il filtro: http://img443.imageshack.us/img443/3673/filtrot.jpg
La trasformata FTsnr (segnale senza rumore)viene identica alla FTs (segnale con rumore) a parte i due impulsi del cos che sono stati eliminati dal filtro.
http://img139.imageshack.us/img139/8672/segnali.jpg
Il mio problema è che sento un tic all'inizio e uno alla fine della riproduzione, ma se la trasformata graficamente è uguale perché non riesco a sentire il segnale?
All'inizio pensavo fosse per questa istruzione "y=ifft(ifftshift(FTsnr));" ma al posto di FTsnr ho provato a mettere FTs e funziona.
Sapete dirmi dov'è il problema?
Grazie
Io avevo pensato ad un gradino+rect+gradino, opportunamente scalati e traslati, con il quale moltiplicare la trasformata di fourier del segnale. Il filtro in codice è questo:
function [y]= filtro2(s, Fs, f0)
N=length(s);
FTs=fftshift(fft(s));
ff=(-Fs/2):Fs/N:((Fs/2)-(Fs/N)); %asse freq
Df=abs(ff(2)-ff(1));
%Filtro
filtro=(gradino(-ff-(f0+Df))+rect(ff/(2*(f0-Df)))+gradino(ff-(f0+Df)));
figure(2)
plot(ff, filtro)
xlabel('f')
ylabel('S(f)')
title('Filtro applicato al segnale')
FTsnr= FTs.*filtro; %tolgo il rumore
%grafici
figure(3);
subplot(2,1,1)
semilogy(ff, abs(FTs))
xlabel('f')
ylabel('S(f)')
title('Trasformata segnale si ingresso al filtro')
subplot(2,1,2)
semilogy(ff, abs(FTsnr))
xlabel('f')
ylabel('S(f)')
title('Trasformata segnale in uscita dal filtro');
y=ifft(ifftshift(FTsnr));
Qusto è il filtro: http://img443.imageshack.us/img443/3673/filtrot.jpg
La trasformata FTsnr (segnale senza rumore)viene identica alla FTs (segnale con rumore) a parte i due impulsi del cos che sono stati eliminati dal filtro.
http://img139.imageshack.us/img139/8672/segnali.jpg
Il mio problema è che sento un tic all'inizio e uno alla fine della riproduzione, ma se la trasformata graficamente è uguale perché non riesco a sentire il segnale?
All'inizio pensavo fosse per questa istruzione "y=ifft(ifftshift(FTsnr));" ma al posto di FTsnr ho provato a mettere FTs e funziona.
Sapete dirmi dov'è il problema?
Grazie