热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sym8matlab,【Matlab学习手记】sym8小波滤波

提供sym8小波,四层全局软阈值滤波源代码,采用Matlab语言编写,可移植性强。源代码clear;clc;loadleleccum;in

提供sym8小波,四层全局软阈值滤波源代码,采用Matlab语言编写,可移植性强。

8d973193b928c90368469091b85a5280.png

源代码

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 + 1

exLen = 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);

end

function dstCoef = WaveDec(srcData, msgLen, allSize, Scale, Lo_D, Hi_D, filterLen)

tmpSrc = srcData;

gap = msgLen(2) * 2;

dstCoef = zeros(allSize, 1);

for i = 1 : Scale

curSigLen = 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

end

function dstCoef = DWT(srcData, srcLen, Lo_D, Hi_D, filterLen)

decLen = floor((srcLen + filterLen - 1)/2);

dstCoef = zeros(2 * decLen, 1);

for i = 0 : decLen - 1

for j = 0 : filterLen - 1

k = 2 * i - j + 1;

if k <0 && k >&#61; -filterLen &#43; 1

tmp &#61; srcData(-k);

elseif k >&#61; 0 && k <&#61; srcLen - 1

tmp &#61; srcData(k &#43; 1);

elseif k > srcLen - 1 && k <&#61; srcLen &#43; filterLen - 2

tmp &#61; srcData(2 * srcLen - k);

else

tmp &#61; 0;

end

dstCoef(i &#43; 1) &#61; dstCoef(i &#43; 1) &#43; Lo_D(j &#43; 1) * tmp;

dstCoef(i &#43; 1 &#43; decLen) &#61; dstCoef(i &#43; 1 &#43; decLen) &#43; Hi_D(j &#43; 1) * tmp;

end

end

end

function thr &#61; GetThr(detCoef, msgLen)

detCoef &#61; abs(detCoef);

% detCoef &#61; sort(detCoef);

sigma &#61; median(detCoef)/0.6745;

thr &#61; sigma * sqrt(2 * log(msgLen(1)));

end

function dstCoef &#61; Wthresh(dstCoef, thr, allSize, gap)

for i &#61; gap : allSize - 1

if abs(dstCoef(i &#43; 1))

dstCoef(i &#43; 1) &#61; 0;

else

if dstCoef(i &#43; 1) <0

dstCoef(i &#43; 1) &#61; thr - abs(dstCoef(i &#43; 1));

else

dstCoef(i &#43; 1) &#61; abs(dstCoef(i &#43; 1)) - thr;

end

end

end

end

function dstData &#61; WaveRec(srcCoef, msgLen, Scale, Lo_R, Hi_R, filterLen)

tmpSrcCoef &#61; zeros(2 * msgLen(2), 1);

tmpSrcCoef(1 : 2 * msgLen(Scale &#43; 1)) &#61; srcCoef(1 : 2 * msgLen(Scale &#43; 1));

gap &#61; 2 * msgLen(Scale &#43; 1);

for i &#61; Scale : -1 : 1

curDstLen &#61; msgLen(i);

dstData &#61; IDWT(tmpSrcCoef, curDstLen, Lo_R, Hi_R, filterLen);

if i ~&#61; 1

tmpSrcCoef(1 : curDstLen) &#61; dstData(1 : curDstLen);

tmpSrcCoef(curDstLen &#43; 1 : 2 * curDstLen) &#61; srcCoef(gap &#43; 1 : gap &#43; curDstLen);

gap &#61; gap &#43; msgLen(i);

end

end

end

function recData &#61; IDWT(srcCoef, dstLen, Lo_R, Hi_R, filterLen)

recLen &#61; floor((dstLen &#43; filterLen - 1) / 2);

recData &#61; zeros(dstLen, 1);

for i &#61; 0 : dstLen - 1

recData(i &#43; 1) &#61; 0;

for j &#61; 0 : recLen - 1

k &#61; i - 2 * j &#43; filterLen - 2;

if k >&#61; 0 && k

recData(i &#43; 1) &#61; recData(i &#43; 1) &#43; Lo_R(k &#43; 1) * srcCoef(j &#43; 1) &#43; Hi_R(k &#43; 1) * srcCoef(j &#43; 1 &#43; recLen);

end

end

end

end



推荐阅读
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • express工程中的json调用方法
    本文介绍了在express工程中如何调用json数据,包括建立app.js文件、创建数据接口以及获取全部数据和typeid为1的数据的方法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
author-avatar
海蓝透了我的心
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有