BPSK相干解調和DBPSK非相干解調誤碼率仿真

BPSK相干解調和DBPSK非相干解調誤碼率仿真

本腳本完成了BPSK和DBPSK兩種不一樣調製方式下的誤碼率(DBPSK差分相干)仿真, 並和理論曲線進行了對比。函數

  撰寫人:***
  最後修改日期:2015-03-18
  軟件版本:MATLAB(R) 2014a

程序添加和修改包括編碼

  1. BPSK未做修改
  2. DPSK添加了成型部分,同時從《高等數字通訊》中看到了DPSK最佳接收機的結構

待改進spa

  1. 怎樣選擇仿真點數才能保證結果可信,可信程度是多少?如何衡量?

Contents

初始設置

清空工做區,數據,關閉全部窗口3d

clc;clear all;close all;

仿真參數設置code

EbN0_dB = 1:8;                            % EbN0_dB 誤碼率範圍,向量;
FRAMES_NUM = 100;                         % FRAMES_NUM 最大仿真幀數目;
FRAMES_LENGTH = 1000;                     % FRAMES_LENGTH 每幀長度;
UPSAMPLE_RATE = 8;                        % UPSAMPLE_RATE 過採樣率;
berBpsk = zeros(1,length(EbN0_dB));       % berBpsk BPSK誤碼率統計,向量;
berDbpsk = zeros(1,length(EbN0_dB));      % berDbpsk DBPSK誤碼率統計,向量;
sqrtRaisedfilter = rcosfir(0.3,[-3,3],UPSAMPLE_RATE,1,'sqrt');

誤碼率仿真

針對不一樣EbN0先仿真BPSK和DBPSK誤碼率曲線blog

在不一樣EbN0下,對誤碼率進行仿真get

for nEbN0 = 1:length(EbN0_dB);

多幀取統計平均input

    bpskErrorNum = 0;
    dbpskErrorNum = 0;
    for nFrame = 1:FRAMES_NUM

數據生成和基帶映射string

        data = randi([0 1],1,FRAMES_LENGTH);
        bpskBaseband = 1 - 2*data;          % 映射 0—+1;1—-1,已歸一化
        data_extend = [1 data];             % 差分編碼,假設第一個數據爲1
        for num = 2:FRAMES_LENGTH+1
            data_extend(num) = xor(data_extend(num),data_extend(num-1));
        end
        % 注意此時DBPSK多傳了一個1
        dbpskBaseband = 1 - 2*data_extend;  % 映射 0—+1;1—-1,已歸一化
        % 方波成型
        %dbpskBaseband = reshape(repmat(dbpskBaseband,UPSAMPLE_RATE,1),1,[]);
        % 匹配濾波
        dbpskBaseband = upsample(dbpskBaseband,UPSAMPLE_RATE);
        dbpskBaseband = conv(dbpskBaseband,sqrtRaisedfilter,'same');
        bpskTransmitSignal = bpskBaseband;  % 不加載波
        dbpskTransmitSignal = dbpskBaseband/sqrt(var(dbpskBaseband));

AWGN 信道,SNR和EbN0換算關係it

BPSK_DBPSK_V2_eq30691

        SNR_dB = EbN0_dB(nEbN0) + 10*log10(2) - 10*log10(1);
        SNR = 10^(SNR_dB/10);

接收信號的矢量等效

        bpsknoise = 1/sqrt(SNR)*randn(1,length(bpskTransmitSignal));
        bpskReceiveSignal = bpskTransmitSignal + bpsknoise;
        SNR_dB = EbN0_dB(nEbN0) + 10*log10(2) - 10*log10(UPSAMPLE_RATE);
        SNR = 10^(SNR_dB/10);
        dbpsknoise =  1/sqrt(SNR)*randn(1,length(dbpskTransmitSignal)) + ...
            1i*1/sqrt(SNR)*randn(1,length(dbpskTransmitSignal));
        dbpskReceiveSignal = dbpskTransmitSignal + dbpsknoise;

BPSK誤比特數統計

        bpskErrorNum = bpskErrorNum + sum(bpskBaseband.*bpskReceiveSignal<0);

DBPSK解調(通訊原理P209) 誤比特數統計,不是最佳接收 方波成型解調若是UPSAMPLE_RATE爲1,此時能使用sum函數

        %dbpskReceiveSignal = sum(reshape(dbpskReceiveSignal,UPSAMPLE_RATE,[]));
        % 匹配濾波解調
        dbpskReceiveSignal = conv(dbpskReceiveSignal,sqrtRaisedfilter,'same');
        dbpskReceiveSignal = downsample(dbpskReceiveSignal,UPSAMPLE_RATE);
        dbpskDelay = dbpskReceiveSignal(2:end);
        dbpskJudgment = dbpskReceiveSignal(1:end-1).*dbpskDelay;
        dbpskDecodeData = zeros(1,length(data));
        dbpskDecodeData(dbpskJudgment<0) = 1;   %gt compares only the real part
        dbpskErrorNum = dbpskErrorNum + sum(abs(dbpskDecodeData-data));
    end

誤碼率統計

    berBpsk(nEbN0) = bpskErrorNum/FRAMES_NUM/FRAMES_LENGTH;
    berDbpsk(nEbN0) = dbpskErrorNum/FRAMES_NUM/FRAMES_LENGTH;
end

繪圖和數據輸出

繪製BPSK和DBPSK的仿真和理論誤碼率曲線

berBpskTheory = berawgn(EbN0_dB,'psk',2,'nondiff');
berDbpskTheory = berawgn(EbN0_dB,'dpsk',2,'nondiff');
fprintf('總幀數 = %d,幀長 = %d\n',FRAMES_NUM,FRAMES_LENGTH);
table(EbN0_dB',berBpskTheory',berBpsk',berDbpskTheory',berDbpsk',...
    'VariableNames', {'EbN0_dB','BpskTheory','BpskSim','DbpskTheory','DbpskSim'})

figure;
semilogy(EbN0_dB,berDbpsk,'bd');hold on;
semilogy(EbN0_dB,berDbpskTheory,'b-');
semilogy(EbN0_dB,berBpsk,'rs');
semilogy(EbN0_dB,berBpskTheory,'r-');hold off;
legend('差分DPSK仿真','DPSK理論','相干BPSK仿真','相干BPSK理論');
xlabel('EbN0');
ylabel('BER');
grid on;
總幀數 = 100,幀長 = 1000

ans = 

    EbN0_dB    BpskTheory    BpskSim    DbpskTheory    DbpskSim
    _______    __________    _______    ___________    ________

    1            0.056282    0.05494      0.14198      0.14132 
    2            0.037506    0.03737      0.10248      0.10291 
    3            0.022878    0.02259     0.067989      0.06888 
    4            0.012501    0.01247     0.040558      0.03912 
    5           0.0059539     0.0061     0.021165      0.02151 
    6           0.0023883     0.0024    0.0093328      0.00937 
    7          0.00077267    0.00079    0.0033292      0.00334 
    8          0.00019091    0.00022    0.0009094      0.00076 
BPSK_DBPSK_V2_01
相關文章
相關標籤/搜索