【发布时间】:2019-12-29 21:12:34
【问题描述】:
我正在尝试制作一个程序,将我的数据图和模拟数据图一起显示。我的数据来自输入为方波、输出为鲨鱼鳍波形的 RC 电路。问题是模拟的有点乱。我不知道错误在哪里,我猜频率上有些错误,但我不知道。感谢任何会帮助我的人。 链接到数据https://drive.google.com/open?id=1d8p9sIsNoVuXTsjHga0bXmgrbmUIb-LX 我的代码
import numpy as np
import matplotlib.pyplot as plt
import pylab
x, y = pylab.loadtxt('dati06_04.txt', unpack=True) # $\mu s$; digits
off = (y.max() + y.min()) / 2 # digits, offset
Amp = y.max()-y.min() # digits, amplitude
f_T = 24 # Hz, cut frequency
w_T = 2 * np.pi * f_T # rad / s
def A_k(k, w):
global w_T
return 1 / (1 + k * w / w_T) ** 0.5
def Phi(k, w):
global w_T
return np.arctan(- w * k / w_T)
def c_k(k):
global Amp
c = 0
if k % 2 == 0:
c = 0
if k % 2 == 1:
c = 2 * Amp / (k * np.pi)
return c
def w_res(tt, f, k):
global off
w = 2 * np.pi * f
ww = 0
for i in range(k+1):
ww = ww + c_k(i) * A_k(i, w) * np.sin(w * i * tt + Phi(i, w))
return ww + off
plt.plot(x/1000, y, color='blue')
plt.plot(x/1000, w_res(x, 111, 1000), color='orange')
plt.show()
【问题讨论】:
-
当我调用 w_res(x,111,1000) 时,111 是输入信号的频率(以 Hz 为单位)(您还可以在 .txt 文件的第一行中看到,1000 是一个很好的值k 有一个很好的近似值。
-
这么多全局变量的目的是什么?
-
在函数中使用,不是这样使用的吗?可能我错了
-
您可以删除它们,因为无论如何您都在全局范围内定义了它们。也很难理解,因为我不知道你的功能应该做什么。我建议添加一些 cmets。
-
例如写
w_res(x, 1/111, 1000)而不是w_res(x, 111, 1000)会显示一个square信号。不过我不知道这有什么帮助。
标签: python matplotlib fft