搜档网
当前位置:搜档网 › MATLAB去噪音处理

MATLAB去噪音处理

MATLAB去噪音处理
MATLAB去噪音处理

实施报告

题目:用MATLAB去除音频中的噪音

学号: 12121021 姓名:

任课教师:

联系方式:

2014年2月5日

第一部分理论自学内容阐述

5.5系统的物理可实现性、佩利---维纳准则

对于理想低通滤波器而言,在物理上是不可能实现的,但是我们能设计出接近理想特性的滤波器。虽然理想低通滤波器在实际中是不能实现的,但是我们希望找到一种区分可实现性与不可实现性的标准,这就是佩利-维纳(Paley-Wiener)准则。由佩利-维纳准则给出了,一个网络幅度函数物理可实现的必要条件,但绝非充要条件。

物理可实现性在文献中有不同定义方法,这里采用最低限度的定义把物理可实现性系统和不可实现系统区分开来。我们可以直观地看到,一个物理可实现系统在激励加入之前是不可能有响应输出的,这称为因果条件。这个条件在时域里的表述为:物理可实现系统的单位冲激响应必须是有起因的,即。

从频域来看,如果幅度函数满足平方可积条件,即,佩利和维

纳证明了对于幅度函数物理可实现的必要条件是,它被称为佩利-维纳准则。关于这个准则的推导及更详细的内容,与本课程的联系不紧,在此我们只讨论由这个准则得到的一些推论。

1.幅度函数在某些离散频率处可以是零,但在一个有限频带内不能为零。这是因为,若在某个频带内都有,则,从而不能满足为佩利-维纳准则,系统是非因果的。

2.幅度特性不能有过大的总衰减。由佩利-维纳准则可以看出,幅度函数不能比指数函数

衰减的还要快,即是允许的,而是不可实现的。

3.尽管理想滤波器是不能实现的,但是我们可以任意逼近其特性。因此有关理想滤波器的研究是有意义的。在实际电路中,不能实现理想低通滤波器的矩形振幅特性,我们只能近似得到,但所需要的电路元件随着逼近程度的增加而增多的。一个精确的近似,在理论上需要无限多个元件,于是滤波器的相移常数变为无限大,从而输出脉冲的振幅出现在无限延时以后,所以响应曲线的振荡衰减部分不会在以前出现。

我们注意到,佩利-维纳准则只是就幅度函数特性提出了系统可实现性的必要要求,而没有给出相位方面的要求。如果一个系统满足这个准则,对应于一个因果系统,此时我们把系统的冲激响应沿着时间轴向左平移到以前,那么,虽然系统的幅度特性满足了佩利-维纳准则,但是它显然是一个非因果系统。所以说,佩利-维纳准则只是系统物理可实现性的必要条件,当我们验证了幅度函数满足此条件以后,可以利用希尔伯特变换找到合适的相位函数,从而构成一个物理可实现的系统函数。

该准则讲述了幅度对其判断的影响,但相位实际也是影响它的条件之一,如果将一个因果系统,保持幅度不变的情况下,向左移。可见相位的改变让该系统变成了非因果系统,同样,物理上是不允许的。

5.7 调制与解调

调制与解调应用于广泛的通信系统当中,出现该技术的原因:在测控系统中,进入测控电路的除了传感器输出的测量信号外,还往往有各种噪声。而传感器的输出信号一般又很微弱,将测量信号从含有噪声的信号中分离出来是测控电路的一项重要任务。为了便于区别信号与噪声,往往给测量信号赋予一定特征,这就是调制的主要功用在信号调制中常以一个高频正弦信号作为载波信号。一个正弦信号有幅值、频率、相位三个参数,可以对这三个参数进行调制,分别称为调幅、调频和调相。也可以用脉冲信号作载波信号。可以对脉冲信号的不同特征参数作调制,最常用的是对脉冲的宽度进行调制,称为脉冲调宽。

信号的发送是需要满足一定的条件,才能远距离的传输,影响该因素的正是天线的尺寸于信号波长的关系,(大于等于波长的10分之1)可见,对于低频的信号,相同的传播速度,它的波长越大,所以调制可以将该信号的频率搬移到较高频率,从而波长减小,天线的尺寸也得到改善。

