このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MSK 信号再生
最小偏移変調 (MSK) 信号のタイミング位相オフセット、搬送波周波数オフセット、搬送波位相オフセットなどのチャネル障害をモデル化します。comm.MSKTimingSynchronizer
および comm.CarrierSynchronizer
System object を使用して、受信機でそれらの信号を同期します。MSK タイミング同期装置はタイミング オフセットを再生し、キャリア同期装置は搬送波周波数オフセットと搬送波位相オフセットを再生します。
MATLAB® スクリプト configureMSKSignalRecoveryEx
を実行してシステム変数を初期化します。論理制御変数 recoverTimingPhase
を定義してタイミング位相再生を有効にし、recoverCarrier
を定義して搬送波周波数および搬送波位相再生を有効にします。
configureMSKSignalRecoveryEx; recoverTimingPhase = true; recoverCarrier = true;
チャネル障害のモデル化
チャネル モデルが適用するサンプル遅延 timingOffset
を指定します。可変非整数遅延オブジェクトを作成して、タイミング遅延を送信信号に導入します。
timingOffset = 0.2; varDelay = dsp.VariableFractionalDelay;
comm.PhaseFrequencyOffset
System object™ を作成して、搬送波位相オフセットと周波数オフセットを変調信号に導入します。MSK 変調器は送信されたシンボルをアップサンプリングするため、SampleRate
プロパティを samplesPerSymbol
とサンプル時間 Ts
の比率に設定します。
freqOffset = 50; phaseOffset = 30; pfo = comm.PhaseFrequencyOffset(... 'FrequencyOffset',freqOffset, ... 'PhaseOffset',phaseOffset, ... 'SampleRate',samplesPerSymbol/Ts);
シミュレーション SNR を 20 dB に設定します。MSK 変調器は 1 ワットの電力でシンボルを生成するため、信号強度は 1 W (0 dBW) になります。これは、awgn
チャネルの信号強度入力の既定値です。
SNR = 20;
タイミング位相、搬送波周波数、搬送波位相同期
MSK タイミング同期装置を作成し、4 次非線形法を使用して、シンボル タイミング位相を再生します。
timeSync = comm.MSKTimingSynchronizer(... 'SamplesPerSymbol',samplesPerSymbol, ... 'ErrorUpdateGain',0.02);
キャリア同期装置を作成し、搬送波周波数と搬送波位相の両方を再生します。MSK コンスタレーションは位相オフセットが 0 度の QPSK であるため、それに応じて comm.CarrierSynchronizer
を設定します。
phaseSync = comm.CarrierSynchronizer(... 'Modulation','QPSK', ... 'ModulationPhaseOffset','Custom', ... 'CustomPhaseOffset',0, ... 'SamplesPerSymbol',1);
ストリーム処理ループ
シミュレーションは MSK 変調を使用して、データを変調します。変調シンボルは、タイミング遅延、搬送波周波数と位相シフト、および加法性ホワイト ガウス ノイズに適用されるチャネル モデルを通過します。受信機がタイミング位相と搬送波周波数および搬送波位相の再生を実行します。最後に、信号シンボルが復調され、ビット エラー レートが計算されます。plotResultsMSKSignalRecoveryEx
スクリプトは、以下の影響を示す散布図を以下の順序で生成します。
チャネル障害
タイミング同期
搬送波同期
この例は、シミュレーションの最後に、タイミング位相、周波数および位相推定をシミュレーション時の関数として表示します。
for p = 1:numFrames %------------------------------------------------------ % Generate and modulate data %------------------------------------------------------ txBits = randi([0 1],samplesPerFrame,1); txSym = modem(txBits); %------------------------------------------------------ % Transmit through channel %------------------------------------------------------ % % Add timing offset rxSigTimingOff = varDelay(txSym,timingOffset*samplesPerSymbol); % % Add carrier frequency and phase offset rxSigCFO = pfo(rxSigTimingOff); % % Pass the signal through an AWGN channel rxSig = awgn(rxSigCFO,SNR); % % Save the transmitted signal for plotting plot_rx = rxSig; % %------------------------------------------------------ % Timing recovery %------------------------------------------------------ if recoverTimingPhase % Recover symbol timing phase using % fourth-order nonlinearity method [rxSym,timEst] = timeSync(rxSig); % Calculate the timing delay estimate for each sample timEst = timEst(1)/samplesPerSymbol; else % Do not apply timing recovery and % simply downsample the received signal rxSym = downsample(rxSig,samplesPerSymbol); timEst = 0; end % Save the timing synchronized received signal for plotting plot_rxTimeSync = rxSym; %------------------------------------------------------ % Carrier frequency and phase recovery %------------------------------------------------------ if recoverCarrier % The following script applies carrier frequency and % phase recovery using a second order phase-locked % loop (PLL), and removes phase ambiguity [rxSym,phEst] = phaseSync(rxSym); removePhaseAmbiguityMSKSignalRecoveryEx; freqShiftEst = mean(diff(phEst)/(Ts*2*pi)); phEst = mod(mean(phEst),360); % in degrees else freqShiftEst = 0; phEst = 0; end % Save the phase synchronized received signal for plotting plot_rxPhSync = rxSym; %------------------------------------------------------ % Demodulate the received symbols %------------------------------------------------------ rxBits = demod(rxSym); %------------------------------------------------------ % Calculate the bit error rate %------------------------------------------------------ errorStats = BERCalc(txBits,rxBits); %------------------------------------------------------ % Plot results %------------------------------------------------------ plotResultsMSKSignalRecoveryEx; end
ビット エラー レートとエラー レート計算機によって処理されたシンボルの合計数を表示します。
BitErrorRate = errorStats(1)
BitErrorRate = 2.0001e-06
TotalNumberOfSymbols = errorStats(3)
TotalNumberOfSymbols = 499982
まとめおよび追加の実験
再生アルゴリズムは、タイミング、搬送波周波数および搬送波位相の同期後に取得されるコンスタレーション プロットを使用することによって実証されます。
この例の書き込み可能なコピーとそのサポート ファイルを作成するには、このスクリプトを開きます。これにより、再生アルゴリズムの効果を示すため、論理制御変数 recoverTimingPhase
と recoverCarrier
を有効化および無効化してシミュレーションを再実行することができます。
付録
この例では、以下のスクリプトを使用しています。
configureMSKSignalRecoveryEx
plotResultsMSKSignalRecoveryEx
removePhaseAmbiguityMSKSignalRecoveryEx