请问如何在matlab中对信号进行去噪 *** 作。最好用函数的形式,方便其他程序调用

请问如何在matlab中对信号进行去噪 *** 作。最好用函数的形式,方便其他程序调用,第1张

去噪有很多种方法,现在小波去噪最为常用,在matlab中有自带的函数进行小波去噪,简单易行。最常用且简单的是阈值去噪,用函数ddencmp()生成信号的默认阈值,然后利用函数wdencmp()进行去噪。如掘绝:陆袭

%对含噪信号s进行3层小波分解

[c,l]=wavedec(s,3,'db1')%s为含噪信号,3为小波分解层数,db1为采用的小波基

%获取信号默认值

[thr,sorh,keepapp]=ddencmp('den','wv',s)

%参数den代表去噪,wv代表小波,s代表含有噪声的信号

%实现去噪判悉姿过程

s2=wdencmp('gbl',c,l,'db1',3,thr,sorh,keepapp)

%参数gbl表示采用全局去噪

1.读图象

2.做fft

3.显示fft

4.肉眼观察频谱中的噪声.(正弦干扰是在频谱中是几个点)

5.频谱中有噪声的区域设置为0.(或者低通)

6.反fft变换

7.显纳谈示

1.读图象

im=imread('文件名')

2.做fft

im_fft=(fftshift(fft2(im)))%fftshift是把低频成分放到中间,习惯上要这样做。

3.显李茄仔示fft

im_magfft=abs(im_fft)

temp1=log(im_magfft+1)%否则幅度太大,不能显示整个动态范围

Xmin = min(min(temp1))

Xmax = max(max(temp1))

scaf = 255/(Xmax-Xmin)

im_ftd = floor(scaf*(temp1 - Xmin))

figure

imshow(im_ftd)

4.肉眼观察频谱中的哪汪噪声.(正弦干扰是在频谱中是几个点)

5.频谱中有噪声的区域设置为0.(或者低通)

%下面举例低通

r = 70 %低通的中心半径,自己观察

for i=1:m

for j=1:n

if (((i-m/2)^2+(j-n/2)^2) <r^2 )

mask(i,j) = 1

else

mask(i,j) = 0

end

end

end

im2_fft=im_fft.*mask

6.反fft变换

im2=ifft(ishiftfft(im2_fft))

7.显示

imshow(im2)

winsize=256%窗长

n=0.1%噪声水平

a=2

b=6

[speech,fs,nbits]=wavread('E:\matlab\louyin.wav')%读入wav文件

size=length(speech)%语音长度

numofwin=floor(size/winsize)%窗举斗数

%定义汉明窗

ham=hamming(winsize)'

hamwin=zeros(1,size)

enhanced=zeros(1,size)

improved=zeros(1,size)

%生成噪声信号

noise=n*randn(1,size)

y=speech'+noise

%噪声处理

noisy=n*randn(1,winsize)

N=fft(noisy)

npow=abs(N)

for q=1:2*numofwin-1

yframe=y(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)%分正正磨帧

hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+ham%

%加噪信号FFT

y1=fft(yframe.*ham)

ypow=abs(y1)%加噪信号幅度

yangle=angle(y1)%相位

%计算功率谱密度

Py=ypow.^2

Pn=npow.^2

Pyy=ypow.^a

Pnn=npow.^a

%基本谱减

for i=1:winsize

if Py(i)-Pn(i)>0

Ps(i)=Py(i)-Pn(i)

else

Ps(i)=0

end

end

s=sqrt(Ps).*exp(j*yangle)

for i=1:winsize

if Pyy(i)-b*Pnn(i)>0

Pss(i)=Pyy(i)-b*Pnn(i)

else

Pss(i)=0

end

end

ss=Pss.^(1/a).*exp(j*yangle)

%去噪语音IFFT

enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+real(ifft(s))

improved(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=improved(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+real(ifft(ss))

end

%去除汉明窗引起的增益

for i=1:size

if hamwin(i)==0

enhanced(i)=0

improved(i)=0

else

enhanced(i)=enhanced(i)/hamwin(i)

improved(i)=improved(i)/hamwin(i)

end

end

SNR1=10*log10(var(speech')/清或var(noisy))%加噪语音信噪比

SNR2=10*log10(var(speech')/var(enhanced-speech'))%增强语音信噪比

SNR3=10*log10(var(speech')/var(improved-speech'))

figure(1)plot(speech')%原始语音波形

title(['Original Voice(n=',num2str(n),')'])

figure(2)plot(y)

title(['Noise Added(SNR=',num2str(SNR1),'dB)'])

figure(3)plot(enhanced)

title(['Enhanced Voice(SNR=',num2str(SNR2),'dB)'])

figure(4)plot(improved)

title(['Improved Voice(SNR=',num2str(SNR3),'dB)'])


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12353660.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存