まえがき
大学は約10年前に残っていましたが、この間ずっとノスタルジックな気持ちと科学への憧れを残していません。 私は何かを終えなかった、または私たちが速すぎて何かを走ったという感じがあります。 幸いなことに、最新のプラットフォームにより、一生学生のように感じることができます。
OpenuプラットフォームのLETIの「デジタル信号処理の基礎」コースの第3研究所から、この記事を書くように促されました。
動作原理
電話機のボタン(またはここ )を押すと、各キャラクターに固有の周波数、または2つの周波数があり、この組み合わせがキャラクターを一意にエンコードしていることがわかります。
私たちのタスクは、ノイズの多い信号から2つの最も強い周波数を抽出し、表に従って何らかの文字をエンコードしているかどうかを確認することです。
1209 Hz | 1336 Hz | 1477 Hz | 1633 Hz | |
---|---|---|---|---|
697 Hz | 1 | 2 | 3 | A |
770 Hz | 4 | 5 | 6 | B |
852 Hz | 7 | 8 | 9 | C |
941 Hz | * | 0 | # | D |
以来、処理を使用しました マイクとフーリエ変換を操作するためのすべてのプリミティブがあります。
アルゴリズムは次のとおりです。
- 信号をスペクトルとして想像すると、 fft.analyzeはfloat []配列を返します
- 最大振幅に対応する参照番号n 1を見つける
- 2つの近い周波数をキャッチしないように、彼と近隣のすべてを賢明にツェルルします
- 残りの振幅の最大値に対応する2番目の参照番号n 2を見つける
- 番号n 1およびn 2により、式に従って対応する周波数を見つけます。
ここで、f nはサンプリング周波数:44100 Hz、Nはサンプル数(次数2)
- テーブルのどの周波数が見つかった周波数に対応するかを決定し(±35 Hzの許容誤差で)、目的のシンボルを見つけます
どうした
ソースからスタンドアロンjarの形式でプログラムをビルドおよび実行できます。電話またはこのページを使用してサウンドを生成できます。

次のステップでは、同じことをArduinoに実装します。