以前作ったスクリプトも動くかどうか試してみたい。
で、「numpyでCPFSK再び」でやったやつにしてみる。
いきなり
File "d:\Documents\python3-vscode\study2.py", line 2, in <module>
from IPython import get_ipython
ModuleNotFoundError: No module named 'IPython'
と言われるので、
from IPython import get_ipython
get_ipython().magic('reset -sf')
だったところを、
import sys
sys.modules[__name__].__dict__.clear()
ってする。
で、
File "d:\Documents\python3-vscode\study2.py", line 5, in <module>
import matplotlib.pyplot as plt
ModuleNotFoundError: No module named 'matplotlib'
って言われるので、matplotlibとscipyを入れる。matplotlibを入れたところでnumpyも入っちゃう。Anacondaと違ってpipっていうコマンドで入れる。Storeで入手したPythonは勝手にPATHが通してあるので、コマンドでpipってするだけ。
次は
File "d:\Documents\python3-vscode\study2.py", line 68, in <module>
np.save('output/fsk_o_t',t)
File "<__array_function__ internals>", line 5, in save ocalCache\local-packages\Python39\site-packages\numpy\lib\npyio.py", line 525, in save
File "C:\Users\hogehoge\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\numpy\lib\npyio.py", line 525, in save
file_ctx = open(file, "wb")
FileNotFoundError: [Errno 2] No such file or directory: 'output/fsk_o_t.npy'
って言われる...フォルダ作ればいいのかな?
コマンド画面でmkdirで作れるらしい。
PS D:\Documents\python3-vscode> mkdir output
ディレクトリ: D:\Documents\python3-vscode
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2021/04/27 23:16 output
ってフォルダができる。
で、実行するといろんなwarningが出るけど(たぶんSpyderでも出てたんだと思う)、終わったっぽい...グラフが出ない。
Spyderでは要らなかったけど、こちらの環境ではplt.show()が必要らしい。
うまくいきました。
変更したのは2,3行目で、80行目を追加です。
- # 変数クリア
- import sys
- sys.modules[__name__].__dict__.clear()
- import matplotlib.pyplot as plt
- import numpy as np
- import scipy.signal as signal
- # シンボル列を引き延ばす
- 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
- # よく使う変数
- pi=np.pi
- deg2rad=pi/180.0
- twopi=2*pi
- # 設定
- f_carrier=433.92e6 # 搬送波周波数 in Hz
- f_deviation=1e6 # 周波数偏差 in Hz
- f_sym=1e6 # シンボルレート in Hz
- f_samp_simulation=f_carrier*10 # 計算のサンプリングレート in Hz
- phase_initial=45*deg2rad # 搬送波の初期位相(何でもいい) in rad
- symbols_in_base=signal.max_len_seq(7)[0] # シンボル
- #symbols_in_base[0::2]=1
- #symbols_in_base[1::2]=0
- # 後で使う変数
- t_sym=1/f_sym
- t_samp_simulation=1/f_samp_simulation
- omega_carrier=twopi*f_carrier
- omega_deviation=twopi*f_deviation
- # シンボルを計算用に拡張
- [symbols,t_end]=extend_symbol_to_simulation_sampling_rate(symbols_in_base,t_sym,t_samp_simulation)
- symbols=symbols*2-1 # -1 or +1 にする
- # 計算するタイミング
- t=np.arange(0,t_end,t_samp_simulation)
- # 全計算タイミングにおける瞬間的な角速度
- omega_in_moment=omega_carrier+omega_deviation*symbols
- # 全計算タイミングにおける瞬間的な位相変化量
- phase_change_in_moment=omega_in_moment*t_samp_simulation
- # 全計算タイミングでの位相
- phase_t=np.cumsum(phase_change_in_moment)+phase_initial
- # 波形生成
- amp_t=np.exp(1j*phase_t)
- np.save('output/fsk_o_t',t)
- np.save('output/fsk_o_amp_t',amp_t)
- # プロット
- fig=plt.figure()
- fig.add_subplot(3,1,1)
- plt.plot(t,symbols)
- fig.add_subplot(3,1,2)
- plt.plot(t,amp_t)
- fig.add_subplot(3,1,3)
- plt.plot(t,amp_t)
- plt.xlim(t_sym*7.95,t_sym*8.05) # ちょうどシンボルの変わり目を表示
- plt.show()
環境を整えるのがAnacondaと違って一発で完了ではないけど(VSCodeの設定が手間)。まぁまぁいい感じ。
コメントをお書きください