2016-05-10 12 views
2

wavファイルで5Khzを超える周波数をフィルタリングする必要があります。私はいくつかの研究を行い、バターワースアルゴリズムについては発見しましたが、適用できませんでした。wavファイルの上限周波数をフィルタリングする(ローパスフィルタ)

モノラルチャンネルのwavファイルがあるとします。私はそれを読んでから、ローパスフィルターを使って5Khz以上の周波数をフィルターしたいと思っています。

これまでのことはこれです。私はファイルを読んで、フレームを読み、数値に変換します。

from pydub import AudioSegment 

song = AudioSegment.from_wav("audio.wav") 
frame_count = int(song.frame_count()) 
all_frames = [song.get_frame(i) for i in range(frame_count)] 

def sample_to_int(sample): 
    return int(sample.encode("hex"), 16) 

int_freqs = [sample_to_int(frame) for frame in all_frames] 

変更値を5000から0にすれば十分ですか?私はそれが道だとは思わない、私は非常に混乱しており、何か助けを聞いてうれしい。

+0

あなたが必要とする値よりも> 5000の値を変更することが、あなたの頭の上にあるので、サンプリング理論を読むべきです。 –

+0

それを自分で実装したいのであれば、ある種のカーブをFFTに適用してから逆FFTを実行することができます。しかし、それはそれを行うのはとても素朴な方法です。 – Linuxios

+0

5kHzまでのフィルタリングは非常に正常です。高齢者は約12kHz、若者(今日ではない)から18kHzまで、電話会話(POTS)は約3-4kHzに制限されています。あなたがもっと学びたいなら、FFTでバンドパスフィルタリングをするために他の人のために書いたこの例を見てください。しかし、実用的な目的のために私はLinuxiousの答えに行きます。 http://stackoverflow.com/questions/36968418/python-designing-a-time-series-filter-after-fourier-analysis/36975979#36975979 – roadrunner66

答えて

1

PydubはLOPASSフィルタを含む - あなたはそれを自分で実装するために必要はありません。

from pydub import AudioSegment 

song = AudioSegment.from_wav("audio.wav") 
new = song.low_pass_filter(5000) 

それはeffects.pyに「文書化」です。

関連する問題