news 2026/4/3 3:07:33

希尔伯特-黄变换(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/3/22 22:11:33

BES(恒玄)蓝牙平台EQ 调试和设定

1.EQ调试原理 说这个部分是为了同学们更好的分析解决问题 打开所使用工程的target.mk文件,修改宏PC_CMD_UART ?= 1 同时关闭DEBUG=0 Bes提供了多种滤波方式,可在target.mk中进行配置,下图是我使用的配置,具体要怎么配置,可一个根据实际的项目需求更改。 然后我们看下…

作者头像 李华
网站建设 2026/3/22 9:22:29

基于STM32的智能导盲杖设计与实现

目录硬件设计软件设计电源管理用户交互设计测试与优化源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;硬件设计 STM32微控制器作为核心处理器&#xff0c;通常选用STM32F103系列或STM32F4系列&#xff0c;因其低功耗和高性能特性。主控…

作者头像 李华
网站建设 2026/4/1 16:16:24

YOLOv11轻量化设计:引入变核卷积(AKConv)提升检测效率

前言 在移动端和边缘计算场景中,目标检测模型需要在精度与速度之间取得平衡。传统卷积神经网络(CNN)通过固定大小的卷积核(如33、55)提取特征,但这种静态采样方式难以适应目标的多尺度变化,且存在参数冗余问题。例如,在边缘检测等简单任务中,33卷积的9个参数可能只有…

作者头像 李华
网站建设 2026/3/15 6:05:18

低资源下的高质量微调:LoRA技术助力大模型个性化应用全攻略

文章目录 从0掌握LoRA微调:让大模型“为你所用”的实战教程 一、LoRA是什么:大模型的“个性化开关” 二、LoRA的原理:“低秩矩阵”的魔力 三、实战:用LoRA微调大模型,打造专属助手 1. 环境搭建 2. 数据准备:打造武侠小说数据集 3. 加载基础大模型 4. 配置LoRA参数 5. 数据…

作者头像 李华
网站建设 2026/4/1 1:48:11

加州大学河畔分校团队开发出Python版“海浪模拟器“

这项由加州大学河畔分校地球与行星科学系领导&#xff0c;联合多家印尼顶尖科研机构完成的研究发表于2025年1月的arXiv预印本服务器&#xff08;论文编号&#xff1a;2601.12029v1&#xff09;&#xff0c;有兴趣深入了解的读者可以通过该编号查询完整论文。把海浪想象成一个神…

作者头像 李华
网站建设 2026/3/24 9:02:20

Typhoon团队突破:仅1.15亿参数模型击败千亿参数巨型模型

这项由Typhoon团队和SCB 10X联合进行的研究发表于2026年1月&#xff0c;论文编号为arXiv:2601.13044v1。有兴趣深入了解的读者可以通过该编号查询完整论文。在人工智能语音识别的赛道上&#xff0c;一直以来都流行着"越大越好"的观念。就像盖房子时总觉得材料越多房子…

作者头像 李华