这是显而易见的错误。
第一,乘以一个负数,极性肯定反转了,相位怎么可能不变。
第二,反正切的范围是(−π/2,π/2)(-\pi/2, \pi/2)(−π/2,π/2),而相位的范围是(−π,π)(-\pi, \pi)(−π,π)。
这里使用的是 四象限反正切函数 atan2(y, x)
,而不是简单的 arctan(b/a)。这是因为:
· arctan(b/a) 只能返回 (−π/2,π/2)(-\pi/2, \pi/2)(−π/2,π/2) 区间(第一、四象限)的值,无法区分第二象限 (a<0, b>0) 和第三象限 (a<0, b<0) 的点。
· atan2(b, a) 会根据 a 和 b 的符号自动确定正确的象限,返回范围在 (-\pi, \pi] 之间的主值。
在信号处理中的具体应用
a. 滤波器的频率响应
滤波器的频率响应 H(ejω)H(e^{j\omega})H(ejω)是一个关于数字频率 ω\omegaω 的复函数。
· 对于 FIR 滤波器: 频率响应是单位脉冲响应 h[n]h[n]h[n] 的离散时间傅里叶变换 (DTFT)。
H(ejω)=∑n=−∞∞h[n]e−jωnH(e^{j\omega}) = \sum_{n=-\infty}^{\infty} h[n] e^{-j\omega n}H(ejω)=∑n=−∞∞h[n]e−jωn
· 相位计算公式:
ϕ(ω)=∠H(ejω)=atan2(Imag{H(ejω)},Real{H(ejω)}) \phi(\omega) = \angle H(e^{j\omega}) = \operatorname{atan2}\left( \operatorname{Imag}\{H(e^{j\omega})\}, \operatorname{Real}\{H(e^{j\omega})\} \right)ϕ(ω)=∠H(ejω)=atan2(Imag{H(ejω)},Real{H(ejω)})
b. 信号的相位谱
一个信号 x[n]x[n]x[n] 的离散时间傅里叶变换 (DTFT) X(ejω)X(e^{j\omega})X(ejω) 也是复数。
X(ejω)=∑n=−∞∞x[n]e−jωn X(e^{j\omega}) = \sum_{n=-\infty}^{\infty} x[n] e^{-j\omega n}X(ejω)=n=−∞∑∞x[n]e−jωn
它的相位谱描述了信号中不同频率成分的初始相位。计算公式:
ϕx(ω)=∠X(ejω)=atan2(Imag{X(ejω)},Real{X(ejω)}) \phi_x(\omega) = \angle X(e^{j\omega}) = \operatorname{atan2}\left( \operatorname{Imag}\{X(e^{j\omega})\}, \operatorname{Real}\{X(e^{j\omega})\} \right)ϕx(ω)=∠X(ejω)=atan2(Imag{X(ejω)},Real{X(ejω)})
这样一个简单的地方被Gonzalez误导了20+年,去年发现了一个悖论来不及思考,今年反推出来原来根结在这。
我匪夷所思的不是信号处理如此差的人能写图像处理(瞎掰的地方简直太多,只是一个很基础的地方都出错),我匪夷所思的是信号处理如此差的人写了一本图像处理还被奉为了经典,还没人发现。