我想用多贝西小波对有奇异点的信号进行分析,然后提取奇异点发生的时间点信息,用C语言怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想用多贝西小波对有奇异点的信号进行分析,然后提取奇异点发生的时间点信息,用C语言怎么写相关的知识,希望对你有一定的参考价值。

这个程序要在单片机上实现的

(1)小波模极大值重构 MATLAB代码_天天向上_新浪博客 http://blog.sina.com.cn/s/blog_6c00b0e30100u1s5.html

function
[signal,swa,swd,ddw,wpeak]=wave_peak(points,level,Lo_D,Hi_D,Lo_R,Hi_R,offset)
%
该函数用于读取ecg信号,找到小波变换模极大序列

warning off;
ecgdata=load('ecg.txt');
%需要分析的信号,自己加
plot(ecgdata(1:points)),grid on,axis
tight,axis([1,points,-50,300]);
signal=ecgdata(1:points)'+offset;

% 信号的小波变换,按级给出概貌和细节的波形
[swa,swd] =
swt(signal,level,Lo_D,Hi_D);
figure;
subplot(level,1,1);
plot(real(signal)); grid on;axis tight;
for i=1:level
subplot(level+1,2,2*(i)+1);
plot(swa(i,:)); axis
tight;grid on;xlabel('time');
ylabel(strcat('a
',num2str(i)));
subplot(level+1,2,2*(i)+2);
plot(swd(i,:)); axis
tight;grid on;
ylabel(strcat('d ',num2str(i)));
end

%求小波变换的模极大值及其位置
ddw=zeros(size(swd));
pddw=ddw;
nddw=ddw;
posw=swd.*(swd>0);
pdw=((posw(:,1:points-1)-posw(:,2:points))<0);
pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);
negw=swd.*(swd<0);
ndw=((negw(:,1:points-1)-negw(:,2:points))>0);
nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);
ddw=pddw|nddw;
ddw(:,1)=1;
ddw(:,points)=1;
wpeak=ddw.*swd;
wpeak(:,1)=wpeak(:,1)+1e-10;
wpeak(:,points)=wpeak(:,points)+1e-10;

%按级给出小波变换模极大的波形
figure;
for i=1:level
subplot(level,1,i);
plot(wpeak(i,:)); axis tight;grid
on;
ylabel(strcat('j= ',num2str(i)));
end

注:运行此程序时一定要将待处理信号添加进去,程序中的红色部分。
追问:
ecgdata=load('ecg.txt');
参考技术A 呵呵,工程浩大!主要看小波方面的内容知道多少,你这个目的如果用CWT实现,将会碰到积分和卷积的计算,如果用DWT实现较为简单,只会遇到卷积计算,因为mallat算法有快速算法,并有现成的滤波器系数,因此较为容易实现,但要做出象样的C程序,需要较深的小波分析的数理知识,你在编程过程中会遇到很多意想不到的问题需要解决,如非必要这其实是个出力不讨好的项目。

以上是关于我想用多贝西小波对有奇异点的信号进行分析,然后提取奇异点发生的时间点信息,用C语言怎么写的主要内容,如果未能解决你的问题,请参考以下文章

基于小波包分解与RVM的声发射信号识别

脑电信号基于matlab小波变换+样本熵的癫痫脑电信号特征提取含Matlab源码 1154期

小波包及其应用

心电信号基于matlab Simulink胎儿心电信号提取含Matlab源码 1550期

小波变换

CDF 9/7 离散小波变换(卷积)