matlab练习程序(包络线提取)

提取信号包络需要用到希尔伯特变换。

变换定义如下:

其中:

就是原始信号和1/(pi*t)信号做卷积。

因此可以将原始信号和h(t)傅里叶变换到频域做乘法。

乘完再逆变换回来后取信号绝对值即可得到原始信号包络。

matlab代码如下:

clear all;close all;clc;

x = -5:0.01:5;
y = sin(30*x).*cos(x);

plot(x,y,'g');
envelope1 = hilbert(y);         %实部是y自身,虚部是hilbert变换值

hold on;
plot(x,abs(envelope1),'ro');    %取幅值得到包络

%希尔伯特变换
n = length(x);
H = ((1:n)<=(n/2))*2;           %f(t) = 1/(pi*t) <-----> F(w)= -j*sgn(w)
envelope2 = ifft(fft(y).*H); 
plot(x,abs(envelope2),'b.');

结果如下:

posted @ 2022-10-23 13:48  Dsp Tian  阅读(1167)  评论(0编辑  收藏  举报