Примените фильтр высоких частот к файлу WAV с помощью scipy.signal.firwin - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь применить фильтр верхних частот (обрезание: 1000 Гц) к монофоническому 16-битному WAV-файлу 44,1 кГц с scipy.signal.firwin:

from scipy.io import wavfile
from scipy import signal
import numpy as np

sr, x = wavfile.read('test.wav')      # 16-bit mono 44.1 khz

b = signal.firwin(5, cutoff=1000, fs=sr, pass_zero=False)

x = signal.lfilter(b, [1.0], x)

wavfile.write('test2.wav', sr, x.astype(np.int16))

Результат полностью аналогичен вводу (но не совсем равен), т. Е. Верхний проход не был применен.

Что я должен изменить, чтобы этот высокочастотный ход с firwin работал?

1 Ответ

0 голосов
/ 01 июня 2018

Кажется, проблема только в количестве коэффициентов фильтра: 5 было слишком мало.

С

b = signal.firwin(101, cutoff=1000, fs=sr, pass_zero=False)

это работает намного лучше.

Примечание: звук будет почти нулевым во время первых 101 сэмплов, поэтому мы, вероятно, должны заполнить WAV-файл нулями в начале и в конце, затем применить фильтр, а затем обрезать файл, чтобы удалить части, заполненные нулями.

...