matlab希尔伯特变换,利用MATLAB实现Hilbert变换代码

Hilbert变换的性质:

1. 序列x(n)通过Hilbert变换器后,信号频谱的幅度不发生变化。这是因为Hilbert变换器是全通滤波器,引起频谱变化的只是其相位。

2. 序列x(n)与其Hilbert变换^x(n)是正交的。

下面通过例子说明两条性质:

已知序列x(n)=cos(0.2*pi*n) 0<=n<20

(1) 计算序列x(n)的Hilbert变换^x(n),并比较两序列频谱的变化。

(2) 验证x(n)与^x(n)是正交的。

(3) 余弦序列的Hilbert变换是正弦序列,则序列的Hilbert变换为^x(n)=sin(0.2*pi*n),试比较扩展函数yhilbert.m与函数hilbert.m对序列x(n)进行Hilbert变换的结果。

MATLAB的实现程序如下:

N=20;

n=0:N-1;

xn=cos(0.2*pi*n);

hxn=hilbert(xn);

%part 1

%compare FFT[x(n)] and FFT[Hilbert[x(n)]]

Xk=fft(xn);

hXk=fft(hxn);

aXk=abs(Xk);

ahXk=abs(hXk);

pXk=phase(Xk);

phXk=phase(hXk);

k=0:N-1;

subplot(2,2,1),stem(k,aXk)

xlabel('k');

title('amplitude of FFT[x(n)]');

subplot(2,2,2),stem(k,pXk)

xlabel('k');

title('phase of FFT[x(n)]');

subplot(2,2,3),stem(k,ahXk)

xlabel('k');

title('amplitude of Hilbert[x(n)]');

subplot(2,2,4),stem(k,phXk)

xlabel('k');

title('phase of FFT[Hilbertx(n)]');

%part 2

%method:if sum(xn.*hxn) is closely 0

add=sum(xn.*hxn)

%part 3:compare expansion function yhilbert.m and hilbert.m

y=hilbert(xn);

hxn

sn=sin(0.2*pi*n)

yn=imag(y)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值