MATLAB中envelope函数使用详解
MATLAB中envelope函数使用详解
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
:上下信号包络,以向量或矩阵形式返回。