-1
我目前正在使用python開發一個項目。我的目標是能夠使用Raspberry Pi製作主動降噪設備。 現在,我已經編寫了這個程序,它開始錄製我試圖取消的聲音,然後使用一個PID控制器來計算與原始聲音相反的波形並播放它,以取消它。使Python代碼運行得更快以減少偏移量
我現在的問題是,程序需要一些時間來做數學運算,所以一旦它計算出了反轉波,原來的那個已經過了設備,我得到的偏移量大約爲0.02秒。我的目標是儘可能減少這種偏移,然後通過增加麥克風和揚聲器之間的距離來補償它。現在,由於偏移量爲0.02秒,聲速爲340米/秒,我必須將該距離設置爲6.8米(0.02 * 340 = 6.8),這太多了。
那麼如何讓程序運行得更快? 下面的代碼:
import pyaudio, math, struct
import numpy as np
import matplotlib.pyplot as plt
#INITIAL CONFIG
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = float(input('Seconds: '))
p = pyaudio.PyAudio()
guess = 0
integral = 0
kp = 0.5
ki = 200
kd = 9999
dt = RATE**(-1)
ddt = RATE
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
output=True,
frames_per_buffer=chunk)
total_error = 0
previous_e = 0
#Start processing
print ("* recording")
for i in range(0, int(RATE/chunk * RECORD_SECONDS)):
byted = (b'')
for element in np.fromstring(stream.read(chunk), 'Int16'):
error = -(guess - element)
integral += error*dt
derivative = (error - previous_e)/ddt
guess += int(round(kp*error + ki*integral + kd*derivative, 0))
byted += struct.pack('<h', -guess)
previous_e = error
stream.write(byted, chunk)
#Close
stream.stop_stream()
stream.close()
p.terminate()
input ('Press enter to exit...')
請注意:不要只用一個解決方案作出迴應,請解釋爲什麼它提高了程序的速度,不僅是我想這個工作,但我也想學學。
感謝