一、解析信号
1. 定义
解析信号是没有负频率分量的复值函数,解析信号的实部和虚部是由希尔伯特变换相关联的实值函数。
2. 概念
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. 公式推导
3. 性质
希尔伯特变换器又称 90° 移相器,如下图。两次希尔伯特变换之后,原信号相位翻转了 180°,四次希尔伯特变换之后又变回本身。
Hilbert 变换有如下性质:
三、Hilbert解调原理
1. 信号解调
信号解调是信号调制的反过程,是从已调制的高频信号中解调出原调制信号。信号调制包括调幅、调频、调相,因此信号解调的目的是:根据已有信号,提取出信号的包络、相位、频率信息。
2. 欧拉公式(Euler's formula)
3. 希尔伯特调制原理
总结 Hilbert 解调步骤:
4. 希尔伯特解调的意义
我的疑问是:为什么要对已知的信号进行解调才能得到幅值、相位和频率信息?
解答:
因为在实际问题中,我们只知道实数信号
的结果,而不知道其具体形式,所以没有办法直接根据信号公式得到这些信息,所以就用到了希尔伯特解调原理~四、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');
可以看出,解析信号的频谱是单边谱,且幅值是原始实数信号频谱幅值的两倍。另一方面,希尔伯特解调之后存在边界效应,即边界误差较大。