2019年12月20日pythonで簡単な音声認識をやってみたいぞ。そもそも何から始めればいいのかしら。今回は,基本的な音声認識をpythonで行う方法をお伝えしていこうと思います。本記事はpython実践講座シリーズの内容になります。その他の記事は,こちらの「Python入門講座/実践講座まとめ」をご覧ください。9.リスト...コーディングに関して未熟な部分がたくさんあると思いますので,もし何かお気づきの方は教えていただけると幸いです。誤りについてもご指摘していただけると非常に助かります。お題FFTをpythonで実装してみよう。流れ今回対象とするデータは「あいうえお」ではなく,データ長が1024である合成サイン波とします。DFTのデータ長が2のべき乗のときに,効率的な再帰計算により高速フーリエ変換が可能になるからです。実際に使われているFFTには様々なアルゴリズムが存在し,データ長が2のべき乗でない場合にも適用可能になっています。実際に合成サイン波を作ってみましょう。y)合成サイン波FFT(高速フーリエ変換)詳しい導出は省略させていただきますが,簡単に導入しておきます。n}{N}}=W_N^{n}$とおきます。すると,離散フーリエ変換は以下のように表されます。W_N^{n\omega}\end{eqnarray}そして,ここから少し天下り的なのですが,離散フーリエ変換の式を偶数番目のデータ点で行った場合と,奇数番目のデータ点で行った場合に分けます。データ長が2のべき乗であるから,半分ずつに分けられますね。W_{\frac{N}{2}}^{n\omega}\end{eqnarray}このとき,$X_{even}[\omega]$,$X_{odd}[\omega]$,$W_N^{n}$に規則性が現れます。この規則性こそが高速フーリエ変換を「高速」たらしめる所以です。-W_N^{n+\frac{N}{2}}\end{eqnarray}以上を踏まえると,離散フーリエ変換を再帰的に計算することができます。離散フーリエ変換を奇数部分と偶数部分で表してみましょう。偶数部分はインデックス0から始まりますので,偶数部分に奇数部分の変形版を足し合わせることで元の離散フーリエ変換を実現するという方針です。X_{odd}[\omega]W_N^{n}\end{eqnarray}この式に先ほどの周期性を適用すると,高速フーリエ変換が完成します。前半部分と後半部分が同時に求まっていくイメージです。Y_real)実部の可視化DFTと同じ結果になりましたね。Y_imag)虚部の可視化DFTと同じ結果になりましたね。ちなみに,「np.fft.fft」で試しても全く同じ結果が得られます。高速逆フーリエ変換せっかくなので逆変換をしてみましょう。高速フーリエ変換の逆変換は非常に単純です。逆変換は,以下のように定義されます。W_N^{n\omega}\end{eqnarray}この式を変形していきます。W_N^{-n\omega}}\end{eqnarray}つまり,「FFTの結果の複素共役を取り」「普通のFFTを行い」「その結果を再び複素共役にして」「Nで割る」ことによって逆変換が可能になります。実際に行ってみましょう。x.conjugate()今回は見やすいようにデータを作り直してみます。時間比較せっかくなので,DFT・FFT・np.fft.fftの速度を比較してみましょう。t6-t5print("経過時間:{elapsed_time}")Output:経過時間:3.5613720417022705経過時間:0.04334902763366699経過時間:0.00020003318786621094圧倒的にDFTの計算が遅いですね。今回のFFTの実装ではfor文を使ってしまいましたので,nmpyのfftよりも時間がかかってしまっています。Beginaidアカデミック【超初心者向け】ランク学習(LTR)とは。コメントをキャンセルメールアドレスが公開されることはありません。付いている欄は必須項目です過去問解説販売中!zuka京都大学で機械学習を学んでいます。iBTの出題形式が大幅変更!新テストの注意点まとめ。