携帯電話のマイクから入力を受け取り、周波数を計算するアプリを作成しました。Jtransform ライブラリを使用して FFT を計算し、周波数を計算しています。
この件に関する以前の質問に従いましたが、これが私が選択した方法です。
sampleSize = 1024
sampleRate = 8000
audioData is the array I have filled with mic input
fft.complexForward(audioData)
このメソッドは fft を計算し、実数と虚数を順番に格納します
re[] = real number array
im[] = imaginary number array
magnitude[i] = math.sqrt((re[i]*re[i])+(im[i]*im[i]))
次に、最大の大きさ/ピークを取得します
Frequency = sampleRate * peak/sampleSize
現在、この数値は急速に変化しており、一定の範囲内にとどまることさえありません (私の口笛/ギターの弦)
既知のギター弦周波数の配列があります (オープン E 弦は 82.407 Hz)。計算値は 1 秒間に何度も変動するため、範囲内外でこれらを比較することはまったくできません。
より安定した周波数を得るためにこの問題に適用できる方法はありますか? それとも、これはギター弦の周波数を取得する正しい方法ですか?
ありがとうございました