希尔伯特变换及其在Matlab中的两种实现方法
创作时间:
作者:
@小白创作中心
希尔伯特变换及其在Matlab中的两种实现方法
引用
搜狐
1.
https://www.sohu.com/a/786896936_121124362
实信号只包含振幅信息,而缺乏相位信息。而复信号则包含了原始信号的相位信息,可以用于分析信号的相位特性。在某些应用中,例如信号处理、通信系统中,相位信息对于理解信号的特性和进行后续处理非常重要。
Hilbert(希尔伯特)变换可以将实信号转换为复信号,常用于提取信号的相位信息,使得我们能够更全面地分析和处理信号,这在雷达通信领域中都很有用,尤其是在带通信号处理中。
Hilbert变换可以认为是函数f(t)和h(t)的卷积,其中:
在频率域,对函数进行Hilbert变换,是在f(t)的傅里叶变换结果F(w)前乘一个系数H(w),其中H(w)是h(t)的傅里叶变换:
也就是把F(w)所有正频率向后移动90°相位,负频率则向前移动90°相位。也可以用符号函数表示:
那么,对于函数f(t),它的希尔伯特变换在频域表示为:
方法一:使用Matlab工具箱中的函数
使用Matlab工具箱中的函数hilbert 可以计算实数输入序列x的Hilbert变换,并返回相同长度的复数结果,即y = hilbert(x),其中y的实部是原始实数数据,虚部是实际Hilbert变换。
方法二:使用FFT/IFFT
Hilbert变换的实现还可以通过对实信号进行傅里叶变换(FFT),将负频率部分置零,然后再通过逆傅里叶变换(IFFT)转换到时域,得到复信号,其中实数部分为原始信号,虚数部分为变换后的信号。
常见函数的Hilbert变换
另外,使用NCO(Numerically Controlled Oscillator)和低通滤波器的组合也可以直接将实信号转换为复信号,避免了额外的FFT和IFFT处理,从而减少处理时间。
下面是两种方法的Matlab代码实现:
clc;
clear;
close all;
N = 500;
Fs = 100e6;
t = (0:N-1)/Fs;
f = 1e6;
x = sin(2*pi*f*t);
% 方法一:
Y1 = hilbert(x);
figure;
plot(1:N,real(Y1),'b',1:N,imag(Y1),'r--');
title('Hilbert变换');
legend('原始信号','变换后信号');
grid on;
% 方法二:
h1 = fft(x);
for i = 1:N
if ((i == 1) || (i == (N/2+1)))
h1(i) = h1(i);
elseif ((i > 1) && (i <= N/2))
h1(i) = 2*h1(i);
else
h1(i) = 0;
end
end
Y2 = ifft(h1);
figure;
plot(1:N,real(Y2),'b',1:N,imag(Y2),'r--');
title('Hilbert变换');
legend('原始信号','变换后信号');
grid on;
热门推荐
医疗服务包括哪些服务
异卵双胞胎是怎么形成的
“ed妹”:折断评判的权柄,找回真实的自我
首套房退契税怎么办理
首套房契税怎么退税
大理旅游攻略:古城、洱海与多元民族文化
公司的人力资源怎么发展
项目管理软件升级完全指南:七大步骤助你轻松完成升级
如何吸引多元化员工团队
Excel如何绘制清晰的曲线图
玫瑰花与月季花:从形态到药用价值的全面解析
肠鸣音亢进是什么原因引起的
中暑需要心肺复苏吗?专业医生这样回答
递归函数的几个典型例子
茶的抗衰老作用:如何通过饮茶保持青春活力
13条最佳实践建议!高危人群进行胰腺癌筛查的专家指南
传统供应链效率低下,数字化转型如何重塑管理新模式?
如何提高团队的应变能力
偏高!新疆春季平均气温预测出炉!
如何修改服务器连接设置以提升网络稳定性和速度技巧总结
苹果核为什么不能吃
个税收入和收入额有哪些区别?一文了解清楚
什么是比特币场外交易?详解OTC交易方式
走路可以降低胆固醇吗
预防胎儿神经管缺陷的利器——叶酸
45岁生二胎晚不晚?45岁生二胎要检查什么项目?
男人三十岁以后如何养生 30岁男人的养生经
什么是数字证据
案外人执行异议之诉裁判要点
如何办理税务登记变更手续