LoginSignup
1
1

More than 5 years have passed since last update.

【MATLAB】通信の勉強をする前の練習問題【問題編④BERの計算】

Posted at

【第4章】通信の実行とBERの計算

ここから一気にBERの計算まで行きます。

(1)受信信号を計算する

第3章の問5,第2章の問2を参考にして、QPSK変調された送信シンボルがAWGNの影響を受けた時の受信シンボルを表現してみましょう。
SNRや送信bit数は自由に決めてください。

ヒント

$y_k,x_k,z_k$をそれぞれ時刻kにおける受信シンボル、送信シンボル、雑音ベクトルだとしたとき、それらは
$y_k = x_k + z_k$という関係にあります。

(2) 奇数bit目の復調

まずは受信シンボル$y_k$から奇数bit目を復調しましょう。「どのような変調が施されたことにより$x_k$が作られたのか」を思い出せば,$y_k$のうちどこが奇数bit目に対応するのかが見えてくると思います。復調結果は{-1,1}から構成される行列で出力してください

ヒント

$y_k$は$x_k$と違って雑音が足されていることに注意しましょう。

(3) 偶数bit目の復調

上と同じです。「どのような変調によりそれが作られたのか」を思い出しましょう。

(4) (2),(3)の結果の結合

結合結果は、もし雑音がなければ「送信信号をBPSK変調したもの」と全く同じになるはずです。

ヒント

A(:,1:2:end) = B

このような操作によってAの(2*n-1)行目にBのn行目を代入することができます。(n=1,2,...)

(5) BPSK復調

(4)の結果得られたビット列に対してBPSK復調をしましょう。

ヒント

BPSK変調のときには、0を-1にしたんでしたね。では逆操作である復調は…。

(6) BERの計算

BERの定義とは、「(誤って判定されたbitの個数)/(送信したbitの個数)」です。

解答


% おまじない
clear all

% 今までの復習
N = 10^6;
SNRdB = 10;
SNR = 10^(SNRdB/10);
No = 1/SNR;
noise_comp = sqrt(No/2) * randn(2,N/2) + 1j*sqrt(No/2) * randn(2,N/2);

TX_bit = randi([0,1],2,N);
TX_BPSK = zeros(size(TX_bit));
TX_BPSK(TX_bit == 0) = -1;
TX_BPSK(TX_bit == 1) = 1;
%TX_QPSKの実部は奇数番目の送信bit、虚部は偶数番目の送信bitに対応することに着目
TX_QPSK = (TX_BPSK(:,1:2:end) + 1j*TX_BPSK(:,2:2:end))/sqrt(2);

%問(1) 受信信号の表現
RX_QPSK = TX_QPSK + noise_comp;

%問(2) 奇数bitの復調
RX_BPSK1 = zeros(2,N/2);
RX_BPSK1(real(RX_QPSK) > 0) = 1;
RX_BPSK1(real(RX_QPSK) < 0) = -1;

%問(3) 偶数bitの復調
RX_BPSK2 = zeros(2,N/2);
RX_BPSK2(imag(RX_QPSK) > 0) = 1;
RX_BPSK2(imag(RX_QPSK) < 0) = -1;

%問(4) (2),(3)の結果の結合
RX_BPSK = zeros(size(TX_bit));
RX_BPSK(:,1:2:end) = RX_BPSK1;
RX_BPSK(:,2:2:end) = RX_BPSK2;

%問(5) BPSK復調
RX_bit = zeros(size(TX_bit));
RX_bit(RX_BPSK == -1) = 0;
RX_bit(RX_BPSK == 1) = 1;

%問(6) BERの算出
BER = sum(abs(TX_bit(:) - RX_bit(:)))/(2*N);
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1