#【第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);