导航:首页 > 五金知识 > matlab小波工具箱重构

matlab小波工具箱重构

发布时间:2022-06-19 08:02:52

⑴ matlab小波分解与重构

s=zeros(1,100);
s(50:100)=1;
subplot(2,2,1);plot(s); title('原始信号');
[c,l]=wavedec(s,3,'db1');
a3=appcoef(c,l,'db1',3);
d3=detcoef(c,l,3);
d2=detcoef(c,l,2);
d1=detcoef(c,l,1);
dd3=zeros(1,length(d3));
dd2=zeros(1,length(d2));
dd1=zeros(1,length(d1));
c1=[a3 dd3 dd2 dd1];
s1=waverec(c1,l,'db1');
subplot(2,2,2);
plot(s1);grid;
title('强制消噪后的信号');
[thr,sorh,keepapp]=ddencmp('den','wv',s);
s2=wdencmp('gbl',c,l,'db1',3,thr,sorh,keepapp);
subplot(2,2,3);
plot(s2);grid;
title('默认阈值消噪后的信号');
softd1=wthresh(d1,'s',1.465);
softd2=wthresh(d2,'s',1.823);
softd3=wthresh(d3,'s',2.768);
c2=[a3 softd3 softd2 softd1];
s3=waverec(c2,l,'db1');
subplot(2,2,4);
plot(s3);grid;
title('给定软阈值消噪后的信号');

⑵ matlab中怎样实现多层小波重构

(1)程序所用的小波函数只有非标准的Haar小波,其滤波器组为 Lo_D=[1/2 1/2], Hi_D=[-1/2 1/2],是固化在 mydwt2.m 的程序中的,不能选择其他的小波函数;
(2)非标准的Haar小波,其分解出来的系数矩阵中,高频系数的细节内容(轮廓、边缘等特征)不明显;
(3)函数 mydwt2 中列变换的矩阵对象为输入矩阵,这是错误的,其矩阵对象应该是行变换后的缓存矩阵;
(4)函数 mydwt2 的输出用[LL,HL,LH,HH]表示,不是很规范,应改为[cA,cV,cH,cD]来表示,即一级小波变换输出的系数矩阵有4个部分:平均部分、垂直细节部分、水平细节部分和对角线细节部分。
(5)函数 mywavedec2 的输出 y 是与输入矩阵 x 相同大小的矩阵,并且已将N级分解后所有的平均、细节系数组合成一体的。实际上,这种定义只对Haar小波有效。
(6)原程序中要调用 modmat 函数对图像矩阵进行修剪,使之能被 2 的 N 次方整除,主要是为了生成塔式结构图像而设的,对上述问题修正后,这个 modmat 函数已不需使用了。
针对上述问题,我对程序作了修正,发布在今天的3篇文章里,请大家点击查看。新修正的程序更为简洁易懂,功能也有所增强,可以用任意的小波函数进行小波分解,可根据小波分解系数矩阵重构出指定分解级的低频系数和原始图像。
(原)自己动手编写小波信号分解与重构的Matlab程序
下面,我把自己编写的小波一维、二维信号分解和重构Matlab程序共享出来,也希望有朋友共享自编的程序,共同学习,提高程序的效率和简洁性。
1、《小波图像分解与重构程序存在的问题与解决办法》
首先要说明的一点是,虽然是自己编写Matlab程序,但并不是说一点也不用Matlab的自带函数。我们要编写的是实现小波变换的主要功能函数,而绘图等基本功能还是要用到Matlab函数的。而且,根据小波变换的滤波器组原理,原始信号要通过低通、高通滤波器处理,这里就涉及到卷积这一运算步骤。卷积——FFT算法的实现,相信很多朋友都能用Matlab、C语言等来实现,不过与Matlab自带的用机器语言编写的FFT程序相比,运算速度一般会慢几倍、几十倍。所以,我的程序里边涉及卷积的就直接调用Matlab的conv()函数了。
我们知道,小波变换的一级分解过程是,原始信号分别进行低通、高通滤波,再分别进行二元下抽样,就得到低频、高频(也称为平均、细节)两部分系数;而多级分解则是对上一级分解得到的低频系数再进行小波分解,是一个递归过程。以下是一维小波分解的程序:
function [cA,cD] = mydwt(x,lpd,hpd,dim);
% 函数 [cA,cD]=MYDWT(X,LPD,HPD,DIM) 对输入序列x进行一维离散小波分解,输出分解序列[cA,cD]
% 输入参数:x——输入序列;
% lpd——低通滤波器;
% hpd——高通滤波器;
% dim——小波分解级数。
% 输出参数:cA——平均部分的小波分解系数;
% cD——细节部分的小波分解系数。

