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.');
结果如下: