cdmasim.m

来自「CDMA的MATLAB仿真」· M 代码 · 共 71 行

M
71
字号
%File CDMAsim.m
function [BER,ErrorRun]=CDMAsim(N,SF,EbNo,NumInterference,MPathDelay,Kfactor_dB)
rand('state',sum(100*clock));randn('state',sum(100*clock));
NIterate=1e3;
NumberOfIterations=ceil(N/NIterate);
ErrorState=0;ErrorRun=[];RunCount=1;
Kfactor=10^(EbNo/10);
EbNolinear=10^(EbNo/10);
MPathComponents=length(MPathDelay);
%
%Design IIR filter for fading signal
FilterOrder=4;Ripple=0.5;BW=0.01;
[b,a]=cheby1(FilterOrder,Ripple,BW);
%
%Generate spreading sequence
%
DesiredSequence=MSequence(SF+1);%desired signal
M=length(DesiredSequence);
%
%The simulation loop begins here
%
for cnt=1:NumberOfIterations
    %
    %generate and spread symbols for desired user
    %
    DesiredSymbols=sign(rand(1,NIterate)-0.5);
    DesiredChips=reshape(DesiredSequence.'*DesiredSymbols,1,M*NIterate);
    %
    %Generate noise
    %
    NoiseAmplitude=sqrt(SF/(2*EbNolinear));
    DesiredNoise= NoiseAmplitude*randn(1,M*NIterate+0);
    %
    %add signal and noise
    %
    IncomingSignal=DesiredChips+DesiredNoise;
    %
    %Receive and detect incoming signal
    %
    IncomingChips=reshape(IncomingSignal,M,NIterate);
    DespreadSymbols=DesiredSequence*IncomingChips;
    DetectedSymbols=sign(DespreadSymbols);
    %
    %compute Bit Error Rate
    %
    ErrorVector=0.5*abs(DetectedSymbols-DesiredSymbols);
    ErrorIterate(cnt)=sum(ErrorVector);
    BERIterate(cnt)=ErrorIterate(cnt)/NIterate;
    for k=1:NIterate
        if (ErrorVector(k)==0) & (ErrorState==0)
            RunCount=RunCount+1;
        elseif (ErrorVector(k)==1) & (ErrorState==1)
            ErrorRun=[ErrorRun RunCount];
            RunCount=1;ErrorState=0;
        elseif (ErrorVector(k)==1) &(ErrorState==0)
            ErrorRun=[ErrorRun RunCount];
            RunCount=1;ErrorState=1;
        elseif (ErrorVector(k)==1) & (ErrorState==1)
            RunCount=RunCount+1;
        else
            s1=sprintf('ErrorVector(%d)=%d,ErrorState=%d! Unexpected Condition!');
            %error(s1);
        end
    end
end
Errors=sum(ErrorIterate);
BER=mean(BERIterate);
ErrorRun=[ErrorRun RunCount];
%End of function file

            

⌨️ 快捷键说明

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