Pythonでチャープ信号!周波数スイープ正弦波の作り方

  • このエントリーをはてなブックマークに追加

様々な種類の信号を生成できるようにしておくのは、シミュレーション、または実験を行う上で有用です。正弦波はよく利用されていますが、ここではPythonを使って周波数が時々刻々と変わる周波数スイープ正弦波を作る方法を解説します。

こんにちは。wat(@watlablog)です。
様々な科学技術の分野で、信号処理は効果的な解決策を与えます。ここでは波形生成として、チャープ信号をPythonで作る方法を紹介します

チャープ信号とは?

チャープ信号とは、聞きなれない方も多いと思いますが、要は周波数が時間で変化する正弦波のことです。

このページで最終的に作る信号は以下の図のような正弦波です。

chrip信号

これがチャープ信号です。正弦波の周波数が低周波から高周波まで変化しているのがわかると思います。

シミュレーションでも実験でも、モデルの特性を同定するために、加振信号を与えて応答を見ることは、技術者であればよくやることだと思います。

では、この周波数スイープ正弦波の作り方を説明していきます。

Pythonでチャープ信号を作る

まずは基本のコードを書いてみる

以下がチャープ信号の生成プログラムです。正直y=の部分しか無いのでめちゃくちゃ簡単ですが、chirp関数は時間軸配列tを使って、f0で指定した開始周波数からf1の周波数まで周波数を変化させる関数です。f1の周波数に達する時間はt1で指定します。

上のチャープ信号は1Hzから20Hzの周波数スイープをしていますが、f0を20Hz、f1を1Hzとすることで逆方向のスイープをさせることも可能です。

20hzから1Hzのチャープ信号

FFTして周波数波形を見てみる

PythonでFFT!SciPyのFFTまとめ」でデータを自由にFFTすることができるようになったので、チャープ信号の周波数波形を見てみましょう。

以下の図は100Hzから5000Hzまで周波数スイープした波形です。周波数的に非常にフラットな特性を持っていることがわかりました。

以下は周波数波形まで含めて計算するコードです。実行することで上のグラフが表示されます。先ほどはchripを直接importしていましたが、FFTでも窓関数でsignalを使っているので、importはsignalのみとし、チャープ信号はsignal.chripで作成しています。

FFTの詳細は「PythonでFFT!SciPyのFFTまとめ」を参照下さい。

まとめ

周波数をスイープアップ、もしくはスイープダウンさせるチャープ信号生成の方法をPythonで示しました。

Pythonのscipyを使えば簡単に信号を生成できることを確認することができました。

生成したチャープ信号の周波数特性はフラットであることを確認しました。

チャープ信号は関数で一発生成できましたね!

Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメント

コメントを残す

*