模极大值去噪算法步骤:

1.对含噪信号进行尺度为,J=1,2,......,J的小波变换,并求出每个尺度上变换系数的模极大值。

2.从最大尺度开始,确定一个阈值T,把该尺度上模极大值小于T的极值点去掉,保留其他的,得到最大尺度上的一组新的模极大值点。

3.作出尺度函数j=J上保留的每个极大值点的一个邻域,如N(t,s),在J-1尺度上找出与邻域,在J-1尺度上找出与邻域N(t,s)内的极值点相对应的传播点(极值点),保留这些极值点,去掉其他极值点,从而得到j-1尺度上的一组新极值点。

4.置j=j-1,重复步骤3,直到j=2.

5.在j=2时保存的极值点位置上,找出j=1时对应的极值点,而去掉其他。

6.利用多尺度上保留的极值点的小波系数,采取适当方法重构。信号重构的方法有Mallat提出的交错投影的方法(如代码Py投影和Pgama投影),还有利用框架理论近似重构信号的快速算法。

function int=Py(int,len)
%单区间Py投影:对区间进行裁剪,即Py投影,返回裁剪后的区间信号
%输入参数:int为单区间的点,len为区间中点的个数
%返回值int为Py投影后的区间
if sign(int(1))==sign(int(len))%若区间左右端点同号,其中sign为符号函数,Y = sign(x) 返回与 x 大小相同的数组 Y,其中 Y 的每个元素是:1,前提是 x 的对应元素大于 0。0,前提是 x 的对应元素等于 0。-1,前提是 x 的对应元素小于 0。x./abs(x),前提是 x 为复数int=int.*(sign(int)==sign(int(1)));%区间上,只保留本身符号与左端点符号相同的那些inte=interp1([1,len],[int(1),int(len)],(1:len),'linear');%只用区间端点处的值,在区间上进行线性插值,得到区间的插值后的点,与原来区间点个数相同int=sign(int(1))*(abs(inte)-(abs(inte)-abs(int)).*((abs(inte)-abs(int))>0));%只保留区间上的点的模值比线性插值对应点模值小的那些点,其余的为0,符号与左端点一致
elsesgn=sign(int(len)-int(1));%若区间端点不同号,则取相减的符号。两极值点异号,中间有单调性intem=max([int(1),int(len)]);%对端点中的最大和最小点分别赋值inten=min([int(1),int(len)]);%从区间端点开始,循环找寻该区间的极大值点和极小值点for i=1:len-2if sign(int(i+1)-int(i))~=sgn    %若差商符号不是sgn,令二者相等,保证两个极值点之间的单调性int(i+1)=int(i);endif int(i+1)>intem   %比端点大,则是端点值int(i+1)=intem;endif int(i+1)<inten   %比端点小,则是端点值int(i+1)=inten;endend
end
function int =Pg(int,lev,sr)
%该函数对一个区间进行Pgama投影
%输入参数:int为极值点处差,lev为层号,sr为采样率
%返回值int为修正的区间
T=length(int);
if T==2 %只有两个点,则不动int=int;
elset=linspace(0,(T-1)/sr,T);%在0和(T-1)/sr中均匀插点,使最后点的个数为Tpara=(([1,1;exp(2^(-lev)*t(T)),exp(-2^(-lev)*t(T))])\[int(1),int(T)]')';ap=para(1);bt=para(2);int=ap.*exp(2^(-lev).*t)+bt.*exp(-2^(-lev).*t);%修正的区间
endend
function w2 = Pyg(w1,wp,sr)
%用于进行Pgama和Py投影
%输入参数:w1为加入细节信息改进的分解信号,wp为小波多层分解后的信号的极值点,sr为采样率
%返回值w2为投影的最终结果
err=wp-w1.*(wp~=0);%极值点位置处原来与现在的差
w2=zeros(size(wp));
[r,c]=size(wp);
%对每一层小波分别进行处理
for m=1:r    %处理每一层fr=find(wp(m,:));   %模极值点位置,num_int=length(fr)-1;%用模极值点将区间分段,区间个数为极值点个数-1%先找到以模极大值划分的区间,然后对每一区间进行Py投影for j=1:num_intint=w1(m,fr(j):fr(j+1));%极值点划分的区间中的点len=length(int);%区间中点的个数if len>2w1(m,fr(j):fr(j+1))=Py(int,len);%区间内多于两个点,即中间有点,则进行Py投影endend%再逐一区间进行Pgama投影for j=1:num_intint=err(m,fr(j):fr(j+1));    %在两极值点之间的原来与现在的差,err(m,fr(j):fr(j+1))=Pg(int,m,sr);   endw2(m,:)=w1(m,:)+err(m,:);      %投影最终结果end
function s = mden(f,lev,n,wf)
%模极大值法去噪
%参数C,ep,sr可以调节
%输入参数为:f为带去噪信号,lev为小波分解层数,n去噪重构算法的迭代次数,wf为小波函数名称
%返回值s为重建信号
% load sumsin;%输入带噪信号
% f=[sumsin zeros(1,24)];%补零使得信号变成2的幂次,这里是信号长度变为1024
% lev=4;%模极大值提取时的分解层数
% n=20;%模极大值重构信号时的迭代次数
% wf='db3';%采用的小波函数pp=size(f);
pp=pp(2);%所处理数据的长度
sr=360;%抽样率
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);%二进制小波变换
[swa,swd]=swt(f,lev,Lo_D,Hi_D);%求二进制小波变换的模极大值及其位置
%%初始结果
%dw:局部极大值位置;wp:局部极大序列
dw=zeros(size(swd));
zdw=dw;
fdw=dw;%要找模极大值,把小波系数中大于0和小于0的分别考虑
%小波系数大于0的赋值给zw
zw=swd.*(swd>0);
%留下左边元素比右边元素小的值的位置记为1,存入zdw中
zdw=((zw(:,1:pp-1)-zw(:,2:pp))<0);
%再计算1,0间隔的点,即找到模极大值的点的位置
zdw(:,2:pp-1)=((zdw(:,1:pp-2)-zdw(:,2:pp-1))>0);%小波系数小于0的赋值给fw
fw=swd.*(swd<0);
%留下左边元素比右边元素大的值的位置记为1,存入fdw中
fdw=((fw(:,1:pp-1)-fw(:,2:pp))>0);
%再计算1,0间隔的点,即找到模极大值的点的位置
fdw(:,2:pp-1)=((fdw(:,1:pp-2)-fdw(:,2:pp-1))>0);
%将zdw和fdw中的模极大值点位置合并
dw=zdw|fdw;
%保留第一列和最后一列
dw(:,1)=1;
dw(:,pp)=1;%wp存放模极大值点的值
wp=dw.*swd;
%处理模极大值:从最高层的模极大值点开始
Dwp(:,lev)=wp(lev,:)';
M=max(Dwp(:,lev));
%模极大值的阈值用去噪函数ddencmp来获得
[Thr,sorh,keepapp]=ddencmp('den','wv',f);
C=0.8;%阈值参数
Thr=C*M/lev;%计算阈值
%将大于阈值Thr的最后一层的模极大值留下
Dwp(:,lev)=Dwp(:,lev).*(abs(Dwp(:,lev))>Thr);%处理最后一层
%模极大值的处理方式:
%在尺度j上极大值点位置构造一个搜索区域
%在尺度j-1中,将极大值点落在该区域的点保留,其他的位置0
ep=3;%该参数确定邻域
nL=length(Dwp(:,lev));
for j=1:lev-2Dwp(:,lev-j)=wp(lev-j,:)';Dp(:,lev-j+1)=(Dwp(:,lev-j+1)~=0);DD=Dp(:,lev-j+1);DDw=DD;for Pd=1:nL;if DD(Pd)==1for i=-ep:ep;if(Pd-i>=1&Pd-i<=nL)DDw(Pd-i)=1;endendendendDp(:,lev-j+1)=DDw;Dwp(:,lev-j)=Dwp(:,lev-j).*Dp(:,lev-j+1);Dp(:,lev-j)=(Dwp(:,lev-j)~=0);
end
%第一层单独处理,在第二层极大值点位置上,保留第一层相应极大值点
Dwp(:,1)=wp(1,:);
Dwp(:,1)=Dwp(:,1).*Dp(:,2);
wp=Dwp;
wp=wp';
%重构信号
s=swa(lev,:);%s为待重建的信号
%wfr=(wp~=0);%迭代初始化
w0=zeros(1,pp);
[a,d]=swt(w0,lev,Lo_D,Hi_D);%从0开始
w2=d;%重建高频
for j=1:nw2=Pyg(d,wp,sr);%Py投影和Pgama投影w0=iswt(s,w2,Lo_R,Hi_R);%Pv投影[a,d]=swt(w0,lev,Lo_D,Hi_D);
end
s=iswt(swa(lev,:),w2,Lo_R,Hi_R);%计算重建信号
% figure,
% subplot(2,1,1),plot(f,'r');
% grid on;
% title('原始信号');
% subplot(2,1,2),plot(s);
% grid on;
% title('模极值去噪后信号')
end
load sumsin;%输入带噪信号
f=[sumsin zeros(1,24)];%补零使得信号变成2的幂次,这里是信号长度变为1024
lev=4;%模极大值提取时的分解层数
n=20;%模极大值重构信号时的迭代次数
wf='db3';%采用的小波函数
s=mden(f,lev,n,wf);%模极大值去噪算法
%计算PSNR值,MSE值,NC值
P=psnr(f,s);
m=mse(f,s);
% N=nc(f,s);
figure,plot(f,'r');
grid on;
xlabel('t'),ylabel('f(t)');
figure,plot(s);
grid on;
xlabel('t'),ylabel('s(t)');

