小波最开始是数学上提出的概念,并且在纯数学的王国里存在了一个世纪之久。最开始是为了弥补傅里叶分析的缺陷,即傅里叶级数发散的问题,并寻找出能够代替傅里叶分析的方法。从最早的一些艰难的探索开始直到慢慢发展成为一套完整系统的小波分析理论。早在1909年,Haar发现了最简单的小波,即Haar小波,到1982年Marr在计算视觉理论中提到的Marr小波,而后在1985年,Meyer提出了速降正则正交小波。1987年,Mallat提出小波多分辨率分析MRA用于正交小波的分解和重构。正是由于小波的多分辨分析特性,因此其具有“数学显微镜”的美称。再到后来小波作为信号分析和其他工程领域的分析工具开始流行起来,并在一些非线性问题中展现出强大的优势,人们渐渐看到了小波的无限魅力和潜力。正是由于小波分析理论完善的数学基础,以及小波优良的数值性能,各种类型的小波层出不穷,基于小波分析的一系列数值计算方法发展迅速。在实际应用中往往需要根据问题的特点及小波自身的特性选择或构造适合的小波基底构建形函数。
鉴于此,采用小波多分辨分析方法进行一维时间序列信号趋势检测与去除,运行环境为MATLAB R2018a,主运行代码如下,还是很容易理解的:
%% Load and visualize the signal
clc;clear
load ekgTrend.mat
helperTimeDomain(t,ekg_Trend,'EKG Signal',60,'r');
%% Decompose signal into 8 subbands
w = modwt(ekg_Trend,8);
%% Multiresolution view of signal
mra1 = modwtmra(w);
approxRecon = mra1(9,:);
viewLevel8Approximation(t,ekg_Trend,approxRecon);
%% Visualize approximation subbands for level 9 and level 10
viewApproximationSubbandReconstruction(t,ekg_Trend);
%% Isolate and visualize the trend
isolateTrendPlot(t,ekg_Trend);
%% Remove the trend component from the signal
coeffs = modwt(ekg_Trend,10);
coeffs(11,:) = 0; %setting approximation coefficients at level 10 to zero
sigOut = imodwt(coeffs);
完整代码:https://mbd.pub/o/bread/mbd-Y52VlZxx
viewDetrendedSignal(t,ekg_Trend,sigOut)
担任《Mechanical System and Signal Processing》《中国电机工程学报》《控制与决策》等期刊审稿专家,擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。