/**
* @poject 经验模态分解及其衍生算法的研究及其在语音信号处理中的应用
* @file EMD模态分解算法设计与准备工作
* @author jUicE_g2R(qq:3406291309)
*
* @language MATLAB
* @EDA Base on matlabR2022b
* @editor Obsidian(黑曜石笔记软件)
*
* @copyright 2023
* @COPYRIGHT 原创学习笔记:转载需获得博主本人同意,且需标明转载源
*/
设计原理遵循上一节的3个基本概念
- 链接直通车:【经验模态分解】2.EMD的3个基本概念
1 处理极限
- 首先,需要对实际处理过程中 上下包络均值无法为0(无法达到极限) 的问题进行 逼近(取一个阈值作为条件)
一个 逼近值 a n 逼近值a_n 逼近值an 越接近 极限(理论)值 a ∞ 极限(理论)值a_∞ 极限(理论)值a∞,它与 上一个逼近值 a n − 1 a_{n-1} an−1 的差值越小
2 E M D EMD EMD 分解算法 流程
2-1 步骤
2-2 流程图
3 MATLAB代码实现
3-1 定义采样周期与采样频率
- f = 1 T f=\frac{1}{T} f=T1
SampFreq = 512; % 采样频率,每秒钟 采集 512个样本
SampPeri = 1/512; % 采样周期,采集 1个样本 需要 1/512s
t = 0:SampPeri:1; % 定义时间向量t(这个向量表示了信号的时间点),步长为 1/512 ,范围0~1
3-2 生成源信号
- 1. x ( t ) = c o s ( w t ) x(t)=cos(wt) x(t)=cos(wt)
- 2. w = 2 π f w=2\pi f w=2πf
- 得出: x ( t ) = c o s ( 2 π f t ) x(t)=cos(2\pi ft) x(t)=cos(2πft)
%% 输入的源信号由 wave1与wave2 叠加
AWave1 = 0.5; % 定义 wave1 的 幅值
AWave2 = 1; % 定义 wave2 的 幅值
fWave1 = 20; % 定义 wave1 的 频率
fWave2 = 30; % 定义 wave2 的 频率
wave1 = AWave1*cos(2*pi*fWave1*t); % 定义 第一个余弦波分量
wave2 = AWave2*cos(2*pi*fWave2*t); % 定义 第二个余弦波分量
input = wave1 + wave2; % 分量合并
x = input; % 设置初始值
3-3 绘制源信号
figure % 调出 figure 绘图 图形化窗口
plot(t,x); % 绘制坐标图:横坐标为 t,纵坐标为 x=x(t)
grid on % 添加网格线,使得绘图更加方便和准确
xlabel('t'); % 标记 横坐标为 t
ylabel('x'); % 标记 纵坐标为 x=x(t)
title('源输入信号'); % 说明坐标图的含义
legend('x(t)=0.5cos(40πt)+cos(60πt)') % 说明源输入信号的组成
- 运行后
f
i
g
u
r
e
figure
figure 窗口弹出,编号为1
3-4 模态分解
3-4-1 下载相关工具箱
两个软件: E M D EMD EMD 工具箱 与 时频分析工具箱
-
时频分析工具箱下载链接源
如下是添加 时频分析工具箱* 的步骤(注:添加最顶的文件夹tftb-0.2即可包含下面所有子文件夹)
-
EMD工具箱下载链接源
同上操作 -
详细使用教程链接源
-
检查一下工具箱是否正常添加:调用 e m d ( ) emd() emd() 函数执行 I M F IMF IMF 的计算(模态分解)
%% 仅用于调试
imf = emd(x);
emd_visu(x,t,imf);
这样就说明添加成功了
3-4-2 调用函数
%% Get IMF
[imf,residual] = emd(x); % imf为一个矩阵,每列为一个模态函数,residual为残差向量
[M,N]=size(imf); % M:模态数,N:模态长度
参考文献:EMD算法研究及其在信号去噪中的应用_王婷.caj(第二章)
附加:emd.ppt