【发布时间】:2017-03-06 18:13:33
【问题描述】:
def testing(min_quadReq, stepsize, max_quadReq, S):
y = np.arange(min_quadReq, max_quadReq, stepsize)
print("Y", y)
I_avg = np.zeros(len(y))
Q_avg = np.zeros(len(y))
x = np.arange(0, (len(S)))
debugger = 0
for i in range(0, len(y)):
I = np.array(S * (np.cos(2 * np.pi * y[i] * x)))
Q = np.array(S * (np.sin(2 * np.pi * y[i] * x)))
I_avg[i] = np.sum(I, 0)
Q_avg[i] = np.sum(Q, 0)
debugger += 1
D = [I_avg**2 + Q_avg**2]
maxIndex = np.argmax(D)
#maxValue = D.max()
# in python is arctan2(b,a) compared to matlab's atan2(a,b)
phaseOut = np.arctan2(Q_avg[maxIndex], I_avg[maxIndex])
# returns the out value and the phase
out = min_quadReq + ((maxIndex + 1) - 1) * stepsize
return out, phaseOut
我正在开展一个项目,该项目使用 DSP 处理信号以获取相关数据。上面的代码来自正交调制的内部函数。据我所见,这是代码中最有可能被优化的部分。例如,两个 sum 函数分别被调用了大约 92k 次,而正交函数本身被调用了 2696 次。我对python不太熟悉,所以如果有人对如何更有效地编写它或一些好的文档有任何建议,那就太好了。
信号 S 是输入源,它是 [481][251] 的数组。正交的外壳由quadReq(cavSig[j, :]) 调用,只是一些额外的信息来显示它是如何调用的以及调用了多少次。
def randomnumber():
s = np.random.random_sample((1, 251))
print(s)
return s
随机数()
编辑:添加了更多信息
【问题讨论】:
-
请正确缩进您的代码。
-
绝对可以优化。你需要阅读broadcasting、this和here。
-
我投票结束这个问题,因为它属于代码审查网站。
-
请将其移至 CodeReview.StackExchange.com。还包括一个完整的Minimal, complete, verifiable example——添加一个驱动程序,让其他人从头开始运行你的代码。
-
关于y,你能告诉我们什么,尤其是步长?它不会将 S 的长度分开吗?还有长度?是不是比S小很多?
标签: python numpy optimization signal-processing