搬送波周波数と、周波数偏差が近すぎる場合は、LPFの次数を大きくしないと落としきれないので、今回はキャリア周波数を100MHzとして、CPFSK波形を出力し、それを直交復調してみる。
- # 変数クリア
- from IPython import get_ipython
- get_ipython().magic('reset -sf')
- import matplotlib.pyplot as plt
- import numpy as np
- from scipy import signal
- # 波形を読み込む
- t=np.load('output/cfsk_o_t.npy')
- amp_t=np.load('output/cfsk_o_amp_t.npy')
- # よく使う変数
- pi=np.pi
- deg2rad=pi/180.0
- twopi=2*pi
- # 設定
- f_Lo=100e6 # 搬送波周波数 in Hz
- f_samp_simulation=1e9 # 計算のサンプリングレート in Hz
- f_deviation=0.3e6 # 周波数偏差 in Hz
- phase_Lo=0*deg2rad # 搬送波の初期位相(何でもいい) in rad
- # 後で使う変数
- t_samp_simulation=1/f_samp_simulation
- omega_Lo=twopi*f_Lo
- # 局発信号の生成
- amp_LoI_t=np.cos(omega_Lo*t+phase_Lo)
- amp_LoQ_t=np.sin(omega_Lo*t+phase_Lo)
- # ミキサー
- amp_I_t_before_LPF=amp_t*amp_LoI_t
- amp_Q_t_before_LPF=amp_t*amp_LoQ_t
- # フィルター係数生成
- freq_cutoff=f_deviation*2 #ざっくり^^
- w_cutoff=freq_cutoff/(f_samp_simulation/2)
- b,a=signal.butter(1,w_cutoff,'lowpass')
- # フィルター適用
- amp_I_t=signal.lfilter(b,a,amp_I_t_before_LPF)
- amp_Q_t=signal.lfilter(b,a,amp_Q_t_before_LPF)
- # プロット
- fig=plt.figure(figsize=(12,12))
- fig.add_subplot(2,1,1)
- plt.plot(t,amp_I_t_before_LPF)
- plt.plot(t,amp_Q_t_before_LPF)
- plt.xlim(240e-6,260e-6) # ちょうどシンボルの変わり目を表示
- fig.add_subplot(2,1,2)
- plt.plot(t,amp_I_t)
- plt.plot(t,amp_Q_t)
- plt.xlim(240e-6,260e-6) # ちょうどシンボルの変わり目を表示
上のグラフが、LPF前、下のグラフがLPF後。
コメントをお書きください