问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

MATLAB中envelope函数使用详解

创作时间:
作者:
@小白创作中心

MATLAB中envelope函数使用详解

引用
CSDN
1.
https://blog.csdn.net/jk_101/article/details/126222252

MATLAB中的envelope函数是信号处理领域的重要工具,用于提取信号的包络线。本文详细介绍了该函数的使用方法,包括基本语法、功能说明以及多个具体应用场景的示例。通过阅读本文,读者可以掌握如何使用envelope函数处理不同类型信号,包括chirp信号、多通道信号、语音信号等。

函数说明

envelope函数的主要功能是提取信号的包络。其基本语法如下:

[yupper,ylower] = envelope(x)
[yupper,ylower] = envelope(x,fl,'analytic')
[yupper,ylower] = envelope(x,wl,'rms')
[yupper,ylower] = envelope(x,np,'peak')
envelope(___)

详细说明

  • [yupper,ylower] = envelope(x):返回输入序列 x 的上下包络作为其解析信号的幅值。使用在 hilbert 中实现的离散傅里叶变换查找 x 的解析信号。该函数最初会删除 x 的均值,并在计算包络后再重新添加该均值。如果 x 是矩阵,则 envelope 单独对 x 的每列进行运算。

  • [yupper,ylower] = envelope(x,fl,'analytic'):返回使用其解析信号的幅值确定的 x 的包络。解析信号是通过用长度为 fl 的 Hilbert FIR 滤波器对 x 进行滤波来计算的。如果只指定两个参数,则使用此语法。

  • [yupper,ylower] = envelope(x,wl,'rms'):返回 x 的上下均方根包络。包络是用长度为 wl 个采样的滑动窗来确定的。

  • [yupper,ylower] = envelope(x,np,'peak'):返回 x 的上下峰值包络。包络是通过对至少分隔 np 个采样的局部最大值进行样条插值来确定的。

  • 不带输出参数的 envelope(___) 用于绘制信号及其上下包络。此语法接受上述语法中的任何输入参数。

示例

chirp 的解析包络

生成高斯调制二次 chirp。指定采样率为 2 kHz,信号持续时间为 2 秒。

t = 0:1/2000:2-1/2000;
q = chirp(t-2,4,1/2,6,'quadratic',100,'convex').*exp(-4*(t-1).^2);
plot(t,q)

使用解析信号计算 chirp 的上下包络。

[up,lo] = envelope(q);
hold on
plot(t,up,t,lo,'linewidth',1.5)
legend('q','up','lo')
hold off

由于均值非零,因此,信号不对称。

使用不带输出参数的 envelope 以采样编号为 x 轴绘制信号和包络。

envelope(q)

使用滤波器计算多通道信号的解析包络

创建一个双通道信号,采样率为 1 kHz,持续时间为 3 秒:

  • 一个通道是呈现指数衰减的正弦波。指定频率为 7 Hz,时间常量为 2 秒。
  • 另一个通道是 DC 值为 2 的时移高斯调制 chirp。指定 chirp 的初始频率为 30 Hz,该频率 2 秒后衰减至 5 Hz。

绘制信号。

t = 0:1/1000:3;
q1 = sin(2*pi*7*t).*exp(-t/2);
q2 = chirp(t,30,2,5).*exp(-(2*t-3).^2)+2;
q = [q1;q2]';
plot(t,q)

计算信号的上下包络。使用长度为 100 的 Hilbert 滤波器。绘制通道和包络。对上包络使用实线,对下包络使用虚线。

[up,lo] = envelope(q,100,'analytic');
hold on
plot(t,up,'-',t,lo,'--')
hold off

调用不带输出参数的 envelope,以采样编号为 x 轴绘制信号及其包络。将滤波器长度增加到 300 以获得更平滑的形状。当您指定两个输入参数时,'analytic' 标志是默认值。

envelope(q,300)

录音信号的移动 RMS 包络

计算并绘制火车鸣笛声录音信号的移动 RMS 包络。使用长度为 150 个采样的窗。

load('train')
envelope(y,150,'rms')

语音信号的峰值包络

绘制基于长度为 30 个采样的区间经过平滑处理的语音信号的上下峰值包络。

load('mtlb')
envelope(mtlb,30,'peak')

不对称序列的包络

创建并绘制一个信号,该信号类似于通过色散介质传播的光脉冲的初始检测信号。

t = 0.5:-1/100:-2.49;
z = airy(t*10).*exp(-t.^2);
plot(z)

使用序列解析信号的幅值来确定该序列的包络。绘制包络。

envelope(z)

使用 50 抽头 Hilbert 滤波器计算信号的解析包络。

envelope(z,50,'analytic')

使用长度为 40 个采样的移动窗计算信号的 RMS 包络。绘制结果。

envelope(z,40,'rms')

确定峰值包络。使用非结条件对至少分隔 10 个采样的局部最大值样条插值。

envelope(z,10,'peak')

参数说明

  • x:输入序列,指定为向量或矩阵。如果 x 是向量,则它被视为单通道。如果 x 是矩阵,则 envelope 单独计算每列的包络估计值。x 的所有元素都必须为有限值。

  • fl:Hilbert 滤波器长度,指定为正整数标量。该滤波器是通过使用长度为 fl 且形状参数为 β = 8 的 Kaiser 窗对理想的矩形滤波器加窗来创建的。

  • wl:窗长度,指定为正整数标量。

  • np:峰间距,指定为正整数标量。

  • yupper,ylower:上下信号包络,以向量或矩阵形式返回。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号