Добавил:
itan_hunt
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:lab5 / main
.pyimport numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv
from scipy.constants import c
from scipy.optimize import bisect
def get_depence_vs_from_ws(Rw, e, n=0):
def f(v, w, n):
return jv(n, Rw * w / c * (e - 1 / v ** 2) ** .5)
ws = np.array([2 *np.pi * (5 + 20 * i / 100) * 1e9 for i in range(100)])
v_step = 1e-4
v_prev = v = 2
f1s_and_vfs = []
for w in ws:
f_of_v_prev = f_of_v = f(v_prev, w, n)
while f_of_v_prev * f_of_v > 0:
v -= v_step
f_of_v = f(v, w, n)
f1s_and_vfs += [(w / 2 / np.pi / 1e9, bisect(f=f, a=v_prev, b=v, args=(w, n)))]
v -= v_step
v_prev = v
f1s, vfs = zip(*f1s_and_vfs)
plt.plot(f1s, vfs, 'red')
plt.savefig('1.png')
plt.close()
return f1s, vfs
def sin_x(x): return 1 if x == 0 else np.sin(x) / x
def fun_spectrum(f): return sin_x((f - f0) * np.pi * dt1) * dt1
def get_signal(t, z): return sum([spectrum2s[k] * np.cos(fs[k] * 2 * np.pi * t - fs[k] * 2 * np.pi / function_vf(fs[k]) / c * 1e9 * z) if fgr < fs[k] < f1s[99] else 0 for k in range(n1)])
if __name__ == '__main__':
Rw = 0.9
e = 5.7
f1s, vfs = get_depence_vs_from_ws(Rw, e, 0)
fgr = f1s[0]
function_vf = np.poly1d(np.polyfit(f1s, vfs, 15))
ffs = np.arange(f1s[0], f1s[99], 1e-4)
vffs = np.array([function_vf(ff) for ff in ffs])
plt.plot(ffs, vffs, color='blue')
plt.savefig('2.png')
plt.close()
n = int(1e3)
f0 = 15
dt1 = .666
dt2 = 1.333
dt3 = 0.0666
n1 = 60
p = 0.5
fs = [k / dt2 for k in range(n1)]
spectrum1s = [abs(fun_spectrum(fk)) for fk in fs]
spectrum2s = [fun_spectrum(fk) for fk in fs]
spectrum1s_max = max(spectrum1s)
spectrum2s_max = max(spectrum2s)
plt.plot(fs, [spectrum1 / spectrum1s_max for spectrum1 in spectrum1s], color='red')
for j, spectrum2 in enumerate([abs(spectrum2 / spectrum2s_max) for spectrum2 in spectrum2s]):
plt.plot([j / dt2] * 2, [0, spectrum2], color='blue')
plt.scatter([j / dt2], [spectrum2], color='blue', s=10, marker='o')
plt.plot([fgr] * 2, [0, 1], '--', color='red')
plt.text(fgr, 1, 'fgr')
plt.savefig('3.png')
plt.close()
plt.figure(figsize=(10, 2))
times = [4 * dt2 * i / (n - 1) for i in range(n)]
z = 0
sign_outs = [get_signal(time - dt1 / 2, z) for time in times]
number = 0
time1 = 0
dists = [number + i / n for i in range(n)]
sign_out2s = [get_signal(time1 + dt1 / 2, dist) for dist in dists]
res = 0
for i in range(len(sign_out2s) - 1):
if sign_out2s[i - 1] < p < sign_out2s[i]:
res = sign_out2s[i]
print(res)
plt.figure(figsize=(10, 2))
plt.plot(times, sign_outs, color='red')
plt.savefig('4.png')
plt.close()
plt.figure(figsize=(10, 2))
plt.plot(dists, sign_out2s, color='red')
plt.plot([0, dists[-1]], [p] * 2, '--', color='blue')
plt.savefig('5.png')
plt.close()