いちおう無線系ということで、マンチェとかバイフェーズとかだった場合に大体どういうスペクトルになるかを考える。
import matplotlib.pyplot as plt import numpy as np # よく使う変数 pi=np.pi deg2rad=pi/180.0 twopi=2*pi # シンボル列を引き延ばす def extend_symbol_to_simulation_sampling_rate(symbols,t_symbol,t_simulation_sampling): # シンボル数 size_of_symbols=symbols.size # 最後のシンボルが終わる時間 end_time=size_of_symbols*t_symbol # 計算タイミング t=np.arange(0,end_time,t_simulation_sampling) # 各シンボルの開始(終了)時間 t_periods_of_symbols=np.append(0,np.arange(1,size_of_symbols,1)*t_symbol) # 結果データ領域確保 ex_symbols=np.zeros_like(t) # 先頭データは入れておく ex_symbols[0]=symbols[0] # 各シンボルについて、その期間のインデックスを取得し、データを入れ込む for i in range(0,size_of_symbols): ex_symbols[np.where(t>t_periods_of_symbols[i])]=symbols[i] return ex_symbols,end_time def generate_ask(f_carrier,f_sym,f_samp_generation,phase_carrier_initial,symbols_in_base): t_sym=1/f_sym t_samp_generation=1/f_samp_generation omega_carrier=twopi*f_carrier # シンボルを計算用に拡張 [symbols,t_end]=extend_symbol_to_simulation_sampling_rate(symbols_in_base,t_sym,t_samp_generation) # 計算するタイミング t=np.arange(0,t_end,t_samp_generation) # 波形生成 amp_t=np.exp(1j*omega_carrier*t+phase_carrier_initial)*symbols return t,symbols,amp_t def main(): # 設定 f_carrier=433.92e6 # 搬送波周波数 in Hz f_sym=2e6 # シンボルレート in Hz f_samp_generation=1e10 # 計算のサンプリングレート in Hz t_samp_generation=1/f_samp_generation phase_initial=0*deg2rad # 搬送波の初期位相(何でもいい) in rad #symbols_in_base=np.array([1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0]) symbols_in_base=np.array([1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0]) t,baseband_t,amp_t=generate_ask(f_carrier,f_sym,f_samp_generation,phase_initial,symbols_in_base) #今回の計算は実部だけでやったので amp_t=np.real(amp_t) number_of_samples=t.size # fftする amp_f=np.fft.fft(amp_t)/(number_of_samples/2) amp_f=np.abs(amp_f) freq=np.fft.fftfreq(number_of_samples,t_samp_generation) # プロット fig=plt.figure() fig.add_subplot(3,1,1) plt.plot(t,baseband_t) fig.add_subplot(3,1,2) plt.plot(t,amp_t) fig.add_subplot(3,1,3) plt.plot(freq[0:int(number_of_samples/2)],amp_f[0:int(number_of_samples/2)]) plt.xlim(f_carrier-10e6,f_carrier+10e6) plt.show() amp_f=20*np.log10(amp_f) fig=plt.figure() plt.plot(freq[0:int(number_of_samples/2)],amp_f[0:int(number_of_samples/2)]) plt.xlim(f_carrier-10e6,f_carrier+10e6) plt.ylim(-50,0) plt.show() main()
47行目を使うとバイフェーズで0101010101010101てことで、48行目を使うと0000000000000000。
48行目を使った場合、
47行目を使った場合、
もう数式では考え難い複雑さです。
いろいろいらっとくるので、一人になりたい。人として許されるなら、、、
コメントをお書きください