Кажется, проблема только в количестве коэффициентов фильтра: 5 было слишком мало.
С
b = signal.firwin(101, cutoff=1000, fs=sr, pass_zero=False)
это работает намного лучше.
Примечание: звук будет почти нулевым во время первых 101 сэмплов, поэтому мы, вероятно, должны заполнить WAV-файл нулями в начале и в конце, затем применить фильтр, а затем обрезать файл, чтобы удалить части, заполненные нулями.