Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 从音频信号中去除噪声_Matlab_Audio_Signals_Noise - Fatal编程技术网

Matlab 从音频信号中去除噪声

Matlab 从音频信号中去除噪声,matlab,audio,signals,noise,Matlab,Audio,Signals,Noise,下面是我的代码。我想从我自己用随机函数加起来的音频信号中去除噪声。下面的代码以某种方式去除了噪声,但它仍然太吵,我听不到声音。我还想添加此代码的音频文件,但在发布问题时,我没有找到任何选项,因此您可以添加任意两个通道的.wav声音文件。任何评论或提示都会很有帮助,谢谢 close all clear clc [x,fs] = audioread('cello.wav'); whos x;

下面是我的代码。我想从我自己用随机函数加起来的音频信号中去除噪声。下面的代码以某种方式去除了噪声,但它仍然太吵,我听不到声音。我还想添加此代码的音频文件,但在发布问题时,我没有找到任何选项,因此您可以添加任意两个通道的.wav声音文件。任何评论或提示都会很有帮助,谢谢

close all
clear 
clc 


[x,fs] = audioread('cello.wav');             
whos x;                                         
 pOrig = audioplayer(x,fs);                %Signal Play
 pOrig.play;

N = size(x,1);                            
figure;
subplot(2,1,1);
stem(1:N, x(:,1));
title('Left Channel of Origional signal');
subplot(2,1,2);
stem(1:N, x(:,2));
title('Right Channel of origional signal');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 df = fs/N;
 w = (-(N/2):(N/2)-1)*df;
 y1= fft(x(:,1),N)/N;
 y2 = fftshift(y1);
 figure;
 plot(w,abs(y2));
title('Fast Fourier Transform of Origional Signal')

   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
pause
 y=x;
 y = y + randn(size(y));
 pOrig = audioplayer(y,fs);
 pOrig.play;

figure;
subplot(2,1,1);
stem(1:N, y(:,1));
title('Left Channel with Noise');  
subplot(2,1,2);
stem(1:N, y(:,2));
title('Right Channel with Noise');                     




 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 df = fs/N;
 w = (-(N/2):(N/2)-1)*df;
 y1= fft(y(:,1),N)/N;
 y2 = fftshift(y1);
 figure;
 plot(w,abs(y2));
 title('Fast Fourier Transform of Noisy Signal')
 pause  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% filter design 
 n = 10;
beginFreq = 100 / (fs/2);
endFreq =  2000  / (fs/2);
%[b,a] = butter(n,  endFreq, 'low');
%fout = filter(b,a,y);                         % input y(noisy signal)

[b,a] = butter(n,  endFreq, 'low');
fout = filter(b,a,y);                         % input y(noisy signal)



figure;
subplot(2,1,1);
stem(1:N, fout(:,1));
title('Left channel after filtering');  
 subplot(2,1,2);
 stem(1:N, fout(:,2));
 title(' Right channel after filtering');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%plot(fout); 

 df = fs/N;
 w = (-(N/2):(N/2)-1)*df;
 y1= fft(fout(:,1),N)/N; 
 y2 = fftshift(y1);
 figure;
 plot(w,abs(y2));
title('Fast Fourier Transform  after filtering');

 pOrig = audioplayer(fout,fs);
 pOrig.play;

您正在使用randn()函数添加噪声,该函数生成高斯噪声,即白噪声。白噪声在整个频谱中具有恒定的功率,这意味着您正在添加0到20kHz的噪声(仅考虑音频频谱)

close all
clear 
clc 


[x,fs] = audioread('cello.wav');             
whos x;                                         
 pOrig = audioplayer(x,fs);                %Signal Play
 pOrig.play;

N = size(x,1);                            
figure;
subplot(2,1,1);
stem(1:N, x(:,1));
title('Left Channel of Origional signal');
subplot(2,1,2);
stem(1:N, x(:,2));
title('Right Channel of origional signal');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 df = fs/N;
 w = (-(N/2):(N/2)-1)*df;
 y1= fft(x(:,1),N)/N;
 y2 = fftshift(y1);
 figure;
 plot(w,abs(y2));
title('Fast Fourier Transform of Origional Signal')

   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
pause
 y=x;
 y = y + randn(size(y));
 pOrig = audioplayer(y,fs);
 pOrig.play;

figure;
subplot(2,1,1);
stem(1:N, y(:,1));
title('Left Channel with Noise');  
subplot(2,1,2);
stem(1:N, y(:,2));
title('Right Channel with Noise');                     




 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 df = fs/N;
 w = (-(N/2):(N/2)-1)*df;
 y1= fft(y(:,1),N)/N;
 y2 = fftshift(y1);
 figure;
 plot(w,abs(y2));
 title('Fast Fourier Transform of Noisy Signal')
 pause  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% filter design 
 n = 10;
beginFreq = 100 / (fs/2);
endFreq =  2000  / (fs/2);
%[b,a] = butter(n,  endFreq, 'low');
%fout = filter(b,a,y);                         % input y(noisy signal)

[b,a] = butter(n,  endFreq, 'low');
fout = filter(b,a,y);                         % input y(noisy signal)



figure;
subplot(2,1,1);
stem(1:N, fout(:,1));
title('Left channel after filtering');  
 subplot(2,1,2);
 stem(1:N, fout(:,2));
 title(' Right channel after filtering');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%plot(fout); 

 df = fs/N;
 w = (-(N/2):(N/2)-1)*df;
 y1= fft(fout(:,1),N)/N; 
 y2 = fftshift(y1);
 figure;
 plot(w,abs(y2));
