Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

複素包絡線を使用した変調と復調

この例では、基本的な通信プロセスのさまざまなステップをシミュレートします。通信システムでは、情報のチャンクがより高い "搬送周波数" に変調され、変調された信号がノイズの多い物理チャネルで送信され、ノイズの多い波形が受信され、受信信号が復調されて初期情報が再構成されます。

実数値の信号 s(t) で運ばれるすべての情報は、対応するローパス "複素包絡線" で表すことができます。

s(t)=Re{g(t)ej2πfct}=i(t)cos2 π fct-q(t)sin2 π fct.

この方程式は、以下を意味します。

  • fc は搬送周波数。

  • Re は複素数値の量の実数部。

  • g(t)=i(t)+jq(t)s(t) の複素包絡線。

  • i(t) は複素包絡線の "同相" 成分。

  • q(t) は複素包絡線の "直交" 成分。

複素包絡線は搬送周波数に変調され、チャネルを介して送信されます。受信機では、ノイズの多い波形が搬送周波数を使用して復調されます。搬送周波数による位相変動は予測可能であるため、情報を伝達しません。複素包絡線には位相バリエーションは含まれず、より低いレートでサンプリングできます。

複素包絡線が正弦波とチャープで構成される信号を生成します。同相成分は、周波数が 19 Hz の正弦波です。直交成分は、周波数が 61 Hz ~ 603 Hz の範囲の二次チャープです。信号は 2 kHz で 1 秒間サンプリングされます。

fs = 2e3;
t = (0:1/fs:1-1/fs)';
inph = sin(2*pi*19*t);
quad = chirp(t-0.6,61,t(end),603,"quadratic");

複素包絡線を計算し、サンプル レート fs の MATLAB® timetable として保存します。

env = inph + 1j*quad;
g = timetable(env,SampleRate=fs);

"信号アナライザー" を開いて、"ワークスペース ブラウザー" から信号テーブルに複素包絡線をドラッグします。ディスプレイには、包絡線の同相成分と直交成分が、同じ色相と彩度を持ち、輝度が異なるラインとして表示されます。最初のラインの色は同相成分を表し、2 番目のラインの色は直交成分を表します。

[表示] タブで、[スペクトル] リストから Spectrum を選択します。アプリに信号スペクトルを含む座標軸のセットが表示されます。[パナー] をクリックしてパナーをアクティブにし、300 ms ~ 700 ms のズーム ウィンドウを作成します。複素包絡線には両側スペクトルがあり、複素包絡線の同相成分と同じ色のラインとして表示されます。このスペクトルは 0.19 kHz にインパルスがあり、周波数が高くなるにつれて小さくなる幅広のプロファイルを持ちます。スペクトルの負の周波数領域は、正の周波数領域の鏡像です。

200 Hz の搬送周波数を使用して信号を変調します。変調された信号のパワーが元の信号のパワーと等しくなるように 2 で乗算します。S/N 比が 40 dB となるホワイト ガウス ノイズを付加します。

fc = 200;
mod = sqrt(2)*real(env.*exp(2j*pi*fc*t));

SNR = 40;
mod = mod + randn(size(mod))*std(mod)/db2mag(SNR);
s = timetable(mod,SampleRate=fs);

[グリッドの表示] をクリックして、2 番目のディスプレイを追加します。変調された信号を信号テーブルにドラッグして、この信号とそのスペクトルを 2 番目のディスプレイに追加します。変調により、搬送周波数を中心とした正の周波数にスペクトルが移動しました。

解析信号を計算します。解析信号に周波数 200 Hz の複素数値の負の指数を乗算して信号を復調します。

dem = hilbert(mod).*exp(-2j*pi*fc*t)/sqrt(2);

2 番目のディスプレイを削除して [ディスプレイのクリア] をクリックします。復調された信号をディスプレイにドラッグします。[アナライザー] タブの [時間値] をクリックして、複素包絡線に時間情報を追加します。[時間指定] リストから Time Values を選択して、[時間値] に変数 t を入力します。両側スペクトルは、ベースバンド信号の復元された同相成分と直交成分を示しています。

[表示] タブの [データ カーソル] をクリックして、Two を選択します。時間領域カーソルを 300 ms と 900 ms に配置して、スペクトル ピークを囲むようにします。[開始時間の保持] ボックスをオンにします。[信号の抽出] の隣にある矢印をクリックして Between Time Cursors を選択します。表示をクリアし、抽出された信号をプロットします。アプリにより、関心領域の復調された信号の同相成分と直交成分が両方とも抽出されます。信号テーブルの [名前] 列をクリックして、抽出された信号を選択します。[アナライザー] タブで [エクスポート] をクリックして信号を dem_ROI.mat という MAT ファイルに保存します。

dem_ROI ファイルをワークスペースに読み込みます。抽出された信号の実数部と虚数部を取得して、復調された同相成分と直交成分を計算します。抽出された信号の時間情報を時間変数 t_dem に格納します。

load dem_ROI
inph_dem = real(dem_ROI);
quad_dem = imag(dem_ROI);
t_dem = 0.3+(0:length(dem_ROI)-1)/fs;

送信された波形と抽出された関心領域を比較します。また、それらのスペクトルを比較します。

subplot(2,1,1)
plot(t,inph,t_dem,inph_dem,'--')
legend("Transmitted Inphase Signal","Received Inphase Signal")

subplot(2,1,2)
plot(t,quad,t_dem,quad_dem,'--')
legend("Transmitted Quadrature Signal","Received Quadrature Signal")

Figure contains 2 axes objects. Axes object 1 contains 2 objects of type line. These objects represent Transmitted Inphase Signal, Received Inphase Signal. Axes object 2 contains 2 objects of type line. These objects represent Transmitted Quadrature Signal, Received Quadrature Signal.

figure
subplot(2,1,1)
pspectrum(inph,fs)
hold on
pspectrum(inph_dem,fs)
legend("Transmitted Inphase Signal","Received Inphase Signal")
hold off

subplot(2,1,2)
pspectrum(quad,fs)
hold on
pspectrum(quad_dem,fs)
legend("Transmitted Quadrature Signal","Received Quadrature Signal")
hold off

Figure contains 2 axes objects. Axes object 1 with title Fres = 4.2743 Hz, xlabel Frequency (kHz), ylabel Power Spectrum (dB) contains 2 objects of type line. These objects represent Transmitted Inphase Signal, Received Inphase Signal. Axes object 2 with title Fres = 4.2743 Hz, xlabel Frequency (kHz), ylabel Power Spectrum (dB) contains 2 objects of type line. These objects represent Transmitted Quadrature Signal, Received Quadrature Signal.

参考

アプリ

関数

関連する例

詳細