matlab小波去噪程序(小波去噪函数)
华为云服务器特价优惠火热进行中! 2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。
合作流程: |
今天给各位分享matlab小波去噪程序的知识,其中也会对小波去噪函数进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
微信号:cloud7591如需了解更多,欢迎添加客服微信咨询。
复制微信号
本文目录一览:
- 1、小波去噪matlab程序
- 2、二维小波变换去噪的matlab程序
- 3、用matlab中工具箱进行小波去噪步骤
- 4、matlab怎么用小波包进行图像去噪
- 5、地震信号的MATLAB小波去噪程序求助
- 6、急!!!在线等,求解答:一个小波去噪的matlab程序,高手进
小波去噪matlab程序
哈哈!傻眼了吧,理论和实际不可兼得啊!对于你这个问题有如下建议:
小波去噪的试验,十个有九个都喜欢用正、余弦函数,但由于小波函数的几何特征,其实不易得到满意效果,你只能选择线性强的小波基,即对称性强并且光滑的小波,嘿嘿,貌似能做DWT的所有小波基中只有sym8的对称性最强(参看;msgtype=2),这样你将会得到其降噪效果好于其它小波基的谬论,实际应用中如果原始信号本身特征就不规律对称则有可能其它小波基的处理效果会好于sym8,这需要试错的方法试验,是你这个原始信号对称的前提假设造成的,但不可认为sym8适合你这个特殊例子就得出结论,你这试验只适合你的假设,其实并不适合所有情形,个人认为其实不具说服力和可比性。如同我家钥匙开不了你家门,是不能得出我家钥匙不如你家钥匙的结论滴。
当你的噪声特征与信号的特征的频率相近时,小波也无能为力,它不是神,也一样分不出啥是噪声,所以其一是可增加分解层数,你这个信号只有100个数,5层已经很高了,再增大也没啥用了,可能会过多显示小波基的特征,造成扭曲失真(如果用SWT会好很多,但需要自己编制函数);其二是参数SCAL可以改为伸缩的sln,而不是固定的one,这样分解层数和SCAL都将起作用,你可以试着改改玩,效果还行。
分解5层
分解8层
你可以试试只分解一层的状况,频率最低的几处噪声会保留下来哦!
二维小波变换去噪的matlab程序
程序是下面这样,但只能处理长宽一样的方形图像,灰度和彩色图像都可,要用其他图像只需把Lena.bmp改为其他图像,但图像要保存在m文件所在路径下。下面还有一个运行后的图像(之一),希望能对你有所帮助。
clear;clc;
%%%%%%%%%%测试图像只能是方形图像,长宽像素一样。
f=imread('Lena.bmp');%%读取图像数据,图像只能保存在m文件所在的路径下
d=size(f);
if length(d)2
f=rgb2gray((f));%%%%%%%%如果是彩色图像则转化为灰度图
end
T=d(1);
SUB_T=T/2;
% 2.进行二维小波分解
l=wfilters('db10','l'); % db10(消失矩为10)低通分解滤波器冲击响应(长度为20)
L=T-length(l);
l_zeros=[l,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂
h=wfilters('db10','h'); % db10(消失矩为10)高通分解滤波器冲击响应(长度为20)
h_zeros=[h,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂
for i=1:T; % 列变换
row(1:SUB_T,i)=dyaddown( ifft( fft(l_zeros).*fft(f(:,i)') ) ).'; % 圆周卷积-FFT
row(SUB_T+1:T,i)=dyaddown( ifft( fft(h_zeros).*fft(f(:,i)') ) ).'; % 圆周卷积-FFT
end;
for j=1:T; % 行变换
line(j,1:SUB_T)=dyaddown( ifft( fft(l_zeros).*fft(row(j,:)) ) ); % 圆周卷积-FFT
line(j,SUB_T+1:T)=dyaddown( ifft( fft(h_zeros).*fft(row(j,:)) ) ); % 圆周卷积-FFT
end;
decompose_pic=line; % 分解矩阵
% 图像分为四块
lt_pic=decompose_pic(1:SUB_T,1:SUB_T); % 在矩阵左上方为低频分量--fi(x)*fi(y)
rt_pic=decompose_pic(1:SUB_T,SUB_T+1:T); % 矩阵右上为--fi(x)*psi(y)
lb_pic=decompose_pic(SUB_T+1:T,1:SUB_T); % 矩阵左下为--psi(x)*fi(y)
rb_pic=decompose_pic(SUB_T+1:T,SUB_T+1:T); % 右下方为高频分量--psi(x)*psi(y)
% 3.分解结果显示
figure(1);
subplot(2,1,1);
imshow(f,[]); % 原始图像
title('original pic');
subplot(2,1,2);
image(abs(decompose_pic)); % 分解后图像
title('decomposed pic');
figure(2);
% colormap(map);
subplot(2,2,1);
imshow(abs(lt_pic),[]); % 左上方为低频分量--fi(x)*fi(y)
title('\Phi(x)*\Phi(y)');
subplot(2,2,2);
imshow(abs(rt_pic),[]); % 矩阵右上为--fi(x)*psi(y)
title('\Phi(x)*\Psi(y)');
subplot(2,2,3);
imshow(abs(lb_pic),[]); % 矩阵左下为--psi(x)*fi(y)
title('\Psi(x)*\Phi(y)');
subplot(2,2,4);
imshow(abs(rb_pic),[]); % 右下方为高频分量--psi(x)*psi(y)
title('\Psi(x)*\Psi(y)');
% 5.重构源图像及结果显示
% construct_pic=decompose_matrix'*decompose_pic*decompose_matrix;
l_re=l_zeros(end:-1:1); % 重构低通滤波
l_r=circshift(l_re',1)'; % 位置调整
h_re=h_zeros(end:-1:1); % 重构高通滤波
h_r=circshift(h_re',1)'; % 位置调整
top_pic=[lt_pic,rt_pic]; % 图像上半部分
t=0;
for i=1:T; % 行插值低频
if (mod(i,2)==0)
topll(i,:)=top_pic(t,:); % 偶数行保持
else
t=t+1;
topll(i,:)=zeros(1,T); % 奇数行为零
end
end;
for i=1:T; % 列变换
topcl_re(:,i)=ifft( fft(l_r).*fft(topll(:,i)') )'; % 圆周卷积-FFT
end;
bottom_pic=[lb_pic,rb_pic]; % 图像下半部分
t=0;
for i=1:T; % 行插值高频
if (mod(i,2)==0)
bottomlh(i,:)=bottom_pic(t,:); % 偶数行保持
else
bottomlh(i,:)=zeros(1,T); % 奇数行为零
t=t+1;
end
end
这个只是一级分解,matlab自带的函数可以实现多级分解,级数由编程者自己确定。
是的,是一样的。
用matlab中工具箱进行小波去噪步骤
matlab读取excel文件比较方便,建议你把数据放到xls文件中保存,然后在matlab中用xlsread这个函数读取出来。
读取出的数据应该是一个一维数组了,用plot画出图的话,就是常见的曲线。
然后做小波分解:选用你觉得合适的小波基,例如haar,然后用这个小波基做小波分解,再把高频部分去掉,然后用低频部分还原,就得到了去噪后的信号。
其实你这个问题估计也可以用神经网络或者其它曲线拟合一类手段来解决。具体的情况要根据数据特征来判断。
以上。
专业路过的老狼

matlab怎么用小波包进行图像去噪
小波图像去噪的方法大概分为3类
1:基于小波变换摸极大值原理
2:基于小波变换系数的相关性
3:基于小波阈值的去噪。
基于小波阈值的去噪方法3个步骤:
1: 计算含噪声图像的小波变换。选择合适的小波基和小波分解层数J,运用Matlab 分解算法将含有噪声图像进行J层小波分解,得到相应的小波分解系数。
2:对分解后的高频系数进行阈值量化,对于从1 到J的每一层,选择一个适当的阈值和合适的阈值函数,将分解得到的高频系数进行阈值量化,得到估计小波系数。
3:进行小波逆变化,根据图像小波分解后的第J层,低频 系数(尺度系数)和经过阈值量化处理的各层高频系数(小波系数),运用Matlab重构算法进行小波重构,得到去噪后的图像。
地震信号的MATLAB小波去噪程序求助
去噪有很多种方法,现在小波去噪最为常用,在matlab中有自带的函数进行小波去噪,简单易行。最常用且简单的是阈值去噪,用函数ddencmp()生成信号的默认阈值,然后利用函数wdencmp()进行去噪。
急!!!在线等,求解答:一个小波去噪的matlab程序,高手进
%%%%%%%%%%%%%%%%%%心电信号降噪
%%%%%%%%%%%%%%%Birge-Massart策略阈值降噪
%基于小波变换的心电信号的降噪
ecg=fopen('100.dat','r');% 调用心电数据库 r为只读,ecg是打开文件的识别符
N=1201;%常数赋值,要读数据个数
data=fread(ecg,N,'int16'); %从一个流中读N个数据,数据格式是int16,16进制整数
data=data/10000;%数据缩小10000倍
fclose(ecg);%关闭打开的文件
x=data;%把数据转赋给x变量
wavename='db5'; %db5是小波名
level=4;%4级分解
[c,l]=wavedec(x,level,wavename); %4级小波分解,c保存各级分解系数,l是薄记矩阵,保存各级的系数的个数
alpha=1.5; %1.5用于信号压缩,3用于降噪
sorh='h'; %为硬阈值
[thr,nkeep]=wdcbm(c,l,alpha);%使用Birgé-Massart策略计算一维小波分解或压缩的阈值thr和各级的系数个数nkeep
[xc,cxc,lxc,perf0,perfl2]=wdencmp('lvd',c,l,wavename,level,thr,sorh); %小波压缩重构后的图像
t1=0:0.004:(length(x)-1)*0.004;%一行数据
figure(4);%打开一个图形窗口
subplot(211); %子图1
plot(t1,x);%画图形
title('从人体采集的原始的ECG信号');%加上子图名称
subplot(212);%子图2
plot(t1,xc);%画图形
title('Birge-Massart策略阈值降噪后的ECG信号(wname=db5 level=4)');%加上子图名称
关于matlab小波去噪程序和小波去噪函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
