1.巴特沃斯低通滤波器去噪
从图上可以看出巴特沃斯低通滤波器对信号⼀的滤波效果还是可以的,主要是因为有效的信号最⾼频率才30Hz,本程序将50Hz以上的信号全部滤除,通过的频率成分中仍然是有⽩噪声的。
对于信号⼆,滤波后的信号与没有加噪声的信号相⽐就有失真了,上升沿和下降沿的⾼频信号被滤除了。
2.FIR低通滤波器去噪
3. 移动平均滤波去噪
从上图可以看出,⽆论是对信号⼀还是对信号⼆,中值滤波的滤波效果都是很不错,特备是对于信号⼆,上升沿和下降失真⽐较的⼩。告枝穗5. 维纳滤波去噪
维纳滤波器属于现代滤波器,传统的滤波器只能滤除信号和⼲扰频带没有重叠的情况,当信号和⼲扰频带有重袜卜叠的时候传统滤波器将⽆能为⼒,这时就需要⽤到现代滤波器,现代滤波器利⽤信号和⼲扰的统计特征(如⾃相关函数、功率谱等)导出⼀套最佳估值算法,然后⽤硬件或软件予以实现。
维纳滤波是以均⽅误差最⼩( LMS(Least MeanSquare) 为准则的,它根据过去观测值和当前观测值来估计信号的当前值,因此它的解
6. ⾃适应滤波去噪
维纳滤波器参数是固定的,适合于平稳随机信号。卡尔曼滤波器参数是时变的,适合于⾮平稳随机信号。然⽽,只有在信号和噪声的统计特
本程序是基于LMS算法的⾃适应滤波,从上图可以看出,滤波效果也是很不错的,特别是对于信号⼆,上升沿有失真,下降沿保持还可以,最要的是得到的波形⼗分的平滑。由此可见⾃适应滤波极具使⽤价值。
7. ⼩波去噪
对于信号⼆,⼩搭如波的去噪效果⾮常不错,虽然得到波形不是很平滑,但是上升沿和下降沿保持的⾮常⾼,基本可以看到棱⾓.
不好意思,没看到维纳滤波,程序罩唯就不删了
%谱减法语音增强
%输入参数轿闷滚s 语音数据,fs 采样频率,p 下面有说明,共11个,可不输入,有默认值
%“过度减法(oversubtraction)”作减法的时候,保留一小部分原来的背景噪音,用这部分背景噪音来掩盖住音乐噪音的谱峰,从而消除了令人不悦的音乐噪音。
%通过给闭余的参数p,估计噪音,做谱减法。从而消除噪音。
function [ss,po]=specsubm(s,fs,p)
%利用频谱相减(spectral subtraction)增强 [SS,PO]=(S,FS,P)
%
% implementation of spectral subtraction algorithm by R Martin (rather slow)
% algorithm parameters: t* in seconds, f* in Hz, k* dimensionless
% 1: tg = smoothing time constant for signal power estimate (0.04): high=reverberant, low=musical
% 2: ta = smoothing time constant for signal power estimate
%
used in noise estimation (0.1)
% 3: tw = fft window length (will be rounded up to 2^nw samples)
% 4: tm = length of minimum filter (1.5): high=slow response to noise increase, low=distortion
% 5: to = time constant for oversubtraction factor (0.08)
% 6: fo = oversubtraction corner frequency (800): high=distortion, low=musical
% 7: km = number of minimisation buffers to use (4): high=waste memory, low=noise modulation
% 8: ks = oversampling constant (4)
% 9: kn = noise estimate compensation (1.5)
% 10:kf = subtraction floor (0.02): high=noisy, low=musical
% 11:ko = oversubtraction scale factor (4): high=distortion, low=musical
%检查函数的输入参数,如果输入少于三个,po为默认值,po的参数上面有说明
if nargin<3 po=[0.04 0.1 0.032 1.5 0.08 400 4 4 1.5 0.02 4].'else po=pend
ns=length(s)
ts=1/fs
ss=zeros(ns,1)
ni=pow2(nextpow2(fs*po(3)/po(8)))
ti=ni/fs
nw=ni*po(8)
nf=1+floor((ns-nw)/ni)
nm=ceil(fs*po(4)/(ni*po(7)))
win=0.5*hamming(nw+1)/1.08win(end)=[]
zg=exp(-ti/po(1))
za=exp(-ti/po(2))
zo=exp(-ti/po(5))
px=zeros(1+nw/2,1)
pxn=px
os=px
mb=ones(1+nw/2,po(7))*nw/2
im=0
osf=po(11)*(1+(0:nw/2).'*fs/(nw*po(6))).^(-1)
imidx=[13 21]'
x2im=zeros(length(imidx),nf)
osim=x2im
pnim=x2im
pxnim=x2im
qim=x2im
for is=1:nf
idx=(1:nw)+(is-1)*ni
x=rfft(s(idx).*win)
x2=x.*conj(x)
pxn=za*pxn+(1-za)*x2
im=rem(im+1,nm)
if im
mb(:,1)=min(mb(:,1),pxn)
else
mb=[pxn,mb(:,1:po(7)-1)]
end
pn=po(9)*min(mb,[],2)
%os= oversubtraction factor
os=zo*os+(1-zo)*(1+osf.*pn./(pn+pxn))
px=zg*px+(1-zg)*x2
q=max(po(10)*sqrt(pn./x2),1-sqrt(os.*pn./px))
ss(idx)=ss(idx)+irfft(x.*q)
end
if nargout==0
soundsc([sss],fs)
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)