2021.09.24この記事では、エクセルとpythonを使ってFFT解析について解説していきます。画像を使って詳細解説していきますのでぜひ最後までご覧ください。※「FFT解析くらい知ってるわ。やり方だけ教えてくれ!」という方は最後の方まで飛ばしちゃってください。それではさっそくやっていきましょう。スポンサーリンク目次そもそもFFT解析とは?FFT解析って何につかうの?波の周波数とは?pythonでのFFT解析の実行方法おわりにそもそもFFT解析とは?まずはFFT解析とは何なのかをご紹介します。前提として周期的な波はどんな形であれ、単純なSIN波の足し算で表現できます。以下の波は2SIN(θ)+SIN(2θ)で計算されたもの。以下の波は2SIN(2θ)+SIN(θ)+3SIN(3θ)で計算されたものです。こんな感じでどんな波であっても合成する波を増やしていけば表現することが可能です。今回紹介するFFT解析とは、先ほど紹介した例を逆方向に実施するものだと思えばOKです。何かしらの実験をして以下の波形が得られたとします。この波形をFFT解析すれば、この波は、2SIN(4θ)+SIN(2θ)+SIN(6θ)+2SIN(θ)で表されますね、ということがわかります。ものすごくざっくりとFFT解析とは何か?を説明するとこんな感じです。要は、複雑な波を構成するSIN波を取り出していく作業ですね。スポンサーリンクFFT解析って何につかうの?次に、FFT解析はどのように使われているのかを解説していきます。説明をわかりやすくするために、まずは身近な音の波について解析します。ご存じの方も多いと思いますが、音というのは空気が波のように振動することによって耳に届いています。その波は周波数(波の山と山の間隔)に応じて高い音、低い音というのが決まっています。その波の振幅(山の大きさ)によってどのくらい大きな音かが決まります。次にFFT解析の説明に戻ります。先ほど紹介したFFT解析で得られるSIN波はすべて以下の形で得られていたと思います。A×SIN(Bθ)ここでのAがいわゆる振幅です。(厳密な定義は少し違います。後程、詳細説明します。)つまりFFT解析をすれば、合成された波がどのような周波数と振幅を持っているかを分析することができる、というわけですね。ここまでの話をまとめると、例えば耳に届いている音の波をFFT解析することによって、発生している音の周波数(音の高さ)と振幅(音の大きさ)がどうなっているかがわかります。それらがわかることによって、耳に届いている音の発生源を特定できたり、音の低減につながっていくわけです。工学の分野ではこんな感じでFFT解析が活躍しているわけですね。スポンサーリンク波の周波数とは?先ほどFFT解析によって得れれるA×SIN(Bθ)において、Aが振幅、Bが周波数であると説明しました。Bとかθとかの概念をもったままFFT解析に入ってしまうと混乱を招いてしまいますので、FFT解析におけるBとかθの取り扱いについて解析しておこうと思います。そもそもθというのは高校数学で出てきたいわゆる角度を表すものですよね。一般的に良く見る以下のSIN波も横軸はθだと思います。実世界で観測されるこのような波というのは横軸が時間で現れてきます。この角度θを時間tに変換しなければいけないわけですね。ここで出てくるのが角速度(ω)という概念です。角速度は回転する物体が1秒間に何回転するかという指標ですね。ω=1であれば1秒間に一回転、つまり360deg回るということですね。この考えを使えば、角度軸を時間軸に変更できそうだということがわかると思います。理解を深めるためにこのあたりからはもうエクセルで実演してしまいましょう。以下の絵はω=1においてSIN(2πωt)をグラフ化したものです。数式欄にはこんな感じで記述されています。こんな感じで1秒間で山が1回、谷が1回の波を形成できていることがわかります。周波数とは、1秒間に何回波が到達したか、を示すものですので、この場合、周波数=1の波が計算されているというわけです。つぎにこのエクセルシートのωを2に変更してみましょう。すると1秒間に山が2回、谷が2回になったことがわかります。周波数=2になったというわけですね。ωを3にしてみましょう。1秒間に山が3回、谷が3回になったことがわかります。横軸を時間軸にとった場合、SIN(2πωt)のωが周波数になってくれるわけです。以降で紹介するpythonでのFFT解析ではこのωが出てきます。前置きが長くなりましたが、最後に実際にpythonを使ってFFT解析を実行してみましょう。実行する前に、まずはデータを準備しましょう。先ほど紹介したようにA×SIN(2πωt)の波をAとωを変えながらいくつか作成します。今回は以下のような流れで適当な合成波を作成しました。STEP1_適当なSIN波を作成STEP2_作成したSIN波を合成する合成された波は以下のような時系列データになります。この時系列データをいったんテキストファイルにでも保存しておきましょう。時間軸についてはpython上で指定しますので、波の振幅だけでOKです。(今回はdata.txtという形で保存しています。)事前準備はここまで。それでは実際のコーディングに入っていきましょう。今回は以下のようにpythonの実行コードと先ほど作成したFFT解析するデータが同じフォルダにあることを想定してコードをかいています。data.txtが適当な合成SIN波のデータが入っているファイル、FFT_test.pyがこれから紹介するコードが記述されているファイルです。以下がFFT_test.pyの中身になります。fontsize=14)plt.xlim(0,80000)plt.grid()plt.savefig('graph.jpg',dpi=200)このコードを実行すると、実行フォルダには以下のようなグラフが出力されていました。なにらやそれらしい感じにはなっていますね。もとのエクセルファイルと比較してみましょう。以下がFFT解析に使った波形を作ったときのデータです。(ωとAmpをご確認ください。)両者を比較してみると、山が立つ場所がω、山の大きさがAmpに対応していることがわかると思います。この結果から問題なく合成波の周波数と振幅を算出できていることが確認できたわけです。スポンサーリンクおわりにというわけで今回はpythonを使って、適当な合成波をFFT解析してみました。音響解析の際などにぜひご活用ください。仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。⇒興味をもった方は【ヒガサラ】で検索してみてください。確実にスキルアップできるはずです。最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。コピーヒガシをフォローするスポンサーリンクヒガシヒガサラblogスポンサーリンクpython【python】桁数をそろえた連番を作成する方法!フォルダ作成を例に実演!この記事では、桁数を揃えた連番を作成できるzfillスキルの使い方を解説しています。実際の使用例を交えて、初心者向けに詳細解説!python【Python-OpenCV】画像からランダムに指定サイズで切り抜く方法!こんにちは、ヒガシです。画像認識系の機械学習を実施する際、既存のデータを加工してデータを水増しすることが有効な場合もあります。Augmentationってやつですね。...python【OpenCV】輝度分布テキストデータから画像を作成する方法!画像というのは画素ごとの数値の集まりです。この記事では、数値の行列から白黒画像を作成する方法をpythontとopenCVを使って実演しています。python【python-openCV】画像内を3点クリック⇒なす角を計算する方法!このページではpythonを使って、以下の動画のように画像内のクリックした3点からなす角を算出する方法をご紹介していきます。基本的には画像内を3回左クリックするだけでOKです。※Python(無料のプログラミ...python【python-openCV】画像回転⇒gifアニメを作成する方法!この記事では、python-openCVを使って、ある画像の回転動画を作成する方法をご紹介していきます。初心者向けの基礎スキル解説あり。python【Python-openCV】画像を3×3のパズルにして遊んでみた。こんにちは、ヒガシです。今回はPython-openCVを使って以下の動画のように、任意の画像をパズル化してみましたのでご紹介させていただきます。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。ご指摘ありがとうございます。修正させていただきましました。【python-openCV】背景画像に別の画像を合成する方法!やぎ2023.05.29こんにちは。書く必要があると思います。【python-openCV】背景画像に別の画像を合成する方法!サトシ2023.05.11承知しました。アドバイス本当にありがとうございます。【VBA】大量のファイル名変更!指定したフォルダ内を一括操作!ヒガシ2023.05.11/はフォルダの階層が変わることを意味しますので使えません。substitute関数などを使って別文字に変換してから実行すると良いと思います。【VBA】大量のファイル名変更!指定したフォルダ内を一括操作!サトシ2023.05.10何度もすみません。/を使うと出来ないみたいです。2001-001-1/4とかにしたいのですが、ファイルが見つかりませんとかパスが無効ですとなります。検索タイトルとURLをコピーしました。