%
一个求包络线和包络谱的程序
%
现代希尔伯特变换解调分析:
%
带通滤波;希尔伯特变换获得信号时域的包络线;用
fft
变换获得包络谱
%
如何获得包络线?
%
信号经希尔伯特变换不能直接得到包络,设信号
x
的希尔伯特变换为
y
,则平方和
%x.^2+y.^2(
或者再开根号,直接取平方和的效果为好
)
才是信号
x
的包络。
%
构造实验数据
clear all;close all;
t=0:0.005:1*pi;
fs=10000;
s=4*sin(2*200*pi*t).*(sin(2*4500*pi*t))+25*(sin(2*4500*pi*t));
figure(1);
subplot(211);plot(t,s);title('
原始信号
');
%
运用小波方法滤波
[c,l]=wavedec(s,1,'db10');
d1=wrcoef('d',c,l,'db10');
a1=0;
subplot(212);plot(d1);title('
滤波后重构的高频信号
');
%
希尔伯特变换求包络线
y=hilbert(d1);
y1=abs(d1+y*j); %
这是取得包络线的三种方程。看一看哪种效果好。
%y1=abs(y); %
或者
z=x.^2+y.^2;
有的取得是
abs(y),
但是不推荐用。
%y1=d1.^2+y.^2; %
通过分析,
该方程在包络谱中的效果最好,
即取二者平
方和。
figure(2);
subplot(211);
hold on
plot(t,s);
plot(t,y1,'r');title('
包络线
');
hold off
%FFT
求包络谱
N=1024;
p=abs(fft(y1,N));
subplot(212);
plot((0:N/2-1)/N*fs,p(1:N/2));%
只需取到半频,即
fs/2
%f=(0:N-1)*fs/N; plot(f,p); %
横坐标是在
fs
上,其中以
fs/2
为轴中心对称。
title('
包络谱
');xlabel('
频率
');ylabel('
功率谱
');
%
对比信号直接的傅里叶变换功率谱与包络谱