请问如何在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、双循环语句,移动平均法。

<p>双循环语句,移动平均法</p><p>%均值滤波</p>

<p>clc,clear</p>

<p>f=imread('lena.bmp')</p>

<p>subplot(121),imshow(f),title('原图')</p>

<p>f1=imnoise(f,'gaussian',0.002,0.0008)</p>

<p>%subplot(222),imshow(f1),title('添加高斯噪声图')</p>

<p>k1=floor(3/2)+1</p>

<p>k2=floor(3/2)+1</p><p>X=f1</p>

<p>[M,N]=size(X)</p><p>uint8 Y=zeros(M,N)</p>

<p>funBox=zeros(3,3)</p><p>for i=1:M-3    </p>

<p>    for j=1:N-3        </p><p>        funBox=X(i:i+3,j:j+3)        </p>

<p>        s=sum(funBox(:))</p><p>        h=s/9   </p>

<p>        Y(i+k1,j+k2)=h    </p><p>    end</p>

<p>end</p><p>Y=Y/255</p>

<p>subplot(122),imshow(Y),title('均值滤波')</p>

<p>实现图:</p>

2、filter2。

<p>filter2</p>

<p>clear all</p>

<p>I=imread('lena.bmp')</p>

<p>%读入预处理图像</p>

<p>imshow(I)</p><p>%显示预处理图像</p>

<p>K1=filter2(fspecial('average',3),I)/255</p><p>%进行3*3均值滤波</p>

<p>K2=filter2(fspecial('average',5),I)/255</p><p>%进行5*5均值滤波</p>

<p>K3=filter2(fspecial('average',7),I)/255</p><p>%进行7*7均值滤波</p>

<p>figure,imshow(K1)</p><p>figure,imshow(K2)</p>

<p>figure,imshow(K3)</p>


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存