首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >音频信号去噪

音频信号去噪
EN

Stack Overflow用户
提问于 2018-02-07 20:57:03
回答 1查看 2K关注 0票数 3

下面的人是我的密码。我想消除噪音,从音频信号,我自己加起来,使用随机的function.The,下面的代码消除了一些噪音,但它仍然太吵,我无法听到声音。我还想为这段代码添加音频文件,但我在发布问题时没有找到任何选项,所以您可以添加任何两个频道的.wav声音文件。任何评论或暗示都会有帮助,谢谢。

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-09 14:07:31

你是用随机()函数来增加噪声,它产生高斯噪声,即白噪声。白噪声在频谱上有恒定的功率,这意味着你要增加从0到20 The的噪声(仅考虑音频频谱)。

你的滤波器是一个在0.1到2 kHz之间的带通滤波器,所以根据我上面指出的,在这些频带中仍然有噪声成分。理论上,它是不可能过滤所有的噪声成分,但你可能想要检查维纳滤波器,以获得更好的结果。实际上,如果你知道高斯噪声参数,它就是最优滤波器,在你的情况下,这只是噪声的方差。

如果你想看到一个消除所有噪音的例子,你可以把带外噪声加到你的原始信号上。通过rand()生成随机序列并使用过滤器使其带宽受限,这是可能的。例如,用3-10 the的带通滤波器过滤产生的噪声序列,然后添加到原始音频序列中。最后,在脚本中应用相同的黄油过滤器来查看所有的噪音都被消除了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48673091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档