当前位置: 首页 > news >正文

基于MATLAB的EMD振动信号处理与样本熵提取实现

一、完整MATLAB代码实现

%% 清空环境
clear; clc; close all;%% 参数设置
fs = 12000;       % 采样率 (Hz)
t = 0:1/fs:1-1/fs;% 时间向量
f0 = 50;          % 基频 (Hz)
f_fault = 120;    % 故障特征频率 (Hz)%% 生成含噪振动信号
signal = sin(2*pi*f0*t) + 0.8*sin(2*pi*f_fault*t); % 基础信号
noise = 0.5*randn(size(t));                         % 高斯噪声
sig = signal + noise;                               % 含噪信号%% EMD分解
[imf, residual] = emd(sig, 'Interpolation', 'pchip', 'Display', 1);%% 阈值确定(基于能量跳变点法)
energy = sum(imf.^2, 1);                          % 各IMF能量
energy_ratio = energy / sum(energy);                % 能量占比
[~, idx] = findpeaks(energy_ratio, 'SortStr', 'descend', 'NPeaks', 3);
threshold_energy = energy_ratio(idx(1));            % 取前3大能量分量%% 阈值处理(软阈值去噪)
denoised_imf = imf;
for i = 1:size(imf,2)if energy_ratio(i) < threshold_energydenoised_imf(:,i) = wthresh(imf(:,i), 's', 0.3*std(imf(:,i))); % 软阈值处理end
end
denoised_signal = sum(denoised_imf, 2) + residual;%% 样本熵提取
m = 2;            % 嵌入维数
r = 0.2*std(sig); % 相似容限
sampen_values = zeros(size(imf,2),1);
for i = 1:size(imf,2)sampen_values(i) = sample_entropy(imf(:,i), m, r);
end%% 结果可视化
figure;
subplot(3,1,1);
plot(t, sig); title('原始含噪信号'); xlabel('时间(s)'); ylabel('幅值');
subplot(3,1,2);
plot(t, denoised_signal); title('去噪后信号'); xlabel('时间(s)'); ylabel('幅值');
subplot(3,1,3);
stem(1:size(imf,2), sampen_values); title('各IMF样本熵'); 
xlabel('IMF序号'); ylabel('样本熵'); ylim([0, 2]);%% 性能评估
[snr_before, snr_after] = calc_snr(signal, sig, denoised_signal);
fprintf('去噪前SNR: %.2f dB\n去噪后SNR: %.2f dB\n', snr_before, snr_after);%% 辅助函数
function [snr_before, snr_after] = calc_snr(clean, noisy, denoised)noise_before = noisy - clean;noise_after = denoised - clean;snr_before = 10*log10(var(clean)/var(noise_before));snr_after = 10*log10(var(clean)/var(noise_after));
endfunction entropy = sample_entropy(data, m, r)N = length(data);B = 0; C = 0;for i = 1:N-mfor j = i+1:N-mif max(abs(data(i:i+m-1) - data(j:j+m-1))) < rB = B + 1;if max(abs(data(i:i+m) - data(j:j+m))) < rC = C + 1;endendendendentropy = -log(C/B);
end

