Pythonで学ぶ信号処理!振幅変調のサイドバンドを観察してみる

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

信号の時間波形が振幅変調していると、フーリエスペクトルにサイドバンドが発生する事が知られています。ここでは振幅変調波の概要と、Pythonを使って様々な条件のフーリエスペクトルを計算し、サイドバンドの特性を見ていきます。

こんにちは。wat(@watlablog)です。本日はPythonプログラミングというよりも、Pythonを使って分析する回です!
ここでは振幅変調波を調べてみます

振幅変調波の概要

変調の無い波形の式と図

振動の波形を時間波形で表現すると、最も簡単な波形は正弦波です。

以下の式は余弦で書いていますが一緒です。振幅\(A\)、振動数\(f\)が決まれば、時間\(t\)で決まる信号\(s(t)\)が決まります。

\[ s(t)=A \cos (2 \pi f t) \]

上式の時間波形は下図左ですが、この波形をフーリエ変換して得られるフーリエスペクトルは下図右のように単一のピークが立ちます。

変調の無い波形の例(時間波形とスペクトル波形)

変調波形の式と図

一方、振幅変調AM:Amplitude Modulation)波とは、以下の図に示すように波の振幅成分が変動する波形の事です。

振動数\(f_{c}\)を持つ元の波形(キャリア波形)に対して振幅が別の振動数\(f_{m}\)で変動していると、この振幅変調波のフーリエスペクトルは下図右のようにピークが3つ発生します。

主のピークはもちろん\(f_{c}\)で立ちますが、その両隣にあるピーク(これをサイドバンド(側帯波)と呼ぶ)は\(f_{c} \pm f_{m}\)と\(f_{c}\)を中心として均等に離れた位置に発生する特徴を持ちます。

さらにそのサイドバンドは、変動している波の変調指数\(m\)の半分となる特徴も持ちます。

振幅変調波形の例(時間波形とスペクトル波形)

この変調指数は\(0\leq m\leq 1\)の範囲をとります。\(m=0\)の場合は変調の無い波形、\(m=1\)の場合に元の波形が0になるまで変動する事になります(下図)。

変調指数とサイドバンドの関係

図を先行して説明しましたが、振幅変調波の式が以下になります。振幅が変動するのでキャリア波の手前にかかる振幅成分にさらに\(\cos\)がかかっています。

\[ s(t)=A \left \{1 + m \cos(2 \pi f_{m} t) \right \} \cos (2 \pi f_{c} t) \]

Pythonで振幅変調波を分析するコード

Advertisements

全体コード

今回の振幅変調の波形を分析するPythonコードを以下に示します。といっても、当ブログ的には新しい事は特に無く、過去記事のコードを寄せ集めただけです。

振幅変調の特徴を良く捉えるために、時間波形の包絡線(エンベロープ)をヒルベルト変換を使って求めていたり、フーリエスペクトルを得るためにSciPyのfftpackを使っていたり、ピークをmatplotlibのグラフに自動プロットするためにピーク自動検出をしていたりするコードを流用しています。

参考の記事は以下にリンクしておきますので、是非ご覧下さい。

PythonでFFT実装!SciPyのフーリエ変換まとめ
Pythonでヒルベルト変換!時間波形の包絡線を求める方法
PythonでFFT波形から任意個数のピークを自動検出する方法

変調指数\(m\)を変えてみる

先ほどのコードを使って、パラメータスタディをしてみます。まずは変調指数\(m\)を0.1, 0.5, 0.9と変化させていきます。

以下がその結果です。\(m\)の値によって時間波形の変動の大きさが変わっている事がわかります。また、フーリエスペクトルは、主である\(f_{c}\)周波数の振幅成分は変わっていないのにも関わらず、サイドバンドの振幅が上で説明した法則である\(\frac{m}{2}\)に従っている事も確認できました。

振幅変調波に変調指数mが与える影響

変調周波数\(f_{m}\)を変えてみる

次に、変調周波数\(f_{m}\)を変えてみます。以下の結果を見ると、時間波形の振幅成分の変動具合が変化している事がわかります。

フーリエスペクトルは各ピークの振幅は変化しないにも関わらず、サイドバンドの主ピークからの離れ具合が変わっている事が確認できました。

その関係は\(f_{c} \pm f_{m}\)に従っています。

振幅変調波に変調指数fcが与える影響

面白いですね。

まとめ

Advertisements

本記事ではショートTipsとして、これまで学んだPythonの信号処理技術を使って、振幅変調波の振る舞いを調べてみました。

その結果、変調指数や変調周波数によるフーリエスペクトルの変化は式で説明可能である事が確認できました。

Pythonは特にプログラミングの知識があまりなくても、高度な科学技術計算ができるようになる特徴があります。そのため、教科書に載っている式でもPythonで演算をする事で理解を深めるという事も可能です。

是非みなさんも色々な分析にPythonを使ってみて下さい。

今回は分析を中心にPythonを使ってみました!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!

SNSでもご購読できます。

コメント

コメントを残す

*