title('Fast Fourier Transform  after filtering');

 pOrig = audioplayer(fout,fs);
 pOrig.play;
你的滤波器是一个0.1-2kHz的带通滤波器,所以根据我上面指出的,在这些频带中仍然有噪声成分。从理论上讲,不可能过滤所有的噪声成分,但是您可能希望检查维纳滤波器以获得更好的结果。实际上,如果你知道高斯噪声参数,它就是最佳滤波器,在你的例子中,它只是噪声的方差

close all
clear 
clc 


[x,fs] = audioread('cello.wav');             
whos x;                                         
 pOrig = audioplayer(x,fs);                %Signal Play
 pOrig.play;

N = size(x,1);                            
figure;
subplot(2,1,1);
stem(1:N, x(:,1));
title('Left Channel of Origional signal');
subplot(2,1,2);
stem(1:N, x(:,2));
title('Right Channel of origional signal');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 df = fs/N;
 w = (-(N/2):(N/2)-1)*df;
 y1= fft(x(:,1),N)/N;
 y2 = fftshift(y1);
 figure;
 plot(w,abs(y2));
title('Fast Fourier Transform of Origional Signal')

   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
pause
 y=x;
 y = y + randn(size(y));
 pOrig = audioplayer(y,fs);
 pOrig.play;

figure;
subplot(2,1,1);
stem(1:N, y(:,1));
title('Left Channel with Noise');  
subplot(2,1,2);
stem(1:N, y(:,2));
title('Right Channel with Noise');                     




 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 df = fs/N;
 w = (-(N/2):(N/2)-1)*df;
 y1= fft(y(:,1),N)/N;
 y2 = fftshift(y1);
 figure;
 plot(w,abs(y2));
 title('Fast Fourier Transform of Noisy Signal')
 pause  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% filter design 
 n = 10;
beginFreq = 100 / (fs/2);
endFreq =  2000  / (fs/2);
%[b,a] = butter(n,  endFreq, 'low');
%fout = filter(b,a,y);                         % input y(noisy signal)

[b,a] = butter(n,  endFreq, 'low');
fout = filter(b,a,y);                         % input y(noisy signal)



figure;
subplot(2,1,1);
stem(1:N, fout(:,1));
title('Left channel after filtering');  
 subplot(2,1,2);
 stem(1:N, fout(:,2));
 title(' Right channel after filtering');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%plot(fout); 

 df = fs/N;
 w = (-(N/2):(N/2)-1)*df;
 y1= fft(fout(:,1),N)/N; 
 y2 = fftshift(y1);
 figure;
 plot(w,abs(y2));
title('Fast Fourier Transform  after filtering');

 pOrig = audioplayer(fout,fs);
 pOrig.play;

如果希望看到一个去除所有噪声的示例,可以将带外噪声添加到原始信号中。这可以通过rand()生成一个随机序列,并使用过滤器使其具有带宽限制。例如,使用3-10kHz带通滤波器过滤生成的噪声序列,然后添加到原始音频序列中。最后,在脚本中应用相同的黄油过滤器,以查看所有噪声是否已消除。

谢谢您的帮助
close all
clear 
clc 


[x,fs] = audioread('cello.wav');             
whos x;                                         
 pOrig = audioplayer(x,fs);                %Signal Play
 pOrig.play;

N = size(x,1);                            
figure;
subplot(2,1,1);
stem(1:N, x(:,1));
title('Left Channel of Origional signal');
subplot(2,1,2);
stem(1:N, x(:,2));
title('Right Channel of origional signal');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 df = fs/N;
 w = (-(N/2):(N/2)-1)*df;
 y1= fft(x(:,1),N)/N;
 y2 = fftshift(y1);
 figure;
 plot(w,abs(y2));
title('Fast Fourier Transform of Origional Signal')

   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
pause
 y=x;
 y = y + randn(size(y));
 pOrig = audioplayer(y,fs);
 pOrig.play;

figure;
subplot(2,1,1);
stem(1:N, y(:,1));
title('Left Channel with Noise');  
subplot(2,1,2);
stem(1:N, y(:,2));
title('Right Channel with Noise');                     




 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 df = fs/N;
 w = (-(N/2):(N/2)-1)*df;
 y1= fft(y(:,1),N)/N;
 y2 = fftshift(y1);
 figure;
 plot(w,abs(y2));
 title('Fast Fourier Transform of Noisy Signal')
 pause  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% filter design 
 n = 10;
beginFreq = 100 / (fs/2);
endFreq =  2000  / (fs/2);
%[b,a] = butter(n,  endFreq, 'low');
%fout = filter(b,a,y);                         % input y(noisy signal)

[b,a] = butter(n,  endFreq, 'low');
fout = filter(b,a,y);                         % input y(noisy signal)



figure;
subplot(2,1,1);
stem(1:N, fout(:,1));
title('Left channel after filtering');  
 subplot(2,1,2);
 stem(1:N, fout(:,2));
 title(' Right channel after filtering');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%plot(fout); 

 df = fs/N;
 w = (-(N/2):(N/2)-1)*df;
 y1= fft(fout(:,1),N)/N; 
 y2 = fftshift(y1);
 figure;
 plot(w,abs(y2));
title('Fast Fourier Transform  after filtering');

 pOrig = audioplayer(fout,fs);
 pOrig.play;