ASK変調波を作るのにスイッチを使ってたけど、せっかくPythonでやるんだから、供給波形をそもそも変調した波形にすればいいんじゃんか。それをPWL電圧源という、、、いや、最初からやれって、、、(ngspiceをやってるときに気づいた。)
Python内でできるので、めっちゃ長いpwlでもファイルに出したりせずにできちゃう。
import matplotlib import matplotlib.pyplot as plt from scipy import signal import numpy as np import ahkab from ahkab import circuit, time_functions # シンボル列を引き延ばす 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 t_samp=0.5e-6 t_sym=100e-6 freq_carrier=459441 amplitude_carrier=5 # in [Vp] symbols_in_base=np.array([0,1,0,1,0,1,0]) t_org=np.arange(0,t_sym*symbols_in_base.size,t_samp) waveform_carrier=amplitude_carrier*np.cos(2*np.pi*freq_carrier*t_org) [symbols,t_end]=extend_symbol_to_simulation_sampling_rate(symbols_in_base,t_sym,t_samp) waveform_gen=waveform_carrier*symbols vsource_pwl=ahkab.time_functions.pwl(t_org,waveform_gen,repeat=False,repeat_time=t_end,td=0) R1_val=100e0 L1_val=600e-6 C1_val=200e-12 R2_val=100e3 L2_val=3e-3 C2_val=40e-12 Rg_val=10e6 k_val=0.00074 print ('Resonance frequency=',end='') print(1/(2*np.pi*np.sqrt(C1_val*L1_val))) print ('Calculated Q=',end='') print((1/R1_val)*np.sqrt(L1_val/C1_val)) print ('Resonance frequency=',end='') print(1/(2*np.pi*np.sqrt(C2_val*L2_val))) print ('Calculated Q=',end='') print(R2_val*np.sqrt(C2_val/L2_val)) op_analysis = ahkab.new_op() tran_analysis = ahkab.new_tran(tstart=0, tstop=t_end, tstep=t_samp, x0=None) mycircuit = circuit.Circuit(title="mutual coupling circuit") gnd = mycircuit.get_ground_node() mycircuit.add_capacitor("C1", n1="n1", n2="n2", value=C1_val) mycircuit.add_resistor("R1", n1="n2", n2="n3", value=R1_val) mycircuit.add_inductor("L1", n1="n3", n2=gnd, value=L1_val) mycircuit.add_resistor("R2", n1="n4", n2="n5", value=R2_val) mycircuit.add_inductor("L2", n1="n4", n2="n5", value=L2_val) mycircuit.add_capacitor("C2", n1="n4", n2="n5", value=C2_val) mycircuit.add_resistor("Rg", n1="n5", n2=gnd, value=Rg_val) mycircuit.add_inductor_coupling("M1","L1","L2",k_val) mycircuit.add_vsource("V1", n1="n1", n2=gnd, dc_value=0, ac_value=0, function=vsource_pwl) #print(mycircuit) r = ahkab.run(mycircuit, an_list=[op_analysis, tran_analysis]) t=r['tran']['T'] tI_R1=(r['tran']['Vn3']-r['tran']['Vn2'])/R1_val tV_R2=r['tran']['Vn5']-r['tran']['Vn4'] matplotlib.use('TkAgg') fig = plt.figure() ax1=plt.subplot(2,1,1) ax1.grid(True) ax1.plot(t, np.real(tI_R1), '-') ax1.set_ylabel('(Vn3-Vn2)/R1 [A]') ax2=plt.subplot(2,1,2) ax2.grid(True) ax2.plot(t, np.real(tV_R2), '-') ax2.set_ylabel('(Vn5-Vn4) [V]') ax2.set_xlabel('time [s]') fig.tight_layout() plt.show()
ほれ、でけた。
てか、もっと早く気づけよって、、、いや、もうダメだというときが仕事のはじまりなので。
コメントをお書きください