Обратное преобразование Фурье RFFT Python

В Python провожу прямое преобразование Фурье синусоиды (rfft), получаю спектр. После этого провожу обратное преобразование спектра (irfft). Получаю первоначальную синусоиду. Всё работает, но к сожалению в моём алгоритме требуется применить модуль к спектру. После этого непонятно как корректно провести обратное преобразование Фурье, чтобы получить первоначальную синусоиду. P.S. В моём случае работаю не с синусоидой, а со звуком. Синусоида взята для упрощения.

import numpy as np
import scipy
import matplotlib.pyplot as plt
from scipy.fft import rfft
from scipy.fft import irfft

amplituda = 200
shirina = 20
CHUNK = 1024
x1 = np.arange(CHUNK)
x2 = np.arange(CHUNK//2)
y = []
for i in range(len(x1)):
    y.append(np.sin(x1[i]/shirina)*amplituda)

fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax3 = fig.add_subplot(2,2,2)
ax2 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)

# Преобразование Фурье
y_rfft = rfft(y)

# Обратное преобразование Фурье без использования модуля
y_irfft = irfft(y_rfft)

# Обратное преобразование Фурье после использования модуля
y_irfft_abs = irfft(np.abs(y_rfft))

a = ax1.plot(x1, y, color='green')
a = ax2.plot(x2, y_rfft[1:513], color='green')
a = ax3.plot(x1, y_irfft, color='green')
a = ax4.plot(x1, y_irfft_abs, color='green')

a = ax1.set_title('Исходный сигнал', fontsize = 8)
a = ax2.set_title('Спектр (rfft)', fontsize = 8)
a = ax3.set_title('(irfft) без модуля "np.abs(y_rfft)"', fontsize = 8)
a = ax4.set_title('(irfft) с модулем "np.abs(y_rfft)"', fontsize = 8)

a = plt.show()

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