希尔伯特变换分析及应用

本文详细介绍了希尔伯特变换的基本概念,包括数学定义、卷积解释,以及在STM32F429平台上的应用实例。通过C代码展示了如何利用ARM_DSP库进行信号处理,重点讲解了如何进行傅立叶变换、希尔伯特变换的操作步骤和实验结果。

概述

希尔伯特变换是信号处理中一种常用的手段。常常用来作为信号的相位调整手段,但每次变换只能相位偏移90°。且希尔伯特变换只能近似应用于窄带信号。对于任意给定ttt时刻,通过希尔伯特变换运算后的结果只能存在一个频率值,即只能处理任何时刻为单一频率的信号。对于一个非平稳的数据序列,希尔伯特变换得到的结果很大程度上失真,所以应用希尔伯特变换要特别谨慎。

正文

数学定义是:

设有一个实函数X(t)X(t)X(t),其希尔伯特变换记作X^(t)\hat{X}(t)X^(t)(或记作H[X(t)]H\left[X(t)\right]H[X(t)]

X^(t)=H[X(t)]=1π∫−∞∞X(τ)t−τdτ\hat{X}(t)=H\left[X(t)\right]=\frac{1}{\pi}\int_{-\infty}^{\infty}\frac{X(\tau)}{t-\tau}d\tauX^(t)=H[X(t)]=π1tτX(τ)dτ

反变换为:

X(t)=H−1[X^(t)]=−1π∫−∞∞X^(τ)t−τdτX(t)=H^{-1}\left[\hat{X}(t)\right]=-\frac{1}{\pi}\int_{-\infty}^{\infty}\frac{\hat{X}(\tau)}{t-\tau}d\tauX(t)=H1[X^(t)]=π1tτX^(τ)dτ

与卷积的概念相比较,可以发现,上面的Hilbert变换的表达式实际上就是将原始信号和一个信号做卷积的结果。这个用来卷积的信号就是h(t)=1πth(t)=\frac{1}{\pi{t}}h(t)=πt1

所以对h(t)h(t)h(t)FFTFFTFFT可以得到:

H(jw)=F{h}(w)=−jsgn(w)H(jw)=F\{h\}(w)=-jsgn(w)H(jw)=F{h}(w)=jsgn(w)

或者

sgn(w)={1,w>00,w=0−1,w<0}sgn(w)=\left\{\begin{matrix}1,w>0\\0,w=0\\-1,w<0\end{matrix}\right\}sgn(w)=1,w>00,w=01,w<0

其中FFF是傅里叶变换,jjj是虚数单位,www是频率。

从频域上看,sgn(w)sgn(w)sgn(w)即将原始信号的正频率部分乘以−j-jj,负频率部分乘以jjj,也就是说,在保持幅度不变的情况下,可以将信号正频率部分相位偏移−π2-\frac{\pi}{2}2π,负频率相位偏移π2\frac{\pi}{2}2π

所以希尔伯特转换步骤为:

(1)将原始信号进行傅里叶变换

(2)将转换后的信号分为正频率部分和负频率部分,正频率信号数据**{ 将虚部数据换到实部,将实部数据乘以-1换到虚部},负频率信号数据{将虚部数据乘以-1换到实部,将实部数据换到虚部}**

(3)将交换后的数据进行傅里叶反变换得到最终结果

如下图所示:
在这里插入图片描述

实验结果

本实验基于STM32F429,移植ARM_DSP库,使用实数fft变换函数。

C代码参考:

arm_rfft_fast_init_f32(&S, TEST_LENGTH_SAMPLES);
for(i=0; i<1024; i++)
{
	testInput_f32[i] = sin(2*3.1415926f*50*i/1024);
}
//正变换
ifftFlag = 0; 
arm_rfft_fast_f32(&S, testInput_f32, testOutput_f32, ifftFlag);
for(i=0; i<512; i++)
{
	fft_tmp.real[i] = testOutput_f32[2*i];
	fft_tmp.ima[i] = testOutput_f32[2*i + 1];
}
//hilbert 
for(i=0;i<512;i++)
{
	hilbert_tmp.real[i] = fft_tmp.ima[i];
	hilbert_tmp.ima[i] = -fft_tmp.real[i];
}
for(i=0;i<512;i++)
{
	testInput_f32[2*i] = hilbert_tmp.real[i];
	testInput_f32[2*i + 1] = hilbert_tmp.ima[i];
}
//反变换
ifftFlag = 1;
arm_rfft_fast_f32(&S, testInput_f32, fft_iout, ifftFlag);

由于点数太多,所以仅显示250个点。实验结果如下:
在这里插入图片描述

总结

这样就完成了希尔伯特变换在信号处理上的应用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值