⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d_bpsk_sim_function.m

📁 差分BPSK系统仿真,输入有效值后,可产生误码率曲线
💻 M
字号:

function [BER,Errors]=D_BPSK_sim_function(N,EbNo,delay,FilterSwitch);
%DPSK差分解调

SamplesPerSymbol=20 ;
BlockSize=5000;

NoiseSigma=sqrt(SamplesPerSymbol/(2*EbNo));
DetectedSymbols=zeros(1,BlockSize);
NumberOfBlocks=floor(N/BlockSize);

% ButterWorths 滤波器
%     [BTx,ATx]=butter(5,2/SamplesPerSymbol);
%     [TxOutput,TxFilterState]=filter(BTx,ATx,0);

% Raised_Cosine 滤波器
    alpha=0.4;   %滚降系数
    T=1/2400;    %码率
    t=[-3*T:2.3*T/7:3*T];
    b=sinc(t./T).*(cos(pi*alpha*t./T)./(1-4*alpha^2*t.^2/T^2))/sqrt(10^0.9740296);
    [TxOutput,TxFilterState] = filter(b,1,0);  % Desired signal
    [RxInput,RxFilterState] = filter(b,1,0);  % Desired signal


BRx=ones(1,SamplesPerSymbol);
ARx=1;
Errors=0;

SymbolSamples=zeros(1,(BlockSize+1)*SamplesPerSymbol);
TxSymbolsOrigin=round(rand(1,BlockSize));
TxSymbols(1)=1;
for m=1:BlockSize+1
    if m~=1
        TxSymbols(m)=mod(TxSymbols(m-1)+TxSymbolsOrigin(m-1),2);
    end
    for n=1:SamplesPerSymbol
        index=(m-1)*SamplesPerSymbol+n;
        SymbolSamples(1,index)=(-1)^TxSymbols(m);
    end
end


if FilterSwitch==0
    TxOutput=SymbolSamples;
else
    [TxOutput,TxFilterState]=filter(b,1,SymbolSamples,TxFilterState);
%     [TxOutput,TxFilterState]=filter(BTx,ATx,SymbolSamples,TxFilterState);
end

R=2400;
fs=SamplesPerSymbol*R;
ts=1/fs;

KNN=1:SamplesPerSymbol*(BlockSize+1);
TxOutput=TxOutput.*cos(2*pi*4800*KNN*ts)*sqrt(2);            %exp(i*2*pi*480*KNN*ts)*exp(i*0.1*pi);

NoiseSamples=NoiseSigma*randn(size(TxOutput));

RxInput=TxOutput+NoiseSamples;


% RxInput=RxInput.*cos(2*pi*4800*KNN*ts)*sqrt(2);


[RxInput,RxFilterState]=filter(b,1,RxInput,RxFilterState);
RxInput=[RxInput(1:(BlockSize+1)*SamplesPerSymbol)].*[zeros(1,SamplesPerSymbol) RxInput(1:BlockSize*SamplesPerSymbol)];

IntegratorOutput=filter(BRx,ARx,RxInput);

for k=2:BlockSize+1
    m=k*SamplesPerSymbol+2*delay;
    if (m<length(IntegratorOutput))
        DetectedSymbols(k)=(1-sign(IntegratorOutput(m)))/2;
        if (DetectedSymbols(k)~=TxSymbolsOrigin(k-1))
            Errors=Errors+1;
        end
    end
end


BER=Errors./(BlockSize);
















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -