以下の内容はhttps://seinzumtode.hatenadiary.jp/entry/2025/09/15/183505より取得しました。


BPSKとQPSKのシミュレーション

BPSK

clear; close all;

N = 10000; %bit
SN = 6; %dB
dataSeq = MYrandData(N);

BPSKsymbol = dataSeq;
BPSKsymbol(find(BPSKsymbol==0)) = -1; %0を-1に置換(BPSK)

Pn = 10^(-SN/10);
r = BPSKsymbol + MYcompNoise([N,1],Pn);

demod = ones(N,1);
demod(find(real(r)<0)) = 0;

BER = sum(abs(dataSeq-demod))/N

SNR = 10^(SN/10);
BER_theory = erfc(sqrt(SNR))/2



function[data] = MYrandData(Ndata)
%ランダムバイナリデータ生成器 [data]=MYrandData(Ndata)
dataSeq = randn(Ndata,1);
data= zeros(Ndata,1);
data(find(dataSeq > 0)) = 1;
end

%複素ガウス雑音発生器 
function [noise]=MYcompNoise(noiseSize,Pn)
  noise = (randn(noiseSize) + j*randn(noiseSize)) * sqrt(Pn/2);
end

QPSK

clear; close all;

N = 1000; %bit
SN = 6; %dB
dataSeq = MYrandData(N);

spcOutput = reshape(dataSeq, 2 , N/2);
qpskSymbolIndex = [1,2]*spcOutput;
qpskSymbol = ones(1,N/2)*exp(j*pi/4);
qpskSymbol(find(qpskSymbolIndex==1)) = exp(j*3*pi/4);
qpskSymbol(find(qpskSymbolIndex==3)) = exp(j*5*pi/4);
qpskSymbol(find(qpskSymbolIndex==2)) = exp(j*7*pi/4);

Pn = 10^(-SN/10);
r = qpskSymbol + MYcompNoise([1,N/2],Pn);

demod = zeros(2,N/2);
demod(2, find(imag(r)<=0))  = 1;
demod(1, find(real(r)<=0)) = 1;
qpskDemod = demod(:);

BER = sum(abs(dataSeq-qpskDemod))/N

SNR = 10^(SN/10);
BER_theory = erfc(sqrt(SNR/2))/2

plotZ(r);

function plotZ(z)
% 単位円のデータ
theta = linspace(0, 2*pi, 200);
x = cos(theta);
y = sin(theta);

% プロット
figure;
plot(x, y, 'b-', 'LineWidth', 1.5); hold on;   % 単位円
plot(real(z), imag(z), 'ro', 'MarkerSize', 8, 'LineWidth', 2); % 複素数z

% 軸と見やすさの設定
axis equal;
grid on;
xlabel('Real');
ylabel('Imag');
title('Complex Number and Unit Circle');
legend('Unit Circle', 'z');
end


function[data] = MYrandData(Ndata)
%ランダムバイナリデータ生成器 [data]=MYrandData(Ndata)
dataSeq = randn(Ndata,1);
data= zeros(Ndata,1);
data(find(dataSeq > 0)) = 1;
end

%複素ガウス雑音発生器
function [noise]=MYcompNoise(noiseSize,Pn)
noise = (randn(noiseSize) + j*randn(noiseSize)) * sqrt(Pn/2);
end


N=10万くらいで理論誤り率BERに収束する




以上の内容はhttps://seinzumtode.hatenadiary.jp/entry/2025/09/15/183505より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14