Задать вопрос
@Albadur

Почему после прямого и обратного преобразования Фурье шум только добавляется?

Надо отфильтровать wave-файл. С помощью python делаю преобразование Фурье туда и обратно.
Спектр нисколько не меняю, ожидаю что получу такой же сигнал. Только вот получается сигнал с бОльшим количеством шумов.
Частота точек в исходном и конечном файлах одинакова. Для проверки вычитал две аудиограммы друг из друга, получал аудиограмму, по амплитуде в 10^12 раз меньше. Поэтому вывод что они одинаковые. Но после упаковки в wav-файл звучат они совершенно по-разному.
Где ошибка в размышлениях?
Подскажите если есть идеи, знания, замечания по фильрации звуковых файлов

#!/usr/bin/env python
#coding=utf8
import wave
from numpy import array, arange, abs as np_abs
from numpy.fft import rfft, rfftfreq

FD = 16000

inputname = 'input.wav'
outname = 'filtered_noise.wav'
wav = wave.open(inputname, mode="r")
(nchannels, sampwidth, framerate, nframes, comptype, compname) = wav.getparams()
print(wav.getparams())
content = wav.readframes(nframes)
sample = np.fromstring(content, dtype=np.int32)
channel = sample[0::1]
sig = channel
N = len(channel)

spectrum = rfft(sig)
plt.plot(rfftfreq(N, 1./FD), np_abs(spectrum)/N)

filtered = np.fft.irfft(spectrum, N)

plt.plot(arange(N)/float(FD), filtered-sig, 'r')
plt.title(u'Сигнал после фильтрации')
plt.grid(True)
plt.show()

wav_file = wave.open(outname, "w")
wav_file.setparams(wav.getparams())
wav_file.writeframes(filtered.tobytes('C'))
wav_file.close()
  • Вопрос задан
  • 212 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы