提供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小波滤波相关推荐

  1. sym8 matlab,【Matlab学习手记】sym8小波滤波

    提供sym8小波,四层全局软阈值滤波源代码,采用Matlab语言编写,可移植性强. 源代码 clear;clc; load leleccum; indx = 1:3450; noisez = lele ...

  2. 【图像去噪】基于matlab小波滤波(硬阙值+软阙值)+中值滤波图像去噪【含Matlab源码 462期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像去噪]基于matlab小波滤波(硬阙值+软阙值)+中值滤波图像去噪[含Matlab源码 462期] 获取代码方式2: 通过订阅紫极神光 ...

  3. 【Matlab图像去噪】小波滤波(硬阙值+软阙值)+中值滤波图像去噪【含源码 462期】

    一.代码运行视频(哔哩哔哩) [Matlab图像去噪]小波滤波(硬阙值+软阙值)+中值滤波图像去噪[含源码 462期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  4. matlab 风速模型 小波滤波

    1.内容简介 略 469-可以交流.咨询.答疑 2.内容说明 任务要求 设A为函数A=3+ 2sin32t+ 1/5sin*(1/10π)te N序列是为噪声,模型为大气的阵风模型,在网上csdn能找 ...

  5. 【图像去噪】基于matlab快速跨尺度小波降噪泊松损坏图像去噪【含Matlab源码 1893期】

    ⛄一.图像去噪及滤波简介 1 图像去噪 1.1 图像噪声定义 噪声是干扰图像视觉效果的重要因素,图像去噪是指减少图像中噪声的过程.噪声分类有三种:加性噪声,乘性噪声和量化噪声.我们用f(x,y)表示图 ...

  6. 【Matlab脑电信号】小波睡眠监测【含源码 595期】

    一.代码运行视频(哔哩哔哩) [Matlab脑电信号]小波睡眠监测[含源码 595期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 沈再阳.精通MATLAB ...

  7. R语言从经济时间序列中用HP滤波器,小波滤波和经验模态分解等提取周期性成分分析

    经济时间序列的分析通常需要提取其周期性成分.最近我们被客户要求撰写关于经济时间序列的研究报告,包括一些图形和统计输出.这篇文章介绍了一些方法,可用于将时间序列分解为它们的不同部分.它基于<宏观经 ...

  8. 【小波滤波】基于小波变换的噪声信号滤波处理matlab仿真

    1.软件版本 MATLAB2021a 2.核心代码 % 小波分解与程序,Xk0是要分解的原始信号,step是表示要分解的层数 function [Xh,D]=decomposition(Xk0,ste ...

  9. 【图像融合】基于matlab主成分结合小波离散变换PCA-DWT图像融合【含Matlab源码 2199期】

    一.小波变换彩色图像融合简介 1 基于小波的图像融合 1.1 小波的分解和重构 小波变换是一种能够用来检测信号局部特征的数学工具.当然也可以将二维信号分解成不同分辨率的子带信号.由于图像为二维信号, ...

最新文章

  1. 如何在php中插入map热点,PHP中使用BigMap实例
  2. linux 目标文件格式,Linux工具 - NM目标文件格式分析
  3. 导入Excel表里的数据时产生【定义了过多字段】,但有时又是成功的
  4. Java Duration类| isZero()方法与示例
  5. 用python爬小说_5分钟带你用Python爬完《剑来》小说(附完整代码)!
  6. Java深入 - Java虚拟机性能问题监控和排查
  7. 本人原创,如何应用firebug突破新浪ishare下载限制
  8. 10.UNIX 环境高级编程--信号
  9. JavaScript中“基本类型”之争
  10. C语言进行可视化编程
  11. ubuntu-22.04.1磁盘分区和挂载
  12. C语言 计算字符串长度的几种方法
  13. Linux 命令大全完整版
  14. mac如果装win系统运行,虚拟机好还是双系统好?
  15. sql cast 和convert用法详解
  16. 中国合成革行业应用发展分析与销售前景研究报告2022版
  17. magento 货币换算
  18. 计算机网络 学习通 第三章作业
  19. js实现纯前端截屏(可以对iframe的内容进行截取)
  20. 在《自动化学报》搜无人机关键词可以看到这方面的论文

热门文章

  1. python对红楼梦的每一章节进行词频统计
  2. 烦烦烦,天天这样的日子
  3. VB 2010 (20)多态性
  4. 网络工程Datacom-HCIA
  5. 计算机专业老师新学期工作计划,计算机教师工作计划
  6. (一)因式分解机(Factorization Machine,FM)原理及实践
  7. 手把手教如何搭建一个百度网盘目录站点【保姆级】
  8. 阿里新突破!自主创新的下一代匹配推荐技术:任意深度学习+树状全库检索
  9. 华为腾讯汉能:叫响世界的三大中国自主创新企业
  10. PowerBI-时间智能函数-PARALLELPERIOD