【20220207】【信号处理】希尔伯特变换定义及解调原理

一、解析信号

1. 定义

        解析信号没有负频率分量的复值函数,解析信号的实部和虚部是由希尔伯特变换相关联的实值函数。

        (参考:解析信号

2. 概念

        一个实值函数 x(t) 的 Hilbert 变换记作为 \hat{x}(t),则 x(t) 的解析信号为:

                                                                                  \tilde{x}=x(t)+j\hat{x}(t)

3. 性质

        (参考:希尔伯特变换简介

        解析信号有如下性质:

(1)实部和虚部功率谱相同;

(2)实部和虚部自相关函数相同;

(3)实部和虚部的互相关函数是奇函数;

(4)解析信号的频谱只有正频段,且幅值变为原来的 2 倍(实现了由双边谱转变为单边谱);

(5)解析信号的功率谱也只有正频段,强度变为原来的 4 倍。

二、希尔伯特变换

1. 定义

        一个实值函数 x(t) 的希尔伯特变换是 x(t) 和 1/Πt 的卷积。因此希尔伯特变换的结果就是输入信号 x(t) 经过一个线性时不变系统(LTI)之后的输出,该线性时不变系统的脉冲响应为 1/Πt。

        信号经过希尔伯特变换之后,频域内各频率成分的幅值不变,但相位出现 90° 相移。即正频率滞后 Π/2,负频率导前 Π/2,因此希尔伯特变换器又称 90° 移相器。

        (参考:希尔伯特变换

2. 公式推导

        假设 x(t) 是一个实值函数,求该函数的希尔伯特变换。        

                                                \hat{x}(t)=H[x(t))]=x(t)\ast \frac{1}{\pi t}=\frac{1}{\pi }\int_{-\infty }^{\infty }\frac{x(\tau )}{t-\tau }d\tau

因此 \hat{x}(t) 可以被解读为 x(t) 的线性时不变系统的输出,该线性时不变系统的脉冲响应为:

                                                                                     h(t)=\frac{1}{\pi t}

该脉冲响应的傅里叶变换为:

                                                                H(w)=-jsgn(w)=\left\{\begin{matrix} -j, & w>0\\ 0, &w=0 \\ +j,&w<0 \end{matrix}\right.

所以 \hat{x}(t) 的傅里叶变换为:

        ​​​​​​​                        \hat{X}(w)=X(w)\ast H(w)=X(w)\ast (-jsgn(w))=-jX(w)\ast sgn(w)

即:

        ​​​​​​​                                ​​​​​​​        \hat{X}(w)=\left\{\begin{matrix} -jX(w), &w>0 \\ 0, &w=0 \\ jX(w)), &w<0 \end{matrix}\right. =\left\{\begin{matrix} -j\frac{w}{|w|X(w)}, &w\neq 0 \\ 0, &w=0 \end{matrix}\right.

        (参考:1/t的傅里叶变换证明) 

3. 性质

        希尔伯特变换器又称 90° 移相器,如下图。两次希尔伯特变换之后,原信号相位翻转了 180°,四次希尔伯特变换之后又变回本身。

        Hilbert 变换有如下性质:

(1)反对称:H(-x) = -H(x);

(2)抑制直流分量:H(0) = 0;

(3)非零频率成分能量为 1:|H(x)| = 1,对于任意 x≠0;

(4)\hat{x}(t) 和 x(t) 正交。

        (参考:希尔伯特变换简介

三、Hilbert解调原理

1. 信号解调

        信号解调是信号调制的反过程,是从已调制的高频信号中解调出原调制信号。信号调制包括调幅、调频、调相,因此信号解调的目的是:根据已有信号,提取出信号的包络、相位、频率信息。

        (参考:信号解调的基本原理

        (参考:常用的信号解调方式有哪些?

2. 欧拉公式(Euler's formula)

                                                                             e^{jx}=cos(x)+jsin(x)

        欧拉公式说明,复指数信号可以表示成一个实数信号和一个虚数信号和的形式,而且这个实部和虚部是有关系的,两者相位相差\frac{\pi }{2}

时域信号         傅里叶变换
cos(x) \pi [\delta (w+w_{0})+\delta (w-w_{0})]
sin(x) j\pi [\delta (w+w_{0})-\delta (w-w_{0})]

        因此,等式左边的复指数信号的傅里叶变换为 2\pi \delta (w-w_{0})。欧拉公式是最简单的解析信号,可以看出解析信号在时遇上是复数,而在频域上,只有正频率分量,且幅值是实数信号幅值的两倍。

3. 希尔伯特调制原理

        假设有一个调制后的实数信号 x(t)=a(t)cos[w_{0}t+b(t)],其中 a(t) 是对信号进行幅度调制(调幅),b(t) 是对信号进行相位调制(调相),w_{0} 是载波频率。则该实数信号的解析信号为:

                                       \widetilde{x}(t)=x(t)+j\hat{x}(t)=a(t)cos(w_{0}t+b(t))+ja(t)sin(w_{0}t+b(t))             

即:   

                                        \widetilde{x}(t)=a(t)[cos(w_{0}t+b(t))+jsin(w_{0}t+b(t))]=a(t)e^{j(w_{0}t+b(t))}​​​​​​​

则有:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                        ​​​​​​​        ​​​​​​​        ​​​​​​​       \widetilde{x}(t)=a(t)e^{jb(t)}e^{jw_{0}t}

其中,a(t)e^{jb(t)} 为复包络,e^{jw_{0}t} 为复载波信号。

        因此解调信息为:

        包络:|\widetilde{x}(t)|=|a(t)e^{jb(t)}|=|a(t)|

        相位:\theta (t)=w_{0}t+b(t)=arctan\frac{\hat{x}(t)}{x(t)}

        瞬时频率:f(t)=\frac{1}{2\pi }\frac{d\theta (t)}{dt}=\frac{1}{2\pi}\frac{darctan\frac{\hat{x}(t)}{x(t)}}{dt}=\frac{1}{2\pi}[w_{0}+\frac{db(t)}{dt}]

        可以得出:实数信号的瞬时幅值就是解析信号的模,实数信号的瞬时相位就是解析信号虚部和实部比值的反正切值,实数信号的瞬时频率就是瞬时相位的导数除以 2Π。

        (参考:希尔伯特变换求包络原理

        (参考:希尔伯特变换与信号的包络_瞬时相位和瞬时频率(pdf 页)

        总结 Hilbert 解调步骤:

        (1)求原始信号 x(t) 的 Hilbert 变换 \hat{x}(t),得到原始信号的解析信号 \widetilde{x}(t)

        (2)瞬时幅度(包络) = 解析信号的模 = \sqrt{x^{2}(t)+\widetilde{x}^{2}(t)}

        (3)瞬时相位 = \hat{x}(t) 和 x(t) 比值的反正切值 = arctan\frac{\widetilde{x}(t)}{x(t)}

        (4)瞬时频率 = 瞬时相位的导数 / 2Π = \frac{1}{2\pi }\frac{d\theta (t)}{dt}=\frac{1}{2\pi }\frac{[\theta (t+1)-\theta (t)]}{T_{s}} ,即:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​  \frac{f_{s}}{2\pi }\[\theta (t+1)-\theta (t)]

        (参考:希尔伯特-黄变换(HHT)的前世今生——一个从瞬时频率讲起的故事

        (参考:希尔伯特变换和瞬时频率问题--连载(二)

4. 希尔伯特解调的意义

        我的疑问是:为什么要对已知的信号进行解调才能得到幅值、相位和频率信息?

        解答:因为在实际问题中,我们只知道实数信号 x(t) 的结果,而不知道其具体形式,所以没有办法直接根据信号公式得到这些信息,所以就用到了希尔伯特解调原理~

        (参考:信号处理——Hilbert变换及谱分析

四、Hilbert解调小栗子

%% 
clear; clc; close all; warning off;

%% 生成调制信号
fs = 400;  % 采样频率
Ts = 1 / fs;
N = 400;  % 观测时长
t = (0 : N-1) * Ts;

fa = 5;  % 调幅单频
fp = 10;  % 调相单频
fc = 30;  % 载波单频

a = 1 + 0.5 * cos(2 * pi * fa * t);  % 调幅包络
b = 0.5 * sin(2 * pi * fp * t);  % 调相
c = cos(2 * pi * fc * t);  % 载波
s = a .* cos(2 * pi * fc * t + b);  % 调制信号


%% Hilbert分析 
s_analy = hilbert(s);  % Matlab的hilbert命令得到的是解析信号
sh = imag(s_analy);  % 调制信号的希尔伯特变换
envelope = abs(s_analy);  % 解析信号包络的绝对值
angle = unwrap(angle(s_analy));  % 解析信号的相位
fi = diff(angle) / 2 / pi * fs;  % 瞬时频率

% 作图
figure;
subplot(2, 2, 1);plot(t, a); title('包络(调幅信号)');
subplot(2, 2, 2); plot(t, b); title('调相信号');
subplot(2, 2, 3); plot(t, c); title('载波');
subplot(2, 2, 4); 
plot(t, s, 'b'); hold on;
plot(t, sh, 'r--'); hold off;
legend('调制结果', '调制信号的希尔伯特变换'); title('调制信号');


%% FFT分析
NFFT = 2 ^ nextpow2(N);
f = (0 : NFFT-1) / NFFT * fs;

sFFT = fft(s, NFFT);  % 原始信号FFT
saFFT = fft(s_analy, NFFT);  % 解析信号FFT
envFFT = fft(envelope, NFFT);  % 包络的FFT

figure;
subplot(3, 2, 1); 
plot(t, envelope); hold on;
plot(t, a, '--'); hold off; 
legend('瞬时包络绝对值', '真实包络'); title('瞬时包络');
subplot(3, 2, 2); plot(t, angle); title('瞬时相位');
subplot(3, 2, 3); plot(t(2:end), fi); title('瞬时频率');
subplot(3, 2, 4); plot(f, abs(sFFT)); title('原始信号FFT');
subplot(3, 2, 5); plot(f, abs(saFFT)); title('解析信号FFT');
subplot(3, 2, 6); plot(f, abs(envFFT)); title('包络的FFT');

         可以看出,解析信号的频谱是单边谱,且幅值是原始实数信号频谱幅值的两倍。另一方面,希尔伯特解调之后存在边界效应,即边界误差较大。

        (参考:信号调制产生边频的原理及希尔伯特解调

        (参考:信号处理——Hilbert变换及谱分析

 

猜你喜欢

转载自blog.csdn.net/weixin_40583722/article/details/122812953