调制的原因如书上所述:假设一个复杂的语音信号用乘法器于cos(Ωt)相乘,由傅立叶变换性质,易得原信号的频谱左右进行了搬移。那么该信号通过天线发射,就能被接收端收到,同理,需要进行对信号解调,否则无法真实的还原人的语音信号,只要再乘以cos(Ωt)即可。频谱又进行了左右搬移,再加个低通滤波器以及必要时的放大器,就能实现对高频的滤波和对原始信号的放大,从而达到了语音信号的传输。不过信号的传输并

非只有语音,还有诸多其他信号。而且,调制并非只有上述这种方法,但不管哪种方法,其本质都是要进行对原信号频谱的搬移,这是调制的必要条件。

第二部分案例或课题陈述及实现方案

【设计原因】

根据信号报告要求,我一开始想到的是编写一段代码,通过录音识别人的音色,将其保存。结合手机对话功能,对所问问题用保存好的音色进行回答。如:孩子到异地上学或打工前用手机保存自己的音色。孩子离开后,父母可以打开软件与手机对话,手机回答的音色为孩子的声音。这个设计我觉得还算不错,但是所学的信号知识实在有限,最后决定设计“用Matlab去除音频中的噪音”的方案,这个比较简单,比较适合初学者。

【设计思路】

滤波器是一种用来消除干扰杂讯的器件,将输入或输出经过过滤而得到纯净的交流电。采用MATLAB设计滤波器,使原来非常繁琐复杂的程序设计变成了简单的函数调用,为滤波器的设和实现开辟了广阔的天地,尤其是Matlab工具箱使各个领域的研究人员可以直观方便地进行科学研究与工程应用。MATLAB 信号处理工具箱为滤波器设计及分析提供了非常优秀的辅助设计工具, 在设计数字滤波器时, 善于应用MATLAB进行辅助设计, 能够大大提高设计效率。

我们都知道,语音信号经过调制在大自然中传播,必然会夹杂着噪声一起传过来,那么我们该如何设计电路,从而达到对语音信号的提取,滤除噪音信号呢。根据资料显示,人类的发生频率范围在300hz-3400hz不等,因此,对于语音信号的提取,我们可以用滤波器来实现。

为了更好的理解语音信号在时域和变换域处理前和处理后的变化情况,我首先用Audition 1.5得到.wav格式的音频。其次,由matlab自带的绘图工具画出相应的时域波形以及经过傅立叶变换后的频谱图。根据频谱图上人的语音信号的频率范围和噪声的频率范围,设计出低通滤波器,对含噪信号进行滤波处理,消除噪声,并通过指令sound()听处理结果的声音,确定是否消除或部分抑制了噪声。

【实验方案】

1、语音信号采集

得到一段语音文件,可以是原有的或是现场录制(为便于比较,需要在安静、干扰小的环境下录音),用audition软件将其改为.wav格式的音频。

2、语音信号分析

使用MATLAB绘出采样后的语音信号的时域波形和频谱图。

3、含噪语音信号合成

在MATLAB软件平台下,给原始的语音信号叠加上噪声,绘出叠加噪声后的语音信号时域和频谱图,与原始语音信号图形对比,分析含噪语音信号频谱和时域波形的改变。

4、数字滤波器设计及滤波,根据设计思路,结合matlab显示频谱图等设计合理的滤波器,并用滤波器对含噪语音信号分别进行滤波处理。

5、回放语音信号

对滤波后的语音信号进行回放,感觉滤波前后语音信号的变化。

第三部分例或课题成果阐述及代码

我上网查阅资料得知Matlab能识别.wav和.au格式的音频文件,所以在我先将mp3格式的文件用audition改成wav格式文件。这段音频的内容是诗朗诵,关于毛泽东《沁园春》中的“俱往矣,数风流人物,还看今朝。为方便教师验证代码,报告准备了两份代码,一份没有注释,方便直接验证,另一份代码后有注释,便于理解代码编写思路。

【完整代码如下】

[x,fs,nbit]=wavread('jw.wav')

sound(x,fs);

N=length(x);

t=(0:N-1)/fs;

