news 2026/4/23 10:19:51

希尔伯特-黄变换(HHT)完整MATLAB实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
希尔伯特-黄变换(HHT)完整MATLAB实现
一、核心代码框架
%% HHT完整实现(含EMD分解与希尔伯特谱分析)clear;clc;close all;%% 参数设置Fs=1000;% 采样频率t=0:1/Fs:1-1/Fs;% 时间向量f1=50;f2=120;% 信号频率成分x=sin(2*pi*f1*t)+0.5*sin(2*pi*f2*t)+0.1*randn(size(t));% 含噪信号%% 信号预处理(带通滤波)wp=[40160]/(Fs/2);% 通带边界ws=[30170]/(Fs/2);% 阻带边界rp=1;rs=40;% 滤波器参数[n,wn]=cheb2ord(wp,ws,rp,rs);[b,a]=cheby2(n,rp,wn);x_filt=filter(b,a,x);%% 经验模态分解(EMD)imf=emd(x_filt,'MaxNumIMF',5,'Display',1);% 分解为5个IMF分量%% 希尔伯特变换analytic=cell(size(imf));fori=1:size(imf,1)analytic{i}=hilbert(imf(i,:));% 构造解析信号end%% 瞬时频率与幅值计算[inst_amp,inst_phase]=deal(zeros(size(imf)));fori=1:size(imf,1)phase=angle(analytic{i});inst_phase(:,i)=unwrap(phase);% 相位解包裹inst_amp(:,i)=abs(analytic{i});% 瞬时幅值endinst_freq=zeros(size(imf));fori=1:size(imf,1)delta_t=diff(t);delta_phase=diff(inst_phase(:,i));inst_freq(:,i)=[inst_phase(1,i);delta_phase./delta_t];% 瞬时频率end%% 三维时频谱构建[~,f_idx]=min(abs(fft_freq(Fs,1/Fs)-f1:f2:end));% 频率索引t_res=0.01;% 时间分辨率Z=zeros(length(t_res),length(f_idx));fori=1:size(imf,1)[t_f,f_f]=tfridge(inst_amp(:,i),inst_freq(:,i),Fs);Z(:,f_idx)=Z(:,f_idx)+interp1(t_f,f_f,t,'linear',0);end%% 可视化figure;% IMF分量展示subplot(2,2,1);plot(t,x_filt,'k',t,imf','LineWidth',1.5);title('原始信号与IMF分量');xlabel('时间(s)');ylabel('幅值');legend('原始信号','IMF1','IMF2','IMF3','IMF4','IMF5');% 瞬时频率谱subplot(2,2,2);imagesc(t,1:size(imf,1),inst_freq);set(gca,'YDir','normal');title('瞬时频率分布');xlabel('时间(s)');ylabel('IMF序号');colorbar;% 三维时频谱subplot(2,2,3);surf(linspace(0,1,length(t)),linspace(1,size(imf,1),size(imf,1)),Z);shading interp;title('三维时频谱');xlabel('时间(s)');ylabel('IMF序号');zlabel('幅值');% Hilbert边际谱subplot(2,2,4);hs=hht(imf,Fs);imagesc(hs.time,hs.f,hs.power);title('Hilbert边际谱');xlabel('时间(s)');ylabel('频率(Hz)');colorbar;

二、关键函数实现
1. EMD分解函数(增强版)
functionimfs=emd(signal,varargin)% 参数解析p=inputParser;addParameter(p,'MaxNumIMF',10,@(x)isscalar(x));addParameter(p,'SiftRelativeTol',0.1,@(x)isscalar(x));addParameter(p,'Display',0,@(x)islogical(x));parse(p,varargin{:});imfs={};residual=signal;num_imf=0;whiletrue num_imf=num_imf+1;imf_candidate=residual;% 极值点检测[max_peaks,min_peaks]=find_extrema(residual);% 包络线拟合(三次样条)upper_env=spline(max_peaks(:,1),max_peaks(:,2),1:length(residual));lower_env=spline(min_peaks(:,1),min_peaks(:,2),1:length(residual));% 计算均值mean_env=(upper_env+lower_env)/2;% 筛选IMFimf_candidate=residual-mean_env;% IMF条件验证ifis_imf(imf_candidate,p.SiftRelativeTol)imfs{num_imf}=imf_candidate;residual=residual-imf_candidate;ifnorm(residual)<0.1*norm(signal)break;endelseresidual=imf_candidate;end% 显示进度ifp.Displayfprintf('IMF%d: 残差能量比=%.4f\n',num_imf,norm(residual)/norm(signal));endendendfunction[max_peaks,min_peaks]=find_extrema(x)% 极值点检测n=length(x);max_peaks=[];min_peaks=[];fori=2:n-1ifx(i)>x(i-1)&&x(i)>x(i+1)max_peaks=[max_peaks;i,x(i)];elseifx(i)<x(i-1)&&x(i)<x(i+1)min_peaks=[min_peaks;i,x(i)];endendendfunctionis_imf=is_imf(imf,tol)% IMF条件验证diff_imf=diff(imf);num_extrema=sum(diff_imf(1:end-1).*diff_imf(2:end)<=0);mean_diff=mean(abs(diff_imf));is_imf=(num_extrema-1)<=1&&mean_diff<tol;end

三、核心参数优化
参数推荐值作用说明
MaxNumIMF5-10控制分解深度与计算量
SiftRelativeTol0.1-0.3分解精度控制
Display1 (True)显示分解过程
滤波器类型Chebyshev II高频噪声抑制

参考代码 希尔伯特黄变换(HHT)的 完整 MATLAB程序www.youwenfan.com/contentcsq/64242.html

四、工程应用扩展
1. 模态混叠抑制(EEMD改进)
functionimfs=eemd(signal,noise_level)% 集成经验模态分解imfs={};residual=signal;fori=1:10noise=noise_level*randn(size(signal));imf=emd(residual+noise);residual=residual-imf{end};imfs{end+1}=imf{end};endend
2. 边界效应处理(镜像延拓)
functionx_pad=boundary_extension(x,n_pad)% 镜像延拓x_pad=[flipud(x(1:n_pad));x;flipud(x(end-n_pad+1:end))];end

五、结果分析示例
  1. IMF分量特征

    • IMF1:高频噪声(0-30Hz)

    • IMF2:主频50Hz正弦波

    • 残余分量:低频趋势项(约0.1Hz)

  2. 三维时频谱解读

  • X轴:时间(0-1s)

  • Y轴:IMF序号

  • Z轴:幅值强度

  • 颜色深度:能量密度


六、注意事项
  1. 数据预处理:建议先进行去趋势项处理(detrend函数)

  2. 频率校准:使用resample函数统一采样率

  3. 实时处理:分段处理时需重叠50%以上(参考Hanning窗)


七、参考文献
  1. Huang N E, et al. Hilbert-Huang Transform and Its Applications. World Scientific, 2005.

  2. 王明阳, 等. 基于HHT的机械故障诊断方法. 振动工程学报, 2010.

  3. MATLAB官方HHT工具箱文档(R2023a)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 14:39:01

BES (恒玄)HFP通话笔记

目录 1. 前言 2. audio_develope通话调试 2.1 通话调试前期准备和SDK 相关宏定义介绍 2.2 通话调试原理 2.3 通话调试常见问题 3. BES (恒玄)HFP 通话代码部分说明 3.1 HFP启动机制原理 3.2 通话算法运行处理 3.4 通话常见软件问题 分析解决 3.5 BES 通话数据分析处理 3…

作者头像 李华
网站建设 2026/4/23 13:09:27

物联网项目tp5怎么也获取不到请求的参数问题

做一个物联网项目时&#xff0c;thinkPHP5.0用常规的框架方法获取不到设备请求过来的参数&#xff0c;总是空。 最后用 原生PHP获取请求体 的方法得到了参数&#xff0c;也就是用PHP原生的方法获取参数&#xff0c;获取后为字符串&#xff0c;再转换为对象就可以用了 $raw fil…

作者头像 李华
网站建设 2026/4/23 17:32:05

2026牛客网春招面经,BATJ最新10000道Java中高级面试题,限时开源

前言&#xff1a; 想在面试、工作中脱颖而出&#xff1f;想在最短的时间内快速掌握 Java 的核心基础知识点&#xff1f;想要成为一位优秀的 Java 工程师&#xff1f;本篇文章能助你一臂之力&#xff01; 目前正值招聘求职旺季&#xff0c;很多同学对一些新技术名词都能侃侃而…

作者头像 李华
网站建设 2026/4/23 12:01:42

技术面:如何让你的系统抗住高并发的流量?

前言 如何能让系统抗住高并发流量&#xff0c;要考虑的因素有很多&#xff0c;但是真的让你讲一下都有哪些&#xff0c;很多人肯定就会说&#xff0c;用Redis缓存啦&#xff0c;用MQ做解耦啦&#xff0c;总之就是想起来这一块儿就说一嘴&#xff0c;想起来那一块儿也说一嘴&am…

作者头像 李华
网站建设 2026/4/23 12:00:42

南加州大学让AI说话更有口音:语言学规则与神经网络的奇妙对话

当我们听到不同地区的人说英语时&#xff0c;总能轻松区分出美式英语和英式英语的差别。但如果要让计算机生成的语音也具备这种自然的口音变化&#xff0c;事情就变得复杂多了。南加州大学信号分析与解释实验室、计算机科学系和语言学系的研究团队最近在2026年IEEE国际声学、语…

作者头像 李华
网站建设 2026/4/23 12:02:34

面试官:RocketMQ 消息堆积了怎么处理?

面试考察点 面试官提出这个问题&#xff0c;主要希望考察候选人以下几个方面的能力&#xff1a; 问题诊断能力&#xff1a;候选人能否系统性地分析消息堆积的根源&#xff0c;而不仅仅是给出解决方案。这包括区分是 “生产者流量激增” 还是 “消费者消费能力不足” 导致的问题…

作者头像 李华