2012-01-17 6 views
1

私はアレイ[5000] [440]のようなものを最初から5000msと440hzの意味でアクセスしたいと思います。この位置に周波数の振幅の値を与えます。pythonを大きな(2時間)ウェーブファイルにロードし、内容を時間 - 周波数配列に変換するにはどうすればよいですか?

私はここにそのようなものを見つけることができませんでした、もし私がそれを指摘してください。

+1

私はこれがあなたの方法のほとんどを得ると思いますか? http://stackoverflow.com/questions/3694918/how-to-extract-frequency-associated-with-fft-values-in-python – gravitron

+0

さて、まだ残念ながら。彼らが提供するものと私が望むものへのリンクが不足しています。最初のサンプルは、例えば "(0.27440469538 + 0.908302073062j)* exp(2πit * 0.263687742847)"というように私に与えられます。それは何を言わなければならないのですか? – Zurechtweiser

+0

投稿したgravitronを完了するには:http://stackoverflow.com/questions/2063284/what-is-the-easiest-way-to-read-wav-files-using-python-summaryこれらの2つのリソースで、あなたが望むことができるはずです。 – LBarret

答えて

2

基本的にはspectrogramが必要です。始めるには、サウンドファイルを1分の1秒の小さなチャンクで1分の1秒ごとにFFTします。 (もちろん、5000msと440Hzを調べるには、適切なチャンクのFFTに行きます)

+0

実際に私は声を検出したい。しかし、まず私はいくつかのパターンを見つける必要があります。利用可能な音声検出がある場合、私はそれをスキップすることができます。 – Zurechtweiser

+0

「声を検出する」とはどういう意味ですか?暗騒音があるときと声があるときを識別することを意味しますか? – tom10

+0

はい、それは私の言いたいことです。認識ではなく音声認識。検出のみ。 – Zurechtweiser

0

あなたはいくつかの誤解のもとで動作しています。

特定の時点で波の周波数を得ることはできません。関心のあるポイントの前後にある多くのポイントを含む、時間のウィンドウを選択する必要があります。より多くのポイントを含めるほど、あなたの周波数内訳にはより多くの解決策があります。これらの点で何らかの種類のウィンドウ関数を実行してからFFTを実行する必要があります。

FFTの結果が得られると、数値は周波数に対応しますが、単純な関係にはなりません。各出力に対応する周波数は、信号のサンプリング周波数とサンプル数を合わせてすでに決定しています。私は手元に変換式を持っていないのではないかと心配しています。各周波数には実数と虚数の2つの成分があり、振幅はsqrt(r**2+i**2)になります。

+0

sqrt(r ** 2 + i ** 2 )Pythonコードで意味ですか? http://upload.wikimedia.org/wikipedia/de/math/d/f/4/df48cdb63516e0039cdeae87c9608c63.pngについてお話ししますか?最高、リチャード。 – Zurechtweiser

+0

@RichartBremer、はい、それは私が意味していたものです - 複素数の絶対値。 –

+0

申し訳ありませんが、あなたの答えは私を助けてくれました。私の次の目標は、私が得た結果を使って音声検出を行うことです。あなたが認識していることのための実績のあるアプローチはありますか? – Zurechtweiser

0

飛行中に時間と周波数を変換できます。さらなる使用のためにいくつかの値を保存するには、__getitem__とおそらくlru_cacheを使用する必要があります。

レッツは、フーリエあなたはフーリエ変換からの時間にアクセスするために同じものを適用することができ、この

class Fourier(): 
    def __init__(self,a=10): 
     self.a=a 
    def __getitem__(self, index): 
     #this is function that calculates and returns value of my_furier 
     return self.a+index 

t=Fourier() 
print(t[12.4]) 

のようなものであると言います。したがって、有効な時間を選択してその時間を返すことができる新しい時間オブジェクトを作成するか、何らかの補間を使用してテーブルにない値を返すことができます。

RAMにすべての値を格納できない場合は、標準ライブラリのshelveモジュールを使用してディスクから項目を格納してアクセスすることができます。必要に応じてインタフェースの補間補間を適用できます。

関連する問題