2. 相位与频率的关系:瞬时频率、群延迟、相位展开
相位和频率,说白了就是一枚硬币的两面。很多工程师做信号处理时,习惯盯着频谱看,却忽略了相位里藏着的时域信息。我个人习惯把相位看作「时间的微分映射」——你理解了这层关系,很多滤波器的设计问题就迎刃而解了。
2.1 瞬时频率:相位对时间的导数
先问一个问题:一个非平稳信号,比如鸟叫声、雷达回波,它的频率到底是多少?
傅里叶变换告诉我们全局频谱,但没法说清楚「此刻」的频率。这时候就需要瞬时频率的概念。
对于一个解析信号:
z(t) = a(t) · exp[j·φ(t)]
瞬时频率定义为相位对时间的导数:
f_inst(t) = (1 / 2π) · dφ(t) / dt
嗯,这里要注意:这个定义只在信号满足「单分量」条件时才成立。如果信号同时包含多个频率成分,算出来的瞬时频率会变得毫无意义。
2.2 群延迟:相位对频率的导数
群延迟是瞬时频率的「对偶」概念。它描述的是:不同频率分量通过系统时,经历的时延是多少。
定义式:
τ_g(ω) = - dφ(ω) / dω
为什么是负号?因为相位滞后随频率增加而减小,取负号让群延迟为正数,更符合直觉。
| 概念 | 定义 | 物理含义 |
|---|---|---|
| 瞬时频率 | dφ(t)/dt | 信号在时刻 t 的局部频率 |
| 群延迟 | -dφ(ω)/dω | 频率 ω 分量通过系统的时延 |
我曾经在调试一个数字通信系统的匹配滤波器时,发现误码率始终降不下来。后来一查群延迟曲线,发现通带内波动超过 3 个符号周期——信号被「拉散」了。换了一个线性相位滤波器,问题立刻解决。
2.3 相位展开:从缠绕到连续
算出来的相位值,通常被限制在 (-π, π] 或 [0, 2π) 范围内。这叫「缠绕相位」。但真实的物理相位应该是连续的,可能跨越多个 2π 周期。
相位展开,就是把缠绕的相位恢复成连续的相位曲线。
最基本的展开算法:
def unwrap_phase(phi_wrapped):
phi_unwrapped = np.copy(phi_wrapped)
for i in range(1, len(phi_wrapped)):
delta = phi_wrapped[i] - phi_wrapped[i-1]
if delta > np.pi:
phi_unwrapped[i:] -= 2 * np.pi
elif delta < -np.pi:
phi_unwrapped[i:] += 2 * np.pi
return phi_unwrapped
这个算法在信噪比高的时候很好用。但一旦有噪声,相位跳变点可能误判,导致展开结果整体偏移 2π 的整数倍。
2.4 三者的关系与工程意义
瞬时频率、群延迟、相位展开,这三者构成了一个完整的分析链条:
- 相位展开是基础——没有连续的相位曲线,导数和群延迟都无从谈起。
- 瞬时频率是相位在时域的局部变化率,适合分析非平稳信号。
- 群延迟是相位在频域的局部变化率,适合评估系统对信号波形的影响。
我举个例子你就明白了。设计一个带通滤波器,你通常会看幅频响应。但如果你要传输的是脉冲信号,幅频响应平坦远远不够——群延迟必须平坦,否则脉冲会被展宽,码间干扰就来了。
2.5 工程中的常见陷阱
- 相位跳变误判:噪声导致相位在 π 附近抖动,展开算法误以为发生了 2π 跳变。我建议在展开前先做中值滤波。
- 群延迟与相位延迟混淆:相位延迟是 -φ(ω)/ω,群延迟是 -dφ(ω)/dω。对于线性相位系统,两者相等;对于非线性相位系统,两者完全不同。
- 瞬时频率的「负频率」问题:如果信号不满足单分量条件,瞬时频率可能算出负值——这在物理上没有意义,说明你的分析方法用错了。
相位与频率的关系,说白了就是微积分的关系。你掌握了这个视角,再看滤波器、调制解调、时频分析,都会有一种「原来如此」的感觉。嗯,这部分内容就到这里,接下来你可以动手试试:给一个线性调频信号加噪声,分别计算它的瞬时频率和群延迟,看看两者有什么不同。