В настоящее время я работаю над проектом с использованием python. Моя цель - создать активное устройство для шумоподавления с использованием малины. На данный момент я написал эту программу, которая начинает запись звука, который я пытаюсь отменить, а затем использует ПИД-регулятор для вычисления инвертированной волны в исходную и воспроизводит ее, чтобы отменить ее.Сделать код на 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...')
Обратите внимание: Не только реагировать с раствором, пожалуйста, объясните, почему это улучшит скорость работы программы, а не только я хочу, чтобы это работало, но я также хочу, чтобы учиться.
Благодаря