現実に近い信号を作成するために、NRZ(Non Return to Zero)信号の1シンボルの信号を表す基本パルスを作成します。その関数を式に示します。このような式を用いることで、立ち上がりと立下りが滑らかな現実的な信号を作成することが出来ます。
F(t)=1/2(tanh(t/A) -tanh((t-T)/A)
このとき、Tは1シンボルあたりの時間幅、Aはシンボルの立ち上がりの傾きを定める定数、tは時間を表しています。青色がtanh (t/A) 、赤色がtanh (t-T/A) 、黒色が青色と赤色の信号の差です。
import numpy as np
import matplotlib.pyplot as plt
import math
def main():
######################パラメータ######################
N = 2**10 #データ点数
syps = 28e9 #シンボル速度 baud
T = 1/syps #半値幅
A = 0.9*math.pow(10, -12) # 立ち上がりの傾き
trange = 5.714e-10 #全時間幅
dt = trange/N
#####################################################
########################軸設定########################
t = np.linspace(-trange,trange,N) #グラフ用
t_ori = np.linspace(-trange,trange,N) #計算用
time = t
#####################################################
#####################信号波形作成#####################
t_ori += T #半値幅
signal = np.zeros(N, dtype=np.float64)
###信号生成
t_ori -= T #半値幅
signal_tanh = np.tanh(t_ori / A)
signal_phase = np.tanh((t_ori - T) / A )
result = signal_tanh - signal_phase
######################グラフ作成######################
plt.rcParams["font.size"] = 14
plt.figure('signal_wave')
plt.subplot(111)
plt.plot(time, result, color = 'black')
plt.plot(time, signal_tanh, color = 'blue')
plt.plot(time, signal_phase, color = 'red')
plt.xlabel("Time[ns]")
plt.ylabel("Power")
plt.grid()
plt.show()
#####################################################
return 0
if __name__ == "__main__":
main()