録音した人の声が高周波かどうかをチェックするアンドロイドアプリを作ろうとしています。検索後、FFT アルゴリズムを使用する必要があることがわかりましたが、問題は、アルゴリズムへの入力として渡す必要がある配列値を取得する方法です。誰でも助けてもらえますか?
2 に答える
「高周波を含む」とは何かを定義しており、これを測定するだけでよい (グラフで周波数成分を視覚化する必要がない) と仮定すると、実際には FFT を計算する必要はありません。
信号の RMS 値 (総エネルギーの尺度) を計算し、(時間領域で) データにローパス フィルターを適用し、フィルター処理された信号の RMS 値を再度計算します。エネルギーの損失を比較することは、最初のエネルギー値にどれだけの高周波成分が関与しているかの尺度です。
コメントへの返信:
処理するにはデータが必要です。おそらく私はあなたの質問を理解していませんか?何の「正確な値を取得」したいですか? 「記録部分を完了した」と述べたので、メモリに信号が保存されていると仮定します。次のいずれかを行うために信号の総エネルギーを計算する必要があります。フィルタリング後のエネルギーの変化を計算するか、B)エネルギーを事前定義されたハードコードされた値と比較します(悪い考えです)。
いずれにせよ、測定値/値のみが必要な場合は、時間領域でこれを行う必要があります。Parseval の定理で述べられているように、信号のエネルギーを計算するために、CPU を集中的に使用する処理を実行したり、周波数領域に移動したりする必要はありません。http://en.wikipedia.org/wiki/Parseval's_theorem _
詳細:
ユーザーの声を録音する (信号のデータを収集する) ときは、データが失われていないこと、およびメモリ (配列型オブジェクト) に適切に格納されていること、およびこの配列への参照があることを確認する必要があります。データが収集されたら、信号を値に変換する必要はありません。値のシーケンスとして既に保存されています。したがって、「どのくらいの高周波があるか」の尺度を得るために、いくつかの計算を実行する準備が整いました...
RMS (二乗平均平方根) 値は、信号の総エネルギーを測定する標準化された方法です。「すべての値の二乗の平均の平方根」をとります。http://mathworld.wolfram.com/Root-Mean-Square.htmlを参照してください。
RMS はすばやく簡単に計算できますが、信号全体、低周波成分、および高周波成分を合わせたエネルギーが得られ、高い RMS 値が大量の高周波成分によるものなのか、低周波数成分によるものなのかを知る方法はありません。周波数成分。したがって、高周波成分を除去して RMS 値を再度計算し、その際に総エネルギーがどれだけ変化したかを確認することをお勧めします。初期の「生の」RMS値に高周波がどの程度影響したか。2 つの値を除算することが、高周波比率の測定値です。
ローパス フィルタリングを実行するには、周波数値 Fcut を選択し、これを超えるものはすべて「高」と見なす必要があります。次に、カットオフ ポイントを Fcut に設定してローパス フィルターを適用します。フィルターの適用は、時間領域で次のように実行されます。畳み込みの手段。