前回は、AM変調波を作るところまでやりました。
今回は、この波形をFFTで周波数成分表示をしてみます。

まずは、Xcos 上で得られた波形データをコンソール上で扱えるように出力します。

イメージ 1

「To workspace(TOWS_c)」を追加します。パラメータは以下のようにして下さい。
イメージ 2
1クロック=0.000625secで、これを2秒間シミュレーションしていますから、2/0.000625 クロックとなって、データサイズ=「Size of buffer」は 3200 となります。
変数名はここでは「AMmodulation」としました。

再度、シミュレーションを実行したら、コンソール上で確認してみます。

-->AMmodulation
 AMmodulation  =
 
   values: [3200x1 constant]
   time: [3200x1 constant]

何を表示しているのか何となく見当つきますね。ただ、変数としての正体はよく分かりませんね。これは別の機会にコメントしておきます。

今度は、SciNotes を起動します。コンソール画面で(アプリーケション)→(
SciNotes)とすれば起動できます。その他の詳しい使い方は、以前に貼りましたリンクを参考にして下さい。

では、FFT表示のために以下のコードを
SciNotes 上に書きます。

*** ここから ***

//AM変調信号をXcosからexportしてFFT表示をする。

AMwave=getfield(3,AMmodulation)
AMwave1=AMwave'
//
転置行列に変更

time_value=getfield(4,AMmodulation)
cycle=time_value(2)-time_value(1)
//
サンプル間隔を検出

N=size(AMwave1,'c')
f=1/cycle*(0:(N/2))/N
//
サンプリング周期とデータ数からFFTマップに対する横軸の値を算出
//
1サンプル周期の逆数掛けるサンプル数で最大周波数を計算

n=size(f,'*')

scf
(1);
clf(1)
plot(AMwave1)
//
グラフ1に波形

scf(2);
clf(2)
AM1=fft(AMwave1)
plot2d(f,abs(AM1(1:n)))
//
グラフ2にFFT結果

*** ここまで ***


手順ですが、正体不明の変数「AMmodulation」の中から、データ値のみ取り出します。次に転置行列に変換します。
サンプリング周期とデータ数から周波数軸データを作成します。データ数は size コマンドで拾い、サンプル周期は最初の値と2番目の値の差分計算しています。

出力結果です。
イメージ 3

FFT結果です。
 
イメージ 4
拡大してみます。
イメージ 5

ということで、搬送波 50Hz の前後に、信号波を含んだスペクトラム 49Hz と 51Hz があるのが確認できました。三角関数の公式は正しかったようです。(笑)

次回は、こうして得られた AM変調波を復調(再生)してみたいと思います。