Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使Python FFT代码更快_Python_Raspberry Pi_Real Time_Fft - Fatal编程技术网

使Python FFT代码更快

使Python FFT代码更快,python,raspberry-pi,real-time,fft,Python,Raspberry Pi,Real Time,Fft,有人能帮我加快Python代码的速度吗?现在我达到了每秒11米的速度。我希望能更快地完成,但不知道怎么做 import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np import time from pylab import * ################################################################### impor

有人能帮我加快Python代码的速度吗?现在我达到了每秒11米的速度。我希望能更快地完成,但不知道怎么做

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
import time
from pylab import *
###################################################################
import Accelneu as Accel
import RPi.GPIO as GPIO
from scipy.fftpack import fft
GPIO.setmode(GPIO.BCM)
HIGH=True
LOW=False
###Variablendefinitionen:
##ADDA Wandler:
#Pins:
SCLK        = 18    #Taktuhr
MOSI        = 24    #Master-Out-Slave-In
MISO        = 23    #Master-In-Slave-Out
CS1         = 25    #Chip-Select 1  (A/D)
CS2         = 12    #Chip-Select 2  (D/A)
CS3         = 4     #Chip-Select 2  (Acceleration)
#sonst Infos:
numBit1         = 12    # IN Anzahl Bits IC 1  (A/D)
numBit2         = 10    # OUT Anzahl Bits IC 2  (D/A) #Variablendefinition
VoltageMaxIn    = 5.000
VoltageMaxOut   = 4.0955 #Maximalspannung
Voltage = 2.500
##Drucksensor:
VoltageOffset       = 0.014652014652014652  #V Spannungsoffset Typ:20mV
PressureSensitivity = 0.0035                #V/kPa Empfindlichkeit
#AccelerationSensitivity = 0.015625
##GPIOs  
GPIO.setup(SCLK, GPIO.OUT)
GPIO.setup(MOSI, GPIO.OUT)
GPIO.setup(MISO, GPIO.IN)
GPIO.setup(CS1, GPIO.OUT)
GPIO.setup(CS2, GPIO.OUT)
GPIO.setup(CS3, GPIO.OUT)

#######################
xlimit=500
fig=figure(figsize=(8,7),dpi=100)
x=[i+1 for i in range (xlimit)]
y=[0 for i in range (xlimit)]
ax1=fig.add_subplot(211)
ax2=fig.add_subplot(212)
line1, =ax1.plot(x,y,'r-')
line2, =ax2.plot(x,y,'g-')
ax1.set_ylim([-0.5, 2.5])
ax2.set_ylim([0, 0.4])
############################################################
#FFT: 
N=xlimit    #512#1000         #Number of samplepoints/sampling rate
Spacing=2048    #1024
T=1.0/Spacing          #Sample Spacing/sampling interval
xf=np.linspace(0.0, 1.0/(2.0*T), N/2)
line2.set_xdata(xf[1:N/2-1])
############################################################
def animate(i):
    t0=time.time()
    y[1:]=y[:-1]    ##Zeitraum 1
    t1=time.time()
    y[0],z=Accel.readAxisAcceleration(1)    ##Zeitraum 2
    t2=time.time()
    line1.set_ydata(y)    ##Zeitraum 3
    t3=time.time()
    ffty=fft(y)    ##Zeitraum 4
    t4=time.time()
    ffty=ffty[1:N/2-1]    ##Zeitraum 5
    t5=time.time()
    line2.set_ydata(2.0/N*np.abs(ffty[0:N/2]))#ffty)    ##Zeitraum 6
    t6=time.time()
    print(t1-t0,t2-t1,t3-t2,t4-t3,t5-t4,t6-t5)
    return line1, line2 #lines
t7=time.time()
ani =animation.FuncAnimation(fig,animate,xrange(1,200),interval=0,blit=True)
t8=time.time()
print (t8-t7)
plt.show()

也许有人能告诉我如何让这更快。Accelneu类是一个从加速度传感器中读取数据的函数(不是慢速行为的来源,我对此进行了分析)。

您提到您分析了代码。请分享结果。您也可以考虑切换到FFTW。您可以使用<代码> RFFT而不是<代码> FFT。因为您的信号是真值的,您是否一直在做?时间()调用只是为了测试吗?如果是这样的话,试着禁用它们,看看它的运行速度有多快,获得时间可能会很慢,具体取决于方法。另外,您可以将()写入缓冲文件,而不是print()。我认为这将是解决您的问题的更好地方。因此,您显示所有这些完全无关的代码而不仅仅是必要的部分的原因是。。?见鬼,你的io和计算是在同一个线程上进行的,这看起来确实是一个可能的候选。