2020年7月29日水曜日

レールスプリッタ 1 (構想)

オペアンプを動かしたりするときに必要な両電源を作ります。

レールスプリッタ回路で両電源を作ります。レールスプリッタはあちこちで作っている人がいるのと、専用ICもあり、データシートを見ればわかることなので、この記事はいらないっちゃ~いらない。まぁメモなので。

まぁここでやられているのと同じです。

手作りからプリント基板製作までやってみます。部品はいつもの秋月電子通商です。

写真ではユニバーサル基板でてきとーに作っていますが、、、

2020年7月22日水曜日

パルスで直交復調(7) -こんどこそ2-

今度はマジでパルすでやった結果

「パルスで直交復調(5) -numpyでやってみる-」の「fsk_study_qdemod_lo_sqwave_ver2.py」において、局発信号の生成部分だけ変更する。

  1. # 局発信号の生成
  2. amp_LoI_t=np.cos(omega_Lo*t+phase_Lo)
  3. amp_LoQ_t=np.sin(omega_Lo*t+phase_Lo)
  4. #ここからパルス化
  5. amp_LoI_t[amp_LoI_t>=0.95]=1
  6. amp_LoI_t[amp_LoI_t<0.95]=0
  7. amp_LoQ_t[amp_LoQ_t>=0.95]=1
  8. amp_LoQ_t[amp_LoQ_t<0.95]=0

コンスタレーションダイアグラムでの正規化はめんどくさくて省略。

 

復調結果は間違ってなさそう。

 

パルスの幅をどんどん狭くしていくことを考えると、、、

矩形波や正弦波を作って乗算しなくても、キャリア周波数でサンプリングすれば直交復調できるってことっスか。

パルスで直交復調(6) -こんどこそ1-

今度はマジでパルす

そもそもの式は

(1)f(t)=a0+n=1{ancos(2πnTt)+bnsin(2πnTt)}

めんどくさいので、答えだけ

(2)a0=tpT
(3)an=2πnsin(πnTtp)
(4)f(t)=tpT+n=1{2πnsin(πnTtp)cos(2πnTt)}

numpyで確認

  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.   
  8. # よく使う変数
  9. pi=np.pi
  10.  
  11. # 設定
  12. T=1
  13. tp=0.001 
  14. repeat_num=20
  15.  
  16. # 計算する範囲と刻みで計算ポイントを作る
  17. t=np.arange(-T,T,0.00001)
  18.   
  19. # 式に値を入れて結果を得る
  20. a=np.zeros(repeat_num)
  21. f_t=np.zeros((repeat_num,t.size))
  22. a[0]=tp/T
  23. f_t[0,:]=np.ones_like(t)*a[0]
  24. for n in range(1,repeat_num):
  25.     a[n]=2/n/pi*(np.sin(n*pi/T*tp))
  26.     f_t[n,:]=f_t[n-1,:]+a[n]*np.cos(2*pi*n/T*t)
  27.   
  28. # プロット
  29. fig=plt.figure()
  30. plt.plot(t,f_t[1],label="n=1")
  31. plt.plot(t,f_t[2],label="n=1,2")
  32. plt.plot(t,f_t[3],label="n=1,2,3")
  33. plt.plot(t,f_t[4],label="n=1,2,3,4")
  34. plt.plot(t,f_t[5],label="n=1,...,5")
  35. plt.legend()
  36.   
  37. fig=plt.figure()
  38. plt.plot(t,f_t[repeat_num-1],label="n=1,...,"+str(repeat_num))
  39. plt.legend()

(4)でtの代わりにt-T/4と書けばよい。

答えがきれいにならないので、もうこれ以上やらない。

(5)f(t)=tpT+n=1{2πnsin(πnTtp)cos(2πnT(tT4))}

numpyで確認

  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.   
  8. # よく使う変数
  9. pi=np.pi
  10.   
  11. # 設定
  12. T=1
  13. tp=0.001 
  14. repeat_num=20
  15.  
  16. # 計算する範囲と刻みで計算ポイントを作る
  17. t=np.arange(-T,T,0.00001)
  18.   
  19. # 式に値を入れて結果を得る
  20. a=np.zeros(repeat_num)
  21. f_t=np.zeros((repeat_num,t.size))
  22. a[0]=tp/T
  23. f_t[0,:]=np.ones_like(t)*a[0]
  24. for n in range(1,repeat_num):
  25.     a[n]=2/n/pi*(np.sin(n*pi/T*tp))
  26.     f_t[n,:]=f_t[n-1,:]+a[n]*np.cos(2*pi*n/T*(t-T/4))
  27.   
  28. # プロット
  29. fig=plt.figure()
  30. plt.plot(t,f_t[1],label="n=1")
  31. plt.plot(t,f_t[2],label="n=1,2")
  32. plt.plot(t,f_t[3],label="n=1,2,3")
  33. plt.plot(t,f_t[4],label="n=1,2,3,4")
  34. plt.plot(t,f_t[5],label="n=1,...,5")
  35. plt.legend()
  36.   
  37. fig=plt.figure()
  38. plt.plot(t,f_t[repeat_num-1],label="n=1,...,"+str(repeat_num))
  39. plt.legend()

それらしい結果になりました。

 

で、一番低い周波数成分が、1/Tになっているので、矩形波と同じように、パルスで直交復調してもよいってことでしょ。