w=fs*linspace(0,1,N);

y=abs(fft(x,N));

figure(1)

subplot(2,1,1)

plot(x);

title('原始语音信号时域图')

subplot(2,1,2)

plot(w,abs(y));

title('原始语音信号频谱图')

t=linspace(0,(N-1)/fs,N);

x1=0.5*sin(2*pi*10000*t);

x1=x(:,1)+x1';

sound(x1,fs);

figure(2)

y1=abs(fft(x1,N));

subplot(2,1,1);

plot(t,x1);

title('加入噪声后语音信号时域图') subplot(2,1,2);

plot(w,y1);

axis([0,fs,0,20000]);

title('加入噪声后语音信号频谱图') fc=9200;

fst=9600;

rp=1;

rs=30;

wp=fc*2/fs;

ws=fst*2/fs;

[n,wn]=buttord(wp,ws,rp,rs);

[b,a]=butter(n,wn,'low');

figure(3);

freqz(b,a);

title('滤波器特性曲线');

x2=filter(b,a,x1);

figure(4);

y2=abs(fft(x2,N));

subplot(211)

plot(t,x2);

title('滤波后语音信号时域图');

subplot(212);

plot(w,y2);

title('滤波后语音信号频谱图') sound(x2,fs);

【完整代码注释如下】

[x,fs,nbit]=wavread('jw.wav') //用于读取jw.wav,采样值放在了向量x当中,fs表示采样频率,nbit表示采样位数

sound(x,fs); //播放原语音信号

N=length(x); //求出语音信号的长度

t=(0:N-1)/fs; // 语音信号的长度除以采样频率

w=fs*linspace(0,1,N);

y=abs(fft(x,N));

figure(1) //设计第一个图

subplot(2,1,1)

plot(x);

title('原始语音信号时域图') //画出原始信号时域图

subplot(2,1,2)

plot(w,abs(y));

title('原始语音信号频谱图') // 画出原始信号频谱图

t=linspace(0,(N-1)/fs,N);

x1=0.5*sin(2*pi*10000*t);

x1=x(:,1)+x1'; //加入人为的噪声,表现为滴鸣声

sound(x1,fs); //播放噪音和原始语音信号的混声

figure(2) //设计第二个图

y1=abs(fft(x1,N));

subplot(2,1,1);

plot(t,x1);

title('加入噪声后语音信号时域图')

subplot(2,1,2);

plot(w,y1);

axis([0,fs,0,20000]);

title('加入噪声后语音信号频谱图') //画出加入噪音混声的时域图和频谱图

由两张图对比发现,加入噪音后,频谱图,在高频分量当中出现了明显的幅值,很明显这是人为加入噪声之后,频谱有明显的变化,接下来我们要滤除噪音。程序如下所示:

fc=9200;

fst=9600;

rp=1;

rs=30;

wp=fc*2/fs; //将模拟指标转换为数字指标

ws=fst*2/fs;

[n,wn]=buttord(wp,ws,rp,rs); //滤波器的最小阶数为n,wn为系统频带

[b,a]=butter(n,wn,'low');

figure(3);

freqz(b,a);

title('滤波器特性曲线');

x2=filter(b,a,x1); //x1信号通过了滤波器的处理后的信号x2 figure(4);

y2=abs(fft(x2,N));

subplot(211)

plot(t,x2);

title('滤波后语音信号时域图');

subplot(212);

plot(w,y2);

title('滤波后语音信号频谱图') //画出滤波后信号的时域和频谱图

sound(x2,fs); //播放处理后的音频与源音频比较

经过播放对比,滤波后的声音的源文件的声音差不多,声音清晰可辨,说明设计方案是成功的。

【参考文献】

1.陈怀琛吴大正 MATLAB及在电子信息课程中的应用[M] 北京电子工业出版社

2006. 章节2.4

2.陈亚勇 MATLAB信号处理详解[M] 北京:人民邮电出版社 2000. 第十章

3.郑君里杨为理信号与系统(第三版)上册[M] 高等教育出版社章节5.5 5.7

4. 张康刘雅基于Matlab的巴特沃斯数字低通滤波器的设计[J] 计算机与现代化

2007年12期98-100页

相关主题