cA=x; % 初始化cA,cD
cD=[];
for i=1:dim
cvl=conv(cA,lpd); % 低通滤波,为了提高运行速度,调用MATLAB提供的卷积函数conv()
dnl=downspl(cvl); % 通过下抽样求出平均部分的分解系数
cvh=conv(cA,hpd); % 高通滤波
dnh=downspl(cvh); % 通过下抽样求出本层分解后的细节部分系数
cA=dnl; % 下抽样后的平均部分系数进入下一层分解
cD=[cD,dnh]; % 将本层分解所得的细节部分系数存入序列cD
end

function y=downspl(x);
% 函数 Y=DOWMSPL(X) 对输入序列进行下抽样,输出序列 Y。
% 下抽样是对输入序列取其偶数位,舍弃奇数位。例如 x=[x1,x2,x3,x4,x5],则 y=[x2,x4].

N=length(x); % 读取输入序列长度
M=floor(N/2); % 输出序列的长度是输入序列长度的一半(带小数时取整数部分)
i=1:M;
y(i)=x(2*i);
而重构则是分解的逆过程,对低频系数、高频系数分别进行上抽样和低通、高通滤波处理。要注意重构时同一级的低频、高频系数的个数必须相等。
function y = myidwt(cA,cD,lpr,hpr);
% 函数 MYIDWT() 对输入的小波分解系数进行逆离散小波变换,重构出信号序列 y
% 输入参数:cA —— 平均部分的小波分解系数;
% cD —— 细节部分的小波分解系数;
% lpr、hpr —— 重构所用的低通、高通滤波器。

lca=length(cA); % 求出平均、细节部分分解系数的长度
lcd=length(cD);

while (lcd)>=(lca) % 每一层重构中,cA 和 cD 的长度要相等,故每层重构后,
% 若lcd小于lca,则重构停止,这时的 cA 即为重构信号序列 y 。
upl=upspl(cA); % 对平均部分系数进行上抽样
cvl=conv(upl,lpr); % 低通卷积

cD_up=cD(lcd-lca+1:lcd); % 取出本层重构所需的细节部分系数,长度与本层平均部分系数的长度相等
uph=upspl(cD_up); % 对细节部分系数进行上抽样
cvh=conv(uph,hpr); % 高通卷积

cA=cvl+cvh; % 用本层重构的序列更新cA,以进行下一层重构
cD=cD(1:lcd-lca); % 舍弃本层重构用到的细节部分系数,更新cD
lca=length(cA); % 求出下一层重构所用的平均、细节部分系数的长度
lcd=length(cD);
end % lcd < lca,重构完成,结束循环
y=cA; % 输出的重构序列 y 等于重构完成后的平均部分系数序列 cA

function y=upspl(x);
% 函数 Y = UPSPL(X) 对输入的一维序列x进行上抽样,即对序列x每个元素之间
% 插零,例如 x=[x1,x2,x3,x4],上抽样后为 y=[x1,0,x2,0,x3,0,x4];

N=length(x); % 读取输入序列长度
M=2*N-1; % 输出序列的长度是输入序列长度的2倍再减一
for i=1:M % 输出序列的偶数位为0,奇数位按次序等于相应位置的输入序列元素
if mod(i,2)
y(i)=x((i+1)/2);
else
y(i)=0;
end
end
我们知道,二维小波分解重构可以用一系列的一维小波分解重构来实现。以下程序是基于Haar小波的二维小波分解和重构过程:
function [LL,HL,LH,HH]=mydwt2(x);
% 函数 MYDWT2() 对输入的r*c维矩阵 x 进行二维小波分解,输出四个分解系数子矩阵[LL,HL,LH,HH]
% 输入参数:x —— 输入矩阵,为r*c维矩阵。
% 输出参数:LL,HL,LH,HH —— 是分解系数矩阵的四个相等大小的子矩阵,大小均为 r/2 * c/2 维
% LL:低频部分分解系数; HL:垂直方向分解系数;
% LH:水平方向分解系数; HH:对角线方向分解系数。

lpd=[1/2 1/2];hpd=[-1/2 1/2]; % 默认的低通、高通滤波器
[row,col]=size(x); % 读取输入矩阵的大小

