基于小波变换的数据峰值检测matlab仿真
1.算法仿真效果
matlab2022a仿真结果如下:
2.算法涉及理论知识概要
小波变换(wavelet transform,WT)是一种新的变换分析方法,它继承和发展了短时傅立叶变换局部化的思想,同时又克服了窗口大小不随频率变化等缺点,能够提供一个随频率改变的“时间-频率”窗口,是进行信号时频分析和处理的理想工具。它的主要特点是通过变换能够充分突出问题某些方面的特征,能对时间(空间)频率的局部化分析,通过伸缩平移运算对信号(函数)逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,能自动适应时频信号分析的要求,从而可聚焦到信号的任意细节,解决了Fourier变换的困难问题,成为继Fourier变换以来在科学方法上的重大突破。
与Fourier变换相比,小波变换是空间(时间)和频率的局部变换,因而能有效地从信号中提取信息。通过伸缩和平移等运算功能可对函数或信号进行多尺度的细化分析,解决了Fourier变换不能解决的许多困难问题。小波变换联系了应用数学、物理学、计算机科学、信号与信息处理、图像处理、地震勘探等多个学科。数学家认为,小波分析是一个新的数学分支,它是泛函分析、Fourier分析、样条分析、数值分析的完美结晶;信号和信息处理专家认为,小波分析是时间—尺度分析和多分辨分析的一种新技术,它在信号分析、语音合成、图像识别、计算机视觉、数据压缩、地震勘探、大气与海洋波分析等方面的研究都取得了有科学意义和应用价值的成果。信号分析的主要目的是寻找一种简单有效的信号变换方法,使信号所包含的重要信息能显现出来。小波分析属于信号时频分析的一种,在小波分析出现之前,傅立叶变换是信号处理领域应用最广泛、效果最好的一种分析手段。傅立叶变换是时域到频域互相转化的工具,从物理意义上讲,傅立叶变换的实质是把这个波形分解成不同频率的正弦波的叠加和。正是傅立叶变换的这种重要的物理意义,决定了傅立叶变换在信号分析和信号处理中的独特地位。傅立叶变换用在两个方向上都无限伸展的正弦曲线波作为正交基函数,把周期函数展成傅立叶级数,把非周期函数展成傅立叶积分,利用傅立叶变换对函数作频谱分析,反映了整个信号的时间频谱特性,较好地揭示了平稳信号的特征。
小波变换是一种新的变换分析方法,它继承和发展了短时傅立叶变换局部化的思想,同时又克服了窗口大小不随频率变化等缺点,能够提供一个随频率改变的“时间-频率”窗口,是进行信号时频分析和处理的理想工具。它的主要特点是通过变换能够充分突出问题某些方面的特征,因此,小波变换在许多领域都得到了成功的应用,特别是小波变换的离散数字算法已被广泛用于许多问题的变换研究中。从此,小波变换越来越引起人们的重视,其应用领域来越来越广泛。
3.MATLAB核心程序
if sel == 1 figure; subplot(211); plot(Timesa,ay1,'b'); hold on plot(Timesa(locsy1),ay1(locsy1),'ro'); hold on plot(Timesa(indxy1),ay1(indxy1),'k*'); hold on stem(Timesa(locsy1),ay1(locsy1),'ro') xlabel('time'); ylabel('ay'); subplot(212); plot(Timesa,az1,'b');; hold on plot(Timesa(locsz1),az1(locsz1),'ro'); hold on plot(Timesa(indxz1),az1(indxz1),'k*'); hold on stem(Timesa(locsz1),az1(locsz1),'ro') xlabel('time'); ylabel('az'); Tay1 =[Timesa(locsy1)]'; Tby1 =[Timesa(indxy1)]'; Ay1 =[ay1(locsy1)]'; ........................................................................ for i = 1:length(p1)-1 diff1(1,i)=p1(i+1)-p1(i); diff2(1,i)=p2(i+1)-p2(i); end 5*mean(diff1) 5*mean(diff2) ay=mean(sqrt(ax1(locsz1).^2 + ay1(locsz1).^2 + az1(locsz1).^2)) end if sel == 2 figure; subplot(211); plot(Times2,ay2,'b'); hold on plot(Times2(locsy2),ay2(locsy2),'ro'); hold on plot(Times2(indxy2),ay2(indxy2),'k*'); hold on stem(Times2(locsy2),ay2(locsy2),'ro') xlabel('time'); ylabel('ay'); subplot(212); plot(Times2,az2,'b');; hold on plot(Times2(locsz2),az2(locsz2),'ro'); hold on plot(Times2(indxz2),az2(indxz2),'k*'); hold on stem(Times2(locsz2),az2(locsz2),'ro') xlabel('time'); ylabel('az'); ptime1 = Times2(locsy2); ptime2 = Times2(indxz2); for i = 1:length(ptime1)-1 diff1(1,i)=ptime1(i+1)-ptime1(i); diff2(1,i)=ptime2(i+1)-ptime2(i); end 2*mean(diff1) 2*mean(diff2) % figure; % plot(ptime1-ptime2); ................................................................... for i = 1:length(ptime1)-1 diff1(1,i)=ptime1(i+1)-ptime1(i); diff2(1,i)=ptime2(i+1)-ptime2(i); end 2*mean(diff1) 2*mean(diff2) figure; plot(ptime1-ptime2); p1=Times2(indxy2(4:end)); p2=Times2(indxz2); for i = 1:length(p1)-1 diff1(1,i)=p1(i+1)-p1(i); diff2(1,i)=p2(i+1)-p2(i); end 5*mean(diff1) 5*mean(diff2) ay=mean(sqrt(ax3(locsz3).^2 + ay3(locsz3).^2 + az3(locsz3).^2)) end