воссоздание файла WAV - PullRequest
       15

воссоздание файла WAV

0 голосов
/ 24 апреля 2020

Я довольно новичок в python и в FFT, поэтому заранее извиняюсь - я пытаюсь взять WAV-файл и воссоздать его только с определенными частотами (отфильтровать нежелательные частоты)

Я могу построить все визуально, но изо всех сил пытаюсь воссоздать воспроизводимый WAV-файл из результата. Я минимизировал свою проблему - если я беру оригинальный сигнал, я могу воссоздать файл WAV, хорошо. Если я запускаю сигнал через rfft, а затем сразу через irfft и пытаюсь воссоздать WAV-файл из результата, файл создается, когда я пытаюсь его воспроизвести (Windows 10), я получаю ошибку

Этот элемент был закодирован в формате, который не поддерживается.

Код, который я использую (уменьшен до минимума)

fs_rate, signal = wavfile.read(filename)
FFT = scipy.fft.rfft(signal)
recreated_signal = scipy.fft.irfft(FFT)
scipy.io.wavfile.write('recreated file1.wav',fs_rate,signal)
scipy.io.wavfile.write('recreated file2.wav',fs_rate,recreated_signal)

Я заметил одну вещь: что первый созданный файл равен 5619 КБ (чуть меньше размера исходного файла), а второй созданный файл - 22 473 КБ

Чего мне не хватает?

1 Ответ

1 голос
/ 24 апреля 2020

Вы, вероятно, читаете 16-разрядные целочисленные сэмплы со знаком и записываете 64-разрядные сэмплы с двойным плавающим числом (результат функции scipy fft), в результате чего получается файл в 4 раза больше.

Проверьте Тип образца в формате WAV исходного файла и сравните его с длиной вектора и типом цифр c двух ваших сигналов scipy.

...