基于VMD分解的信号处理流程:从Excel读取、IMF分量计算与滤波重构

张开发
2026/4/21 2:38:39 15 分钟阅读

分享文章

基于VMD分解的信号处理流程:从Excel读取、IMF分量计算与滤波重构
从excel中读取信号首先计算信号的vmd分解得到imf分量然后根据imf分量与原始信号的相关系数确定出信号imf喝噪声imf对有用的imf进行小波阈值滤波最后对滤波后的imf进行重构输出信号 下图是流程图盒vmd分解结果的时域后频谱一、概述本文档将详细解读两组信号处理相关的MATLAB代码集合分别是基于VMD变分模态分解与小波阈值的信号降噪代码以及基于EEMD/CEEMD集合经验模态分解/互补集合经验模态分解与样本熵的信号分解与频段划分代码。两组代码均围绕信号的分解、特征提取、降噪或频段分离展开适用于不同场景下的信号处理需求如含噪信号的降噪处理、复杂信号的频段拆分与特征分析等。二、基于VMD与小波阈值的信号降噪代码VMD_corr_wavelet与仿真信号版本一核心功能该代码集合的核心目标是对输入信号真实信号或仿真信号进行降噪处理。通过VMD分解将信号分解为多个固有模态函数IMF利用相关系数筛选出含有效信息的IMF分量再通过小波阈值滤波对有效IMF分量进一步降噪最终重构得到去噪信号。二文件组成与分工文件路径文件名核心功能VMDcorrwaveletMain1.m真实信号处理主程序读取Excel信号、VMD分解、相关系数计算、小波阈值滤波、信号重构与可视化VMDcorrwaveletVMD.m变分模态分解核心函数实现信号的VMD分解输出IMF分量、分量频谱及中心频率VMDcorrwaveletplotIMF.mIMF分量可视化函数绘制IMF分量的时域波形与频域频谱仿真信号VMD阈值小波阈值处理合成降噪信号Main1.m仿真信号处理主程序生成含噪仿真信号、VMD分解、相关系数计算、小波阈值滤波、信号重构与可视化仿真信号VMD阈值小波阈值处理合成降噪信号VMD.m同VMDcorrwavelet目录下的VMD.m为VMD分解核心函数仿真信号VMD阈值小波阈值处理合成降噪信号plotIMF.m增强版IMF可视化函数支持输入采样频率优化频谱绘制的频率轴精度三核心算法流程1. 信号输入与预处理真实信号版本VMDcorrwavelet/Main1.m通过xlsread(25.xlsx)读取Excel文件中的时间序列数据分离时间列time与信号列signal。仿真信号版本仿真信号目录/Main1.m生成频率为300Hz的正弦信号y0.01sin(2pi300t)通过awgn函数添加噪声信噪比-8.986dB得到含噪信号y_noise并绘制原始信号、含噪信号及其频谱。2. VMD分解参数配置与执行VMD分解的核心参数及含义如下参数含义真实信号配置仿真信号配置alpha带宽约束平衡参数20006000tau对偶上升时间步长噪声容限10K分解模态数量88DC是否强制第一模态为直流分量1是1是init中心频率初始化方式1均匀分布1均匀分布tol收敛判据容差1e-61e-7通过调用[u, u_hat, omega] VMD(signal, alpha, tau, K, DC, init, tol)执行分解输出uK个IMF分量K×N矩阵N为信号长度u_hat各IMF分量的频谱omega各IMF分量的估计中心频率。3. IMF分量可视化调用plotIMF函数绘制每个IMF分量的时域波形左子图与频域频谱右子图仿真信号版本的plotIMF支持输入采样频率fs使频谱的频率轴更精准。4. 相关系数计算与有效IMF筛选通过循环计算每个IMF分量与原始信号真实信号为输入信号仿真信号为无噪原始信号的相关系数for i1:size(u,1) [r(i),p(i)] corr(signal,u(i,:)); % 计算相关系数r与显著性p disp([IMF,num2str(i),相关系数为,num2str(r(i))]); end设置相关系数阈值TH真实信号TH0.38仿真信号TH0.02筛选出相关系数≥TH的IMF分量视为含有效信息其余分量视为噪声。5. 小波阈值滤波对筛选出的有效IMF分量调用MATLAB内置函数wden进行小波阈值降噪真实信号版本imfdwavelet_tempwden(u(i,:),rigrsure,s,mln,3,sym7)仿真信号版本imfdwavelet_tempwden(u(i,:),rigrsure,s,one,5,sym7)wden函数参数说明参数含义配置值信号输入IMF分量u(i,:)阈值选择规则rigrsure自适应阈值固定阈值应用方式s软阈值固定分解层数真实信号3层仿真信号5层3/5小波基函数sym77阶Symlet小波固定6. 信号重构与结果可视化将降噪后的有效IMF分量求和得到重构去噪信号signalr sum(imfd_wavelet,1)。从excel中读取信号首先计算信号的vmd分解得到imf分量然后根据imf分量与原始信号的相关系数确定出信号imf喝噪声imf对有用的imf进行小波阈值滤波最后对滤波后的imf进行重构输出信号 下图是流程图盒vmd分解结果的时域后频谱通过2×2子图展示结果原始信号含噪时域波形原始信号频域频谱去噪信号时域波形去噪信号频域频谱。四关键差异说明对比维度真实信号版本仿真信号版本信号来源Excel文件读取程序生成正弦含噪信号相关系数对比对象输入的原始信号无噪的仿真原始信号VMD参数alpha2000tau1tol1e-6alpha6000tau0tol1e-7小波滤波参数分解层数3阈值尺度mln分解层数5阈值尺度one可视化功能基础时域频谱绘制支持采样频率输入频谱频率轴更精准三、基于EEMD/CEEMD与样本熵的信号分解与频段划分代码eemdsampleEntropy_0329214035一核心功能该代码集合的核心目标是对复杂信号进行自适应分解与频段划分。通过EEMD或CEEMD将信号分解为多个IMF分量计算各IMF分量的样本熵反映信号复杂度根据样本熵阈值将IMF分量划分为低频、中频、高频三组实现信号的频段分离与特征提取。二文件组成与分工文件路径文件名核心功能ceemd样本熵Main.mCEEMD分解主程序读取信号、CEEMD分解、IMF可视化、样本熵计算、频段划分与重构ceemd样本熵ceemd.m互补集合经验模态分解函数通过添加正负成对噪声降低模态混叠输出IMF分量ceemd样本熵extrema.m极值点检测函数用于EMD类分解中的上下包络线拟合ceemd样本熵sampleEntropy.m样本熵计算函数基于Chebyshev距离计算信号的样本熵eemd样本熵\v1Main.mEEMD分解主程序读取信号、EEMD分解、IMF可视化、样本熵计算、频段划分与重构eemd样本熵\v1eemd.m集合经验模态分解函数通过添加高斯白噪声降低模态混叠输出IMF分量eemd样本熵\v1extrema.m同ceemd样本熵目录下的extrema.m为极值点检测函数eemd样本熵\v1sampleEntropy.m同ceemd样本熵目录下的sampleEntropy.m为样本熵计算函数三核心算法流程1. 信号输入与参数配置通过dataimportdata(data.mat)读取MATLAB数据文件中的时间序列信号配置核心参数采样频率Fs600Hz可默认设为1时间向量tlinspace(0,1,L)L为信号长度频率轴fFs*(0:(L/2))/L用于频谱绘制。2. EEMD/CEEMD分解1CEEMD分解ceemd样本熵/Main.m调用imf ceemd(data,0.2,100,5)执行分解参数说明参数含义配置值Y输入信号dataNstd添加噪声的标准差与信号标准差比值0.2NE集合平均次数100TNM模态数量不含趋势项5CEEMD通过添加正负成对的高斯白噪声对每次添加噪声后的信号进行EMD分解最后对所有分解结果取平均有效降低模态混叠。2EEMD分解eemd样本熵\v1/Main.m调用eemd_imf eemd(data,0.1,10)执行分解参数说明参数含义配置值Y输入信号dataNstd添加噪声的标准差与信号标准差比值0.1NE集合平均次数10EEMD通过添加单一高斯白噪声并多次分解取平均实现降噪模态混叠抑制效果弱于CEEMD但计算效率更高。3. IMF分量可视化通过循环绘制IMF分量的时域波形与频域频谱时域波形按6个分量为一组绘制子图标注IMF序号或“残差”频域频谱对每个IMF分量进行FFT变换绘制0~Fs/2范围内的频谱标注对应IMF序号。4. 样本熵计算对每个IMF分量计算样本熵反映分量的复杂度样本熵越大信号越复杂通常对应高频噪声或复杂振动sampEn(i,1) sampleEntropy(imf(i,:),2,0.2*std(imf(i,:)),1);sampleEntropy函数参数说明参数含义配置值seq输入信号序列imf(i,:)wlen窗口长度维度2r相似度容差通常为信号标准差的0.1~0.2倍0.2*std(imf(i,:))shift采样间隔1为无下采样15. 基于样本熵的频段划分与重构设置两个样本熵阈值Th1和Th2将IMF分量划分为三组频段样本熵条件重构方式低频sampEn ≤ Th2所有满足条件的IMF分量求和中频Th2 sampEn Th1所有满足条件的IMF分量求和高频sampEn ≥ Th1所有满足条件的IMF分量求和阈值配置CEEMD版本Th10.4Th20.1EEMD版本Th10.5Th20.1。最后绘制三组重构信号的时域波形与频域频谱实现信号的频段分离。四关键差异说明对比维度CEEMD版本ceemd样本熵EEMD版本eemd样本熵\v1分解算法CEEMD互补集合EMDEEMD集合EMD抗模态混叠能力强添加正负成对噪声较弱添加单一噪声分解参数Nstd0.2NE100TNM5Nstd0.1NE10模态数量自动计算样本熵阈值Th10.4Th20.1Th10.5Th20.1计算效率较低100次集合平均较高10次集合平均四、适用场景与使用建议一VMD小波阈值降噪代码适用场景含噪信号的降噪处理尤其适用于非线性、非平稳信号如振动信号、声信号、生物医学信号需保留信号主要特征同时抑制随机噪声的场景已知信号大致频率范围可通过调整VMD参数如K、alpha优化分解效果的场景。使用建议调整VMD参数-K模态数量需根据信号复杂度调整过多易导致过分解过少易导致欠分解-alpha带宽约束信号频率越高alpha可适当增大如仿真信号alpha6000高于真实信号的2000-TH相关系数阈值根据实际信号的噪声强度调整噪声越强阈值可适当降低。小波参数优化- 小波基函数可替换为db4db系列小波、haar Haar小波等根据信号特征选择- 分解层数信号长度越长可适当增加分解层数如仿真信号5层 vs 真实信号3层。二EEMD/CEEMD样本熵频段划分代码适用场景复杂信号的频段分离如将信号中的低频趋势、中频有效振动、高频噪声分离信号特征提取样本熵可作为信号复杂度指标用于故障诊断、状态监测等模态混叠问题较突出的信号优先选择CEEMD对计算效率有要求模态混叠不严重的场景可选择EEMD。使用建议分解算法选择- 若信号模态混叠严重如多频率成分叠加优先使用CEEMD通过增加NE集合次数提升效果- 若需快速处理可选择EEMD适当增大Nstd噪声强度平衡效果与效率。样本熵与阈值调整- 样本熵窗口长度wlen通常取2或3可根据信号长度调整- 容差r建议保留0.1~0.2倍标准差的配置确保计算稳定性- 频段阈值Th1、Th2可根据样本熵计算结果的分布调整使三组频段的分量数量合理分配。五、总结两组代码集合分别针对信号处理的两大核心需求降噪处理与频段划分。VMD小波阈值代码通过“分解-筛选-降噪-重构”的流程高效实现含噪信号的净化EEMD/CEEMD样本熵代码通过“自适应分解-复杂度分析-频段划分”实现复杂信号的结构化解析。使用时需根据具体需求选择合适的算法若目标是降噪优先选择VMD小波阈值方案若目标是信号频段分离或特征提取优先选择EEMD/CEEMD样本熵方案模态混叠严重时选CEEMD效率优先时选EEMD。同时需根据信号特性如频率范围、噪声强度、复杂度灵活调整核心参数以达到最优处理效果。

更多文章