以前、PythonでFM復調を試した、
そのとき、変調指数が大きいときは素朴に、位相の差分を取るところで特別な処理を入れて対処していたが、
Interfaceを読んで、直交復調を真の意味で?活用することでその問題を回避できるということを確認した。
# arctan & diff phi_sig = np.ndarray(0) for index, (i, q) in enumerate(zip(bbi2, bbq2)): if index == 0: continue xn = bbq2[index-1]+1j*bbi2[index-1] xm = q + 1j*i phi_sig = np.append(phi_sig, np.angle(xn*np.conj(xm))) demod = phi_sig
分かりやすい図がInterfaceのp80に乗っている。
QとIから①位相を求めてから②差分を取るのではなくて、
複素数の掛け算で②差分を取ってから、①位相を求める。
またpythonなら
demod = np.angle(samp[1:]*np.conj(samp[:-1])
こうも書けるらしい
複素数の掛け算による偏角の差が十分に小さく
(信号周波数にたいしてサンプリング周波数が十分に大きいので)
π/2以上になることがない。
変調指数が小さくても大きくても同様の処理で行える。