一、解析信号
1. 定义
解析信号是没有负频率分量的复值函数,解析信号的实部和虚部是由希尔伯特变换相关联的实值函数。
(参考:解析信号)
2. 概念
一个实值函数 的 Hilbert 变换记作为 ,则 的解析信号为:
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) 是一个实值函数,求该函数的希尔伯特变换。
因此 可以被解读为 的线性时不变系统的输出,该线性时不变系统的脉冲响应为:
该脉冲响应的傅里叶变换为:
所以 的傅里叶变换为:
即:
(参考:1/t的傅里叶变换证明)
3. 性质
希尔伯特变换器又称 90° 移相器,如下图。两次希尔伯特变换之后,原信号相位翻转了 180°,四次希尔伯特变换之后又变回本身。
Hilbert 变换有如下性质:
(1)反对称:H(-x) = -H(x);
(2)抑制直流分量:H(0) = 0;
(3)非零频率成分能量为 1:|H(x)| = 1,对于任意 x≠0;
(4) 和 正交。
(参考:希尔伯特变换简介)
三、Hilbert解调原理
1. 信号解调
信号解调是信号调制的反过程,是从已调制的高频信号中解调出原调制信号。信号调制包括调幅、调频、调相,因此信号解调的目的是:根据已有信号,提取出信号的包络、相位、频率信息。
(参考:信号解调的基本原理)
(参考:常用的信号解调方式有哪些?)
2. 欧拉公式(Euler's formula)
欧拉公式说明,复指数信号可以表示成一个实数信号和一个虚数信号和的形式,而且这个实部和虚部是有关系的,两者相位相差。
时域信号 | 傅里叶变换 |
因此,等式左边的复指数信号的傅里叶变换为 。欧拉公式是最简单的解析信号,可以看出解析信号在时遇上是复数,而在频域上,只有正频率分量,且幅值是实数信号幅值的两倍。
3. 希尔伯特调制原理
假设有一个调制后的实数信号 ,其中 是对信号进行幅度调制(调幅), 是对信号进行相位调制(调相), 是载波频率。则该实数信号的解析信号为:
即:
则有:
其中, 为复包络, 为复载波信号。
因此解调信息为:
包络:;
相位:;
瞬时频率:。
可以得出:实数信号的瞬时幅值就是解析信号的模,实数信号的瞬时相位就是解析信号虚部和实部比值的反正切值,实数信号的瞬时频率就是瞬时相位的导数除以 2Π。
(参考:希尔伯特变换求包络原理)
(参考:希尔伯特变换与信号的包络_瞬时相位和瞬时频率(pdf 页))
总结 Hilbert 解调步骤:
(1)求原始信号 的 Hilbert 变换 ,得到原始信号的解析信号 ;
(2)瞬时幅度(包络) = 解析信号的模 = ;
(3)瞬时相位 = 和 比值的反正切值 = ;
(4)瞬时频率 = 瞬时相位的导数 / 2Π = ,即:
。
(参考:希尔伯特-黄变换(HHT)的前世今生——一个从瞬时频率讲起的故事)
(参考:希尔伯特变换和瞬时频率问题--连载(二))
4. 希尔伯特解调的意义
我的疑问是:为什么要对已知的信号进行解调才能得到幅值、相位和频率信息?
解答:因为在实际问题中,我们只知道实数信号 的结果,而不知道其具体形式,所以没有办法直接根据信号公式得到这些信息,所以就用到了希尔伯特解调原理~
(参考:信号处理——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变换及谱分析)