【Matlab学习手记】sym8小波滤波
提供sym8小波,四层全局软阈值滤波源代码,采用Matlab语言编写,可移植性强。
- 源代码
clear;clc;
load leleccum;
indx = 1:3450;
noisez = leleccum(indx);
wname = 'sym8';
lev = 4;
[c,l] = wavedec(noisez,lev,wname);
[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters(wname);
% threshold value
sigma = wnoisest(c,l,1);%使用库函数wnoisest提取第一层的细节系数来估算噪声的标准偏差
N = numel(noisez);%整个信号的长度
thr = sigma*sqrt(2*log(N));%最终阈值
%全局阈值处理
keepapp = 1;%近似系数不作处理
denoisexs = wdencmp('gbl',c,l,wname,lev,thr,'s',keepapp);
denoisexh = wdencmp('gbl',c,l,wname,lev,thr,'h',keepapp);
sigOut1 = WDEN(noisez, N);
sigOut2 = wden(noisez, 'sqtwolog', 's', 'sln', 4, 'sym8')';
% 作图
plot(noisez)
hold on
plot(denoisexs)
plot(denoisexh)
plot(sigOut1)
plot(sigOut2)
hold off
legend('原始噪声信号', 'matlab软阈值去噪信号', 'matlab硬阈值去噪信号', 'WDEN', 'wden');函数定义如下:
function sigOut = WDEN(sigIn, sigLen)
% sym8小波,4层全局软阈值滤波
[Lo_D, Hi_D, Lo_R, Hi_R] = wfilters('sym8'); % 滤波器参数
filterLen = length(Lo_D); % 滤波器长度
Scale = 4;
srcLen = sigLen;
msgLen = zeros(Scale + 2, 1);
msgLen(1) = srcLen;
for i = 2 : Scale + 1exLen = floor((srcLen + filterLen - 1) / 2);srcLen = exLen;msgLen(i) = exLen;
end
msgLen(Scale + 2) = srcLen;
allSize = sum(msgLen(2 : end));
dstCoef = WaveDec(sigIn, msgLen, allSize, Scale, Lo_D, Hi_D, filterLen);
pDet = dstCoef(allSize - msgLen(2) + 1 : allSize);
thr = GetThr(pDet, msgLen);
dstCoef = Wthresh(dstCoef, thr, allSize, msgLen(Scale + 1));
sigOut = WaveRec(dstCoef, msgLen, Scale, Lo_R, Hi_R, filterLen);
endfunction dstCoef = WaveDec(srcData, msgLen, allSize, Scale, Lo_D, Hi_D, filterLen)
tmpSrc = srcData;
gap = msgLen(2) * 2;
dstCoef = zeros(allSize, 1);
for i = 1 : ScalecurSigLen = msgLen(i);tmpDst = DWT(tmpSrc, curSigLen, Lo_D, Hi_D, filterLen);dstCoef(allSize - gap + 1 : allSize - gap + 2 * msgLen(i + 1)) = tmpDst(1 : 2 * msgLen(i + 1));tmpSrc(1 : msgLen(i + 1)) = tmpDst(1 : msgLen(i + 1));gap = gap - msgLen(i + 1);gap = gap + 2 * msgLen(i + 2);
end
endfunction dstCoef = DWT(srcData, srcLen, Lo_D, Hi_D, filterLen)
decLen = floor((srcLen + filterLen - 1)/2);
dstCoef = zeros(2 * decLen, 1);
for i = 0 : decLen - 1for j = 0 : filterLen - 1k = 2 * i - j + 1;if k < 0 && k >= -filterLen + 1tmp = srcData(-k);elseif k >= 0 && k <= srcLen - 1 tmp = srcData(k + 1);elseif k > srcLen - 1 && k <= srcLen + filterLen - 2 tmp = srcData(2 * srcLen - k);elsetmp = 0;enddstCoef(i + 1) = dstCoef(i + 1) + Lo_D(j + 1) * tmp;dstCoef(i + 1 + decLen) = dstCoef(i + 1 + decLen) + Hi_D(j + 1) * tmp;end
end
endfunction thr = GetThr(detCoef, msgLen)
detCoef = abs(detCoef);
% detCoef = sort(detCoef);
sigma = median(detCoef)/0.6745;
thr = sigma * sqrt(2 * log(msgLen(1)));
endfunction dstCoef = Wthresh(dstCoef, thr, allSize, gap)
for i = gap : allSize - 1if abs(dstCoef(i + 1)) < thrdstCoef(i + 1) = 0;elseif dstCoef(i + 1) < 0dstCoef(i + 1) = thr - abs(dstCoef(i + 1));elsedstCoef(i + 1) = abs(dstCoef(i + 1)) - thr; endend
end
endfunction dstData = WaveRec(srcCoef, msgLen, Scale, Lo_R, Hi_R, filterLen)
tmpSrcCoef = zeros(2 * msgLen(2), 1);
tmpSrcCoef(1 : 2 * msgLen(Scale + 1)) = srcCoef(1 : 2 * msgLen(Scale + 1));
gap = 2 * msgLen(Scale + 1);
for i = Scale : -1 : 1curDstLen = msgLen(i);dstData = IDWT(tmpSrcCoef, curDstLen, Lo_R, Hi_R, filterLen);if i ~= 1tmpSrcCoef(1 : curDstLen) = dstData(1 : curDstLen);tmpSrcCoef(curDstLen + 1 : 2 * curDstLen) = srcCoef(gap + 1 : gap + curDstLen);gap = gap + msgLen(i);end
end
endfunction recData = IDWT(srcCoef, dstLen, Lo_R, Hi_R, filterLen)
recLen = floor((dstLen + filterLen - 1) / 2);
recData = zeros(dstLen, 1);
for i = 0 : dstLen - 1recData(i + 1) = 0;for j = 0 : recLen - 1k = i - 2 * j + filterLen - 2;if k >= 0 && k < filterLenrecData(i + 1) = recData(i + 1) + Lo_R(k + 1) * srcCoef(j + 1) + Hi_R(k + 1) * srcCoef(j + 1 + recLen);endend
end
end
【Matlab学习手记】sym8小波滤波相关推荐
- sym8 matlab,【Matlab学习手记】sym8小波滤波
提供sym8小波,四层全局软阈值滤波源代码,采用Matlab语言编写,可移植性强. 源代码 clear;clc; load leleccum; indx = 1:3450; noisez = lele ...
- 【图像去噪】基于matlab小波滤波(硬阙值+软阙值)+中值滤波图像去噪【含Matlab源码 462期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像去噪]基于matlab小波滤波(硬阙值+软阙值)+中值滤波图像去噪[含Matlab源码 462期] 获取代码方式2: 通过订阅紫极神光 ...
- 【Matlab图像去噪】小波滤波(硬阙值+软阙值)+中值滤波图像去噪【含源码 462期】
一.代码运行视频(哔哩哔哩) [Matlab图像去噪]小波滤波(硬阙值+软阙值)+中值滤波图像去噪[含源码 462期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...
- matlab 风速模型 小波滤波
1.内容简介 略 469-可以交流.咨询.答疑 2.内容说明 任务要求 设A为函数A=3+ 2sin32t+ 1/5sin*(1/10π)te N序列是为噪声,模型为大气的阵风模型,在网上csdn能找 ...
- 【图像去噪】基于matlab快速跨尺度小波降噪泊松损坏图像去噪【含Matlab源码 1893期】
⛄一.图像去噪及滤波简介 1 图像去噪 1.1 图像噪声定义 噪声是干扰图像视觉效果的重要因素,图像去噪是指减少图像中噪声的过程.噪声分类有三种:加性噪声,乘性噪声和量化噪声.我们用f(x,y)表示图 ...
- 【Matlab脑电信号】小波睡眠监测【含源码 595期】
一.代码运行视频(哔哩哔哩) [Matlab脑电信号]小波睡眠监测[含源码 595期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 沈再阳.精通MATLAB ...
- R语言从经济时间序列中用HP滤波器,小波滤波和经验模态分解等提取周期性成分分析
经济时间序列的分析通常需要提取其周期性成分.最近我们被客户要求撰写关于经济时间序列的研究报告,包括一些图形和统计输出.这篇文章介绍了一些方法,可用于将时间序列分解为它们的不同部分.它基于<宏观经 ...
- 【小波滤波】基于小波变换的噪声信号滤波处理matlab仿真
1.软件版本 MATLAB2021a 2.核心代码 % 小波分解与程序,Xk0是要分解的原始信号,step是表示要分解的层数 function [Xh,D]=decomposition(Xk0,ste ...
- 【图像融合】基于matlab主成分结合小波离散变换PCA-DWT图像融合【含Matlab源码 2199期】
一.小波变换彩色图像融合简介 1 基于小波的图像融合 1.1 小波的分解和重构 小波变换是一种能够用来检测信号局部特征的数学工具.当然也可以将二维信号分解成不同分辨率的子带信号.由于图像为二维信号, ...
最新文章
- 如何在php中插入map热点,PHP中使用BigMap实例
- linux 目标文件格式,Linux工具 - NM目标文件格式分析
- 导入Excel表里的数据时产生【定义了过多字段】,但有时又是成功的
- Java Duration类| isZero()方法与示例
- 用python爬小说_5分钟带你用Python爬完《剑来》小说(附完整代码)!
- Java深入 - Java虚拟机性能问题监控和排查
- 本人原创,如何应用firebug突破新浪ishare下载限制
- 10.UNIX 环境高级编程--信号
- JavaScript中“基本类型”之争
- C语言进行可视化编程
- ubuntu-22.04.1磁盘分区和挂载
- C语言 计算字符串长度的几种方法
- Linux 命令大全完整版
- mac如果装win系统运行,虚拟机好还是双系统好?
- sql cast 和convert用法详解
- 中国合成革行业应用发展分析与销售前景研究报告2022版
- magento 货币换算
- 计算机网络 学习通 第三章作业
- js实现纯前端截屏(可以对iframe的内容进行截取)
- 在《自动化学报》搜无人机关键词可以看到这方面的论文