小波学习笔记——模极大值去噪相关推荐

  1. 小波学习笔记——MATLAB

    使用MATLAB进行小波的学习,学习尺度函数.小波函数以及小波函数构造的方法 1.db3小波器的提取 2.对一维信号进行小波滤波 3.对图片进行小波滤波 4.自己构建dbN小波滤波器 5.用Casca ...

  2. 小程序 pagescrollto_微信小程序学习笔记(三)-- 首页及详情页开发

    一.常用组件 在上一个章节中讲解了封装请求数据的模块,在此处请求轮播图的数据 1.首页轮播图数据的请求以及渲染 1.1 轮播图数据的请求 pages/home/home.js import 2 使用组 ...

  3. 微信小程序学习笔记(1)

    微信小程序学习笔记 1.小程序代码结构 2.逻辑层和视图层 3. 小程序的宿主环境(通信模型.运行机制.组件.API) 4. 数据绑定和事件绑定 1.小程序代码结构 当开发者新建一个工程时,项目文件包 ...

  4. 微信小程序学习笔记一 + 小程序介绍 前置知识

    微信小程序学习笔记一 1. 什么是小程序? 2017年度百度百科十大热词之一 微信小程序, 简称小程序, 英文名 Mini Program, 是一种不需要下载安装即可使用的应用 ( 张小龙对其的定义是 ...

  5. 微信小程序学习笔记(七)----简单文章推荐列表和分类图标的实现

    想要实现一个顶部是几篇纯文字的推荐文章,推荐文章下面是四个分类图标,具体实现出来是这个样子的,比较简单: 首先先来找一下素材,这几个图标是我在阿里巴巴图标库下载的,这里是下载地址: http://ww ...

  6. 小程序学习笔记(1)

    小程序学习笔记(1) 以下是学习期间记录的笔记: 10-18号晚上学习笔记: 小程序实际上是需要下载安装的,只是很小,用户基本上觉察不到 组件是具有一定的功能的代码的集合 移动端适配: 物理像素:是图 ...

  7. 【小盐巴学习笔记】—美团吃饭哪家强?Python词云分析告诉你

    [小盐巴学习笔记]-美团吃饭哪家强?Python词云分析告诉你 效果图 前言 一.爬虫分析 1.分析网址 2.分析数据 二.完整代码 1.爬取美团牛排店评论 2.绘制词云图 3.词云分析 总结 效果图 ...

  8. 自己的微信小程序学习笔记【3】——第三方UI库Lin-Ui的加载及使用

    其他微信小程序的学习笔记 自己的微信小程序学习笔记[1]--小程序开发工具的使用及项目文件说明 自己的微信小程序学习笔记[2]--从零开始新建项目 文章目录 其他微信小程序的学习笔记 前言 一.Lin ...

  9. 【信号去噪】基于小波阈值实现心电信号去噪附matlab代码

    1 简介 由于外界环境的干扰,导致在实际信号的采集过程中无法避免地引入一些随机噪声,从而影响下一步的信号处理,所以如何对含噪信号进行去噪处理,提取出对研究有用的信号,成为信号领域的一个重要研究课题.小 ...

最新文章

  1. Android中的ViewDragHelper
  2. Navicat连接MySQL,出现2059 - authentication plugin ‘caching_sha2_password‘的解决方案
  3. 低电压瞬态抑制二极管,有哪些常用的型号?
  4. lodash源码分析之compact中的遍历
  5. 对比学习视角:重新审视推荐系统的召回粗排模型
  6. 目标检测——YOLOV3的学习笔记
  7. 干不过微信,又抢钉钉地盘!中移动砸下 8400 万重做飞信
  8. Python基础篇【第六篇】:函数补充
  9. ubuntu下的项目管理工具dia, planner
  10. Unity简单实现调用电脑打印机打印图片功能
  11. 互联网金融一:大额支付系统、小额支付系统介绍
  12. ahk键盘增强✨✨✨v1.1
  13. java基础入门(完整详细版)
  14. python超简单趣味编程100例_python趣味编程100例
  15. Mac相关配置(本地host,端口被占用)
  16. SSH常见问题及其解决方法
  17. kvm启动流程-006
  18. principal java_CAS 单点登录服务端 如何获取到principal
  19. mysql学习第二天
  20. sqlite的下载安装和配置使用(非常详细)

热门文章

  1. Android支付接入:Google In-app-Billing
  2. #define 宏的边际效应是什么
  3. 微博情感分析的表情符号平滑语言模型(A11, AAAI2012)
  4. Python实验数据处理
  5. 【习题详解】动态规划DP:硬币游戏 蛋糕 游荡的奶牛 决斗
  6. Web开发基础——CSS
  7. 2020 China Collegiate Programming Contest Weihai Site H.Message Bomb
  8. pycharm使用虚拟环境时出现的那些问题
  9. 网络协议篇之DHCP协议(一)—— DHCP协议基础
  10. [Swift]LeetCode221. 最大正方形 | Maximal Square