как воспроизвести звук с микрофона после Fast Furier Transform (Python)

В Python необходимо в звуке от микрофона отфильтровать часть низких частот и воспроизвести отфильтрованный звук. Безусловно всё делаю неправильно. Перед проверкой кода, настоятельно рекомендую выкрутить громкость звука на минимум.

import pyaudio
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import warnings
warnings.simplefilter("ignore", DeprecationWarning)
import numexpr as ne
import time

CHUNK = 1024
RATE = 10000
WIDTH = 2
CHANNELS = 1

data_end = np.zeros(CHUNK//2)  
data2 = np.zeros(CHUNK//4) 

p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(WIDTH),
    channels=CHANNELS,
    rate=RATE,
    input=True,
    output=True,
    frames_per_buffer=CHUNK//4)

a = input("Сделайте громкость на минимум, т.к. будет проигрываться громкий шум. Для продолжение нажмите на кнопку Enter ") 

while True:
    data1 =[]
    data1.append(stream.read(CHUNK//2))
    data1[0] = np.fromstring(data1[0], np.int16)

    # Чтобы длина массива данных не уменьшилась в два раза (с 1024 до 512), 
    # массив с данными соединяю с пустым массивом такой же длины:
    data1[0] = np.concatenate((data1[0], data_end), axis=None)

    sound = []
    sound = list(data1[0])
    sound = np.asarray(sound, dtype='float64')
    sound = sound[0:CHUNK]
    
    # Преобразование Фурье:
    sound_fft = np.fft.fft(sound)
    sound_fft = sound_fft.real
    sound_fft = abs(sound_fft[0:CHUNK//2])
    
    # Фильтр низких частот
    sound_fft[0:10] = 0
        
    # Обратное преобразование Фурье
    sound_ifft = np.fft.ifft(sound_fft)
    
    # Веществ.
    sound_ifft = sound_ifft.real
    
    # Восстановление сигнала, но с длиной в 4 раза меньше первоначальной (не 1024, а 256)
    data2 = sound_ifft[0:CHUNK//4]
    data2[0] = 0

Ответы (1 шт):

Автор решения: CrazyElf

Такие вещи ищутся элементарно. Просто гуглите "numpy fast fourier transform", находите документацию на используемую вами функцию np.fft.fft. В документации после описания функции всегда идёт раздел See also он часто бывает очень полезным. И что мы там видим буквально на второй же строчке:

ifft The inverse of fft.

Это и есть обратное преобразование Фурье. Попробуйте использовать эту функцию np.fft.ifft.

→ Ссылка