· 

numpyでASK

一応ASK波形も出してみる。正弦波に伸長したシンボルを掛けているだけ...

  1. # 変数クリア
  2. from IPython import get_ipython
  3. get_ipython().magic('reset -sf')
  4.  
  5. import matplotlib.pyplot as plt
  6. import numpy as np
  7. import scipy.signal as signal
  8.  
  9. # シンボル列を引き延ばす
  10. def extend_symbol_to_simulation_sampling_rate(symbols,t_symbol,t_simulation_sampling):
  11.     # シンボル数
  12.     size_of_symbols=symbols.size
  13.     # 最後のシンボルが終わる時間
  14.     end_time=size_of_symbols*t_symbol
  15.     # 計算タイミング
  16.     t=np.arange(0,end_time,t_simulation_sampling)
  17.     # 各シンボルの開始(終了)時間
  18.     t_periods_of_symbols=np.append(0,np.arange(1,size_of_symbols,1)*t_symbol)
  19.     # 結果データ領域確保
  20.     ex_symbols=np.zeros_like(t)
  21.     # 先頭データは入れておく
  22.     ex_symbols[0]=symbols[0]
  23.     # 各シンボルについて、その期間のインデックスを取得し、データを入れ込む
  24.     for i in range(0,size_of_symbols):
  25.         ex_symbols[np.where(t>t_periods_of_symbols[i])]=symbols[i]
  26.     return ex_symbols,end_time
  27.         
  28. # よく使う変数
  29. pi=np.pi
  30. deg2rad=pi/180.0
  31. twopi=2*pi
  32.  
  33. # 設定
  34. f_carrier=433.92e6            # 搬送波周波数 in Hz
  35. f_sym=1e6                 # シンボルレート in Hz
  36. f_samp_simulation=f_carrier*10     # 計算のサンプリングレート in Hz
  37. phase_initial=45*deg2rad  # 搬送波の初期位相(何でもいい) in rad
  38. symbols_in_base=signal.max_len_seq(7)[0] # シンボル
  39.  
  40. # 後で使う変数
  41. t_sym=1/f_sym
  42. t_samp_simulation=1/f_samp_simulation
  43. omega_carrier=twopi*f_carrier
  44.  
  45. # シンボルを計算用に拡張
  46. [symbols,t_end]=extend_symbol_to_simulation_sampling_rate(symbols_in_base,t_sym,t_samp_simulation)
  47.  
  48. # 計算するタイミング
  49. t=np.arange(0,t_end,t_samp_simulation)
  50.  
  51. # 波形生成
  52. amp_t=np.exp(1j*omega_carrier*t)*symbols
  53.  
  54. # 波形保存
  55. np.save('output/ask_o_t',t)
  56. np.save('output/ask_o_amp_t',amp_t)
  57.  
  58. # プロット
  59. fig=plt.figure(figsize=(12,12))
  60. fig.add_subplot(2,1,1)
  61. plt.plot(t,amp_t)
  62. fig.add_subplot(2,1,2)
  63. plt.plot(t,amp_t)
  64. plt.xlim(t_sym*7.95,t_sym*8.05) # ちょうどシンボルの変わり目を表示