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に収束する