概述
希尔伯特变换是信号处理中一种常用的手段。常常用来作为信号的相位调整手段,但每次变换只能相位偏移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)]=π1∫−∞∞t−τ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)=H−1[X^(t)]=−π1∫−∞∞t−τ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=0−1,w<0⎭⎬⎫
其中FFF是傅里叶变换,jjj是虚数单位,www是频率。
从频域上看,sgn(w)sgn(w)sgn(w)即将原始信号的正频率部分乘以−j-j−j,负频率部分乘以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个点。实验结果如下:

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

被折叠的 条评论
为什么被折叠?