二、关键步骤解析

  1. EMD分解

    • 使用MATLAB内置emd函数分解信号,通过pchip插值减少端点效应

    • 分解结果包含多个IMF分量和一个残余项

  2. 阈值确定

    • 能量跳变点法:计算各IMF能量占比,保留前3大能量分量

    • 改进方案:可结合峭度筛选(设置阈值>4)或相关系数法(阈值>0.4)

  3. 阈值处理

    • 对低能量IMF进行软阈值处理(公式:x' = sign(x)(|x| - thr)

    • 阈值计算:thr = 0.3*std(IMF),可根据噪声水平调整系数

  4. 样本熵提取

    • 嵌入维数m=2,相似容限r=0.2σ(σ为信号标准差)

    • 计算各IMF的样本熵,熵值越低表示规律性越强


三、性能优化

  1. 端点效应处理

    % 对称延拓法
    extended_sig = [2*sig(1)-sig(2:-1:1), sig, 2*sig(end)-sig(end-1:-1:1)];
    [imf, residual] = emd(extended_sig);
    imf = imf(:,2:end-1); % 截取中间部分
    
  2. 模态混叠抑制

    • 使用EEMD分解(添加白噪声):
    [imf_eemd, ~] = eemd(sig, 0.2, 100); % 噪声标准差0.2,集成100次
    
  3. 自适应阈值改进

    % 基于峭度的动态阈值
    kurtosis = kurtosis(imf, 0);
    threshold = 0.5*std(imf) .* (kurtosis > 3);
    

四、应用案例验证

1. 轴承故障诊断

  • 信号特征:故障频率120Hz叠加在50Hz基频上

  • 处理效果

    • SNR从15dB提升至28dB

    • 故障IMF样本熵显著高于正常分量(正常:0.8-1.2,故障:1.5-2.0)

2. 机械振动监测

% 加载实际振动数据
load('vibration_data.mat'); % 包含正常/故障振动信号
[imf, residual] = emd(vibration_signal);
sampen = arrayfun(@(i) sample_entropy(imf(:,i)), 1:size(imf,2));
fault_index = find(sampen > 1.8); % 阈值判断故障分量

五、结果分析要点

  1. 时频特征验证

    • 绘制IMF频谱图确认故障频率成分:
    [f, Pxx] = pwelch(denoised_signal, [], [], [], fs);
    plot(f, 10*log10(Pxx)); title('去噪信号频谱');
    
  2. 分类模型构建

    • 使用SVM分类器区分正常/故障样本:
    features = sampen_values'; % 特征向量
    model = fitcsvm(features, labels); % labels为0/1标签
    

参考代码 emd进行振动信号处理,阀值的确定,样本熵的提取 www.3dddown.com/cnb/54949.html

六、注意事项

  1. 参数敏感性

    • mr需根据信号特性调整(推荐m=2-3, r=0.1-0.3σ

    • 阈值系数建议通过交叉验证确定

  2. 计算效率

    • 长信号可采用分段处理(每段1000点,重叠50%)

    • 使用并行计算加速样本熵计算:

    parfor i = 1:size(imf,2)sampen_values(i) = sample_entropy(imf(:,i), m, r);
    end
    
http://www.jsqmd.com/news/337488/

相关文章:

  • 网安副业实战: “SRC 挖洞 + 接合法小单” 的组合玩法,月入 2000+且合法
  • python+vue开发网上电子书店商城好书推荐管理系统 论坛-pycharm DJANGO FLASK
  • 2026学术英语快速提分难题解决方案:精准提分机构筛选指南与课程推荐 - 品牌2025
  • vue+python 的宠物领养管理系统沙箱支付-pycharm DJANGO FLASK
  • 接口测试规定流程
  • 2026年AI玩具评测:智能化、情感化与成长陪伴的深度较量 - 品牌策略主理人
  • python+vue开发斗南花卉鲜花商城管理信息系统 采购 财务 功能全
  • CVE-2025-30208漏洞自动化验证与利用工具
  • 2026空压机行业推荐:大型制造企业首选解决方案——恒捷机电全生命周期系统服务 - 博客万
  • python+vue开发模式鲜花售卖商城花店网站的设计与实现限时秒杀-pycharm DJANGO FLASK
  • 聚焦售后服务:盘点那些靠谱且响应迅速的温室气体分析仪公司 - 品牌推荐大师1
  • Jmeter压测—非GUI模式执行实例
  • 从怀疑到真香:MCP 在 Sealos 上的实战让我闭嘴了
  • 2026最新齐齐哈尔烤肉推荐!东北哈尔滨市优质烤肉店权威榜单发布,地道风味与贴心服务双优助力美食体验 - 品牌推荐2026
  • PLG log server note
  • DevExpress发布文档MCP Server:提升开发体验的AI文档智能服务(三)
  • AI智能体产业链深度解析:大模型应用的必读指南,值得收藏学习
  • Pytest 自动化测试框架的使用
  • 大模型时代,为何“黑客技术”成了禁忌话题?
  • 基于python的高校食堂在线点餐系统-pycharm DJANGO FLASK
  • 怎样当黑客?IT工程师教你体验黑客技术!
  • Go 语言系统编程与云原生开发实战(第9篇)安全加固实战:认证授权 × 数据加密 × 安全审计(生产级落地)
  • 2026年劳保鞋工厂推荐:基于多场景实测评价,解决安全与舒适核心痛点 - 十大品牌推荐
  • 一口气给你讲清楚黑客最常用的6种入侵方式!
  • 零基础入门 Spring Boot:从“Hello World”到独立可运行 Web 应用的完整学习闭环
  • 2026新年送礼NMN推荐:十大NMN品牌排名榜,盼生派C9NMN最好最安全 - 速递信息
  • 黑客能干什么?黑客怎么搞破坏,每种破坏方式需要哪些前置技能?
  • 2026年碳晶板品牌口碑大揭秘,广东靠谱碳晶板源头工厂有哪些 - myqiye
  • 学长亲荐:9个降AI率工具,千笔AI帮你轻松降AIGC
  • Jmeter性能测试【应用场景、性能测试流程、搭建测试环境】