for j=1:row % 首先对输入矩阵的每一行序列进行一维离散小波分解
tmp1=x(j,:);
[ca1,cd1]=mydwt(tmp1,lpd,hpd,1);
x(j,:)=[ca1,cd1]; % 将分解系数序列再存入矩阵x中,得到[L|H]
end
for k=1:col % 再对输入矩阵的每一列序列进行一维离散小波分解
tmp2=x(:,k);
[ca2,cd2]=mydwt(tmp2,lpd,hpd,1);
x(:,k)=[ca2,cd2]; % 将分解所得系数存入矩阵x中,得到[LL,Hl;LH,HH]
end

LL=x(1:row/2,1:col/2); % LL是矩阵x的左上角部分
LH=x(row/2+1:row,1:col/2); % LH是矩阵x的左下角部分
HL=x(1:row/2,col/2+1:col); % HL是矩阵x的右上角部分
HH=x(row/2+1:row,col/2+1:col); % HH是矩阵x的右下角部分

function y=myidwt2(LL,HL,LH,HH);
% 函数 MYIDWT2() 对输入的子矩阵序列进行逆小波变换,重构出矩阵 y
% 输入参数:LL,HL,LH,HH —— 是四个大小均为 r*c 维的矩阵
% 输出参数:y —— 是一个大小为 2r*2c 维的矩阵

lpr=[1 1];hpr=[1 -1]; % 默认的低通、高通滤波器
tmp_mat=[LL,HL;LH,HH]; % 将输入的四个矩阵组合为一个矩阵
[row,col]=size(tmp_mat); % 求出组合矩阵的行列数

for k=1:col % 首先对组合矩阵tmp_mat的每一列,分开成上下两半
ca1=tmp_mat(1:row/2,k); % 分开的两部分分别作为平均系数序列ca1、细节系数序列cd1
cd1=tmp_mat(row/2+1:row,k);
tmp1=myidwt(ca1,cd1,lpr,hpr); % 重构序列
yt(:,k)=tmp1; % 将重构序列存入待输出矩阵 yt 的相应列,此时 y=[L|H]
end

for j=1:row % 将输出矩阵 y 的每一行,分开成左右两半
ca2=yt(j,1:col/2); % 分开的两部分分别作为平均系数序列ca2、细节系数序列cd2
cd2=yt(j,col/2+1:col);
tmp2=myidwt(ca2,cd2,lpr,hpr); % 重构序列
yt(j,:)=tmp2; % 将重构序列存入待输出矩阵 yt 的相应行,得到最终的输出矩阵 y=yt
end
y=yt;

⑶ matlab中的小波工具箱怎么用,希望能详细介绍

将原始数据文件夹到装有matlab的电脑
打开matlab软件,进入软件主界面
在软件的左下方找到start按钮,点击选择toolbox,然后选择wavelet
进入wavemenu界面,选择一维小波中的wavelet1-D并进入
5.将数据文件(.Mat格式)托到matlab软件主界面的workspace
6.在wavemenu主界面中选择file-load signal或者import from workspace—import signal
7.选择要处理的信号,界面出现loaded信号,这就是没有去噪前的原
始信号
8.右上角选择用于小波分析的小波基以及分解层数并点击analyse开始分析
9.分析后在左边栏目中出现s,a*,d*,其中s为原信号,a*为近似信号,d*为细节信号
10.然后点击denoise去噪
11.阈值方法常用的有4种fixed(固定阈值),rigorsure,heusure,minmax根据需要选择,一般情况下rigorsure方式去噪效果较好
12.oft(软阈值),hard(硬阈值)一般选择软阈值去噪后的信号较为平滑
13.在噪声结构中选择unscaled white noise,因为在工程应用中的噪声一般不仅仅含有白噪声
14.在噪声结构下面的数值不要随意改,这是系统默认的去噪幅度
15.点击denoise开始正式去噪
16.在此窗口下点击file-save denoised singal,保存输出去噪后的信号
17.去噪结束
18.去噪结束后,把去噪后信号(.mat格式)拖至matlab主界面的workspace中,与原信号一起打包,以便以后计算统计量
19.Matlab编程计算相关统计量以及特征量
20.得出统计量和特征量后结束

⑷ 求:使用matlab自带的小波工具箱wavemenu怎样对[电流 时间监测数据进行分解后重构呢

是一个图形,你可以图形平滑(一般三角函数),或者使用函数拟合得到拟合系数可以!
(注:你可以找到在图像上的一个点的坐标向量!我没有你的专业知识是不明确的,我已经理解了点!)

⑸ MATLAB小波处理的问题

第一步:信号分解
调用格式:[C,L]=wavedec(X,N,’wname’
提取多尺度小波变换的低频系数
A=appcoef(C,L,’db1’)
提取多尺度小波变换的高频系数:
D=detcoef(C,L,N);
第二步:信号重构
X=waverec[C,L,‘wname
’]
1)小波分解结构的低频重构
函数:A3=wrcoef('
type',C,L,'wname',N)
2)小波分解结构的高频重构
函数:D=wrcoef('d',C,L,'db1',3)。
第三步:画出分解后的图形,四合一图像,就是你想要的效果,
所用函数:
subplot(4,1,1);plot(A3);title(
'A3');
subplot(4,1,2);plot(D3);title(
'D3');
subplot(4,1,3);plot(D2);title(
'D2');
subplot(4,1,4);plot(D1);title(
'D1');
如果只要
LL

HH
单独一张图像就好,
下面是举例子的
figure(1);plot(LL
)
figure(2);plot(HH)

⑹ MATLAB里小波工具箱的功能怎样用函数程序实现呢

a1.a2,d2,d1是ca1,ca2,cd1,cd2这些小波系数的重构。ca1,ca2,cd1,cd2是小波系数,它们的数据点数随分解层次的增大而减少专,这就难以与原始信号对属比分析,通常会经过重构变为与原始信号个数相同的a1.a2,d2,d1,从物理意义上讲,只有a1.a2,d2,d1才是有实际量纲的信号,ca1,ca2,cd1,cd2是没有量纲和物理意义的。
上面的语句是提取小波系数的,而工具箱的图是用重构的数据的,你可以使用waverec函数实现工具箱的功能。
对于DWT,小波分解对被分解信号的点数是没有要求的,因为在DWT之前对原始信号是要经过拓展的,也就是说,DWT时的信号数据已经不是原始信号的点数了。对于SWT,matlab在这方面所写的函数没下啥功夫,比较敷衍,这时小波分解被分解信号的点数必须是2的整数次幂。

⑺ 请问matlab小波工具箱中有ghm多小波分解\重构源代码吗

有,需要设置工具箱,不能使用默认的工具箱。

⑻ MATLAB 小波包分解与重构

我想问你可以给我小波包分解的程序参考一下吗?我也在做这部分,相信你已经完成了,帮我个忙,谢了!

⑼ 请问关于近红外光谱数据用matlab进行小波变换

应该是先进行小波分解,然后进行小波重构吧?
dwt函数应该是对信号的单层分解,
[cA,cD]=dwt(X,’wname’)中返回的cA,cD分别存放是信号的近似和细节
[C,L]=wavedec(X,N,'wname') 利用小波'wname'对信号X进行多层分解
之后是依据你的需要将信号重构回去,idwt是单尺度一维小波逆变换,waverec是多尺度一维小波重构

简单的就是matlab里面有小波工具箱,在命令窗口输入wavemenu,载入你的信号,选择不同地小波基就行~
希望对你有帮助

⑽ 关于MATLAB小波工具箱

wfilter = 'haar';%选择小波基抄
[CA,CH,CV,CD] = dwt2(x,wfilter, 'per');%小波变换袭

CA = (CA>=T1) .* CA;%对4个自带分别阈值处理
CH = (CH>=T2) .* CH;
CV = (CV>=T3) .* CV;
CD = (CD>=T4) .* CD;

result = idwt2(CA, CH, CV, CD, wfilter, 'per');%反变换重构图像。

阅读全文

与matlab小波工具箱重构相关的资料

热点内容
悍高五金件的多吗 浏览:318
货车仪表为什么要有保温箱标志 浏览:31
心肺康复训练设备有哪些 浏览:437
展茂五金制品有限公司 浏览:284
机电设备拆装费怎么报价 浏览:686
铸造铝液温度过高导致什么结果 浏览:602
爬臂式机器人动力装置设计 浏览:709
苏州nachi球轴承一般多少钱 浏览:900
自动喷水灭火系统的延时装置的作用 浏览:72
大众汽车杂物从仪表台缝隙掉进去了怎么办 浏览:929
苏州高中压阀门厂待遇怎样 浏览:657
沪东造船阀门有限公司怎么样 浏览:974
变速箱里的阀门叫什么作用 浏览:140
瑞纳怎么调仪表盘时间 浏览:930
黄江镇鹏驰五金制品有限公司 浏览:460
牧田电动工具组织结构 浏览:730
哪些机械中运用到了双曲柄 浏览:780
机械故障发生的原因有哪些 浏览:678
温州龙湾电动阀门厂在哪里 浏览:362
放大镜实验装置图 浏览:751