このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
位相変調の例
以下の例では、位相変調 (PM) の手法を示します。
PSK および PAM 信号への位相ノイズの影響の比較
PSK と PAM の変調スキームを比較し、PSK の方が位相ノイズの影響を受けやすいことを示します。PSK の方が位相ノイズの影響を受けやすいのは、PAM コンスタレーションが線形であるのに対し PSK コンスタレーションが円形であるためです。
シンボル数と変調次数のパラメーターを指定します。ランダム データ シンボルを生成します。
len = 10000; M = 16; msg = randi([0 M-1],len,1);
位相ノイズ System object™ を作成し、構成された設定を表示します。
phasenoise = comm.PhaseNoise(Level=[-70 -80])
phasenoise = comm.PhaseNoise with properties: Level: [-70 -80] FrequencyOffset: [2000 20000] SampleRate: 1000000 RandomStream: 'Global stream'
PSK と PAM の両方を使用して msg
を変調し、2 つの方法を比較します。
txpsk = pskmod(msg,M); txpam = pammod(msg,M);
変調された信号の位相をずらします。
rxpsk = phasenoise(txpsk); rxpam = phasenoise(txpam);
受信信号の散布図を作成します。
scatterplot(rxpsk);
title('Noisy PSK Scatter Plot')
scatterplot(rxpam);
title('Noisy PAM Scatter Plot')
受信信号を復調します。
recovpsk = pskdemod(rxpsk,M); recovpam = pamdemod(rxpam,M);
それぞれの変調スキームのシンボル誤りの数を計算します。PSK 信号の場合、かなり多数のシンボル誤りが発生します。
numerrs_psk = symerr(msg,recovpsk); numerrs_pam = symerr(msg,recovpam); [numerrs_psk numerrs_pam]
ans = 1×2
795 3
DQPSK 信号コンスタレーション点と遷移の比較
このモデルでは、DQPSK Modulator Baseband ブロックの出力をプロットします。イメージは DQPSK 信号コンスタレーションの各シンボルから次のシンボルへの有効な遷移を示します。
doc_dqpsk_plot
は次のブロックを使用します。
Complex to Real-Imag (Simulink)
XY グラフ (詳細については、XY プロットでのシミュレーション データの可視化 (Simulink)を参照)
Random Integer Generator ブロックでは、M-ary 数を 4 に設定し、初期シードを任意の正のスカラー整数 (結果をランダムにするため関数randn
の出力を使用可能) に設定し、サンプル時間を 0.01 に設定します。
DQPSK Modulator Baseband ブロック内の既定の位相オフセットは π/4 であるため、このプロットは π/4-DQPSK 変調を示しています。位相オフセットの信号コンスタレーションへの影響を確認するには、DQPSK Modulator Baseband ブロックの [Phase offset] パラメーターを π/8 または別の値に変更します。再びモデルを再び実行し、プロットの変化の様子を観察します。
8-PSK 変調データの GPU をベースとした畳み込み符号化とビタビ復号化
GPU ベースの畳み込み符号化器 System object を作成します。
conEnc = comm.gpu.ConvolutionalEncoder;
ビット入力信号を受け入れる GPU ベースの位相偏移変調 (PSK) の変調器 System object を作成します。
modPSK = comm.gpu.PSKModulator(BitInput=true);
S/N 比が 7 の GPU ベースの加法性ホワイト ガウス ノイズ (AWGN) チャネル System object を作成します。
chan = comm.gpu.AWGNChannel( ... NoiseMethod='Signal to noise ratio (SNR)', ... SNR=7);
ビット値の列ベクトルを出力する GPU ベースの PSK 復調器 System object を作成します。
demodPSK = comm.gpu.PSKDemodulator(BitOutput=true);
0 または 1 の硬判定値の入力ベクトルを受け入れる、GPU ベースのビタビ復号化器 System object を作成します。
vDec = comm.gpu.ViterbiDecoder(InputFormat='Hard');
3 つのデータ サンプルを無視した後に比較を行う、エラー レート System object を作成します。受信データは送信データよりも 34 個のサンプル分遅れます。
error = comm.ErrorRate(ComputationDelay=3,ReceiveDelay=34);
次の for
ループを使用してデータを処理し、シミュレーションを実行します。
for counter = 1:20 data = randi([0 1],30,1); encodedData = conEnc(gpuArray(data)); modSignal = modPSK(encodedData); receivedSignal = chan(modSignal); demodSignal = demodPSK(receivedSignal); receivedBits = vDec(demodSignal); errors = error(data,gather(receivedBits)); end
誤り数を表示します。
errors(2)
ans = 26
参考
関数
rcosdesign
|dpskmod
|dpskdemod
|pskmod
|pskdemod
オブジェクト
comm.RaisedCosineTransmitFilter
|comm.RaisedCosineReceiveFilter
|comm.BPSKModulator
|comm.BPSKDemodulator
|comm.DBPSKModulator
|comm.DBPSKDemodulator
|comm.DPSKModulator
|comm.DPSKDemodulator
|comm.DQPSKModulator
|comm.DQPSKDemodulator
|comm.OQPSKModulator
|comm.OQPSKDemodulator
|comm.PSKModulator
|comm.PSKDemodulator
|comm.gpu.PSKModulator
|comm.gpu.PSKDemodulator
|comm.QPSKModulator
|comm.QPSKDemodulator
ブロック
- Raised Cosine Transmit Filter | Raised Cosine Receive Filter | Bipolar to Unipolar Converter | Unipolar to Bipolar Converter | Data Mapper | BPSK Modulator Baseband | BPSK Demodulator Baseband | DBPSK Modulator Baseband | DBPSK Demodulator Baseband | DQPSK Modulator Baseband | DQPSK Demodulator Baseband | M-DPSK Modulator Baseband | M-DPSK Demodulator Baseband | M-PSK Modulator Baseband | M-PSK Demodulator Baseband | OQPSK Modulator Baseband | OQPSK Demodulator Baseband | QPSK Modulator Baseband | QPSK Demodulator Baseband