解析信号与Matlab hilbert函数

本文介绍了希尔伯特变换在信号处理中的应用,通过构造解析信号来提取信号的瞬时幅值、相位和频率。解析信号的实部是原始实值信号,虚部为其希尔伯特变换。MATLAB代码演示了如何使用hilbert函数生成解析信号并计算相关参数。这种方法对于分析调制信号的包络、瞬时特性非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先摘抄一段: 

通常我们用到的信号都是实值信号,但是我们可以根据这个实信号构造出一个复信号,使得这个复信号只包含正频率部分,而且这个复信号的实部正好就是我们原来的实值信号。简单的推导可知,复信号的虚部是原信号的希尔伯特变换。这样构造出来的信号就叫做解析信号。因此,如何生成解析信号与如何对一个信号进行希尔伯特变换其实是等价的问题。获得解析信号后可以计算波形的包络、瞬时频率、相位等,是非常有用的。
 

下面详细解释一下:

1,构造解析信号:

假设实值信号为x(t),那么构建解析信号的过程如下图所示:

解析信号为

z(t)=z_r(t)+jz_i(t)=x(t)+jHT\{x(t)\} 

2,计算瞬时幅值、瞬时相位和瞬时频率

2.1 计算瞬时幅值

 

2.2 计算瞬时相位

 

 

2.3 计算瞬时频率

一旦知道了瞬时相位,信号的载波就可以被恢复出来,恢复出来的载波被称为temporal fine structure (TFS)。

 3,matlab 代码

%Demonstrate extraction of instantaneous amplitude and phase from
%the analytic signal constructed from a real-valued modulated signal.
fs = 600; %sampling frequency in Hz
t = 0:1/fs:1-1/fs; %time base
a_t = 1.0 + 0.7 * sin(2.0*pi*3.0*t) ; %information signal
c_t = chirp(t,20,t(end),80); %chirp carrier
x = a_t .* c_t; %modulated signal
subplot(2,1,1); plot(x);hold on; %plot the modulated signal

z = hilbert(x); %form the analytical signal
inst_amplitude = abs(z); %envelope extraction
inst_phase = unwrap(angle(z));%inst phase
inst_freq = diff(inst_phase)/(2*pi)*fs;%inst frequency

%Regenerate the carrier from the instantaneous phase
regenerated_carrier = cos(inst_phase);

plot(inst_amplitude,'r'); %overlay the extracted envelope
title('Modulated signal & extracted envelope');xlabel('n');ylabel('x(t) & |z(t)|');
subplot(2,1,2); plot(cos(inst_phase));
title('Extracted carrier or TFS');xlabel('n'); ylabel('cos[\omega(t)]');

 需要注意的是,matlab中hilbert函数,并不是求解Hilbert变换的结果,而是直接生成解析信号。

如果采用octave软件运行,需要先 pkg load signal

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值