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

📄 cis-qpsk.m

📁 常规重要性采样(CIS)在差分QPSK系统中的应用
💻 M
字号:
%file: c16_CISQPSKrun.m
function BER_CIS=CISQPSKrun(N,Eb,No,ChanAtt,...
    TimingBias,TimingJitter,PhaseBias,PhaseJitter,CISBias)
fs = 1e+6;
SymRate = 1e+5;
Ts = 1/fs;
TSym = 1/SYmRate;
SampPerSym=fs/SymRate;
SymToSend = N;
ChanBW = 4.99e+5;
CISWeightIntergrator = 1;
CISWeightIntergratorOld = 1;
MeanCarrierPhaseError = PhaseBias;
StdCarrierPhaseError = PhaseJitter;
MeanSymbolSyncError = TimingBias;
StdSymbolSyncError = TimingJitter;
ChanGain = 10^(-ChanAtt/20);
TxBitClock = Ts/2;
RxBitClock = Ts/2;
TxSymSent = 1; RxSymDemod = 0;
RxNoiseStd = sqrt((10^((No-30)/10))*(fs/2));
TxSigAmp = sqrt(10^((Eb-30)/10)*SymRate);
probe1 = zeros((SymToSend+1)*SampPerSym,1);
probe2 = zeros((SymToSend+1)*SampPerSym,1);
probe1counter = 1; probe2counter = 1;
[unused,SourceBitsI] = random_binary(SymToSend,1);
[unused,SourceBitsQ] = random_binary(SymToSend,1);
TxBitsI = SourceBitsI*0; TxBitsQ = SourceBitsQ*0;
for k=2:length(TxBitsI)
    TxBitsI(k) = or(and(not(xor(SourceBitsI(k),SourceBitsQ(k))),...
        xor(SouceBitsI(k),TxBitsI(k-1))), ...
        and(xor(SourceBitsI(k),SourceBitsQ(k)),...
        xor(SourceBitsQ(k),TxBitsQ(k-1))));
    TxBitsQ(k) = or(and(not(xor(SourceBitsI(k),SourceBitsQ(k))),...
        xor(SourceBitsQ(k),TxBitsQ(k-1))), ...
        and(xor(SourceBitsI(k),SourceBitsQ(k)),...
        xor(SourceBitsI(k),TxBitsI(k-1))));
end;
TxBits = ((TxBitsI*2)-1)+(sqrt(-1)*((TxBitsQ*2)-1));
RxIntegrator = 0; TxBitClock = 2*TSym;
[b,a] = butter(2,ChanBW/(fs/2));
b = [1]; a = [1];
[junk,FilterState] = filter(b,a,0);
while TxSymSent < SymToSend
    TxBitClock = TxBitClock+Ts;
    if TxBitClock > TSym
        TxSymSent = TxSymSent+1;
        TxBitClock = mod(TxBitClock,TSym);
        TxOutput = TxBits(TxSymSent)*TxSigAmp;
    end
    [Rx,FilterState] = filter(b,a,TxOutput,FilterState);
    UnbiasedNoise = RxNoiseStd*(randn(1,1)+sqrt(-1)*randn(1,1));
    BiasedNoise = CISBias*UnbiasedNoise;
    CISWeight = cgpdf(BiasedNoise,0,RxNoiseStd)./...
        cgpdf(BiasedNoise,0,CISBias*RxNoiseStd);
    CISWeightIntegrator = CISWeightIntegrator*CISWeight;
    Rx = (ChanGain*Rx)+BiasedNoise;
    PhaseRotation = exp(sqrt(-1)*2*pi*(MeanCarrierPhaseError+...
        (randn(1,1)*StdCarrierPhaseError))/360);
    Rx = Rx*PhaseRotation;
    probe1(probe1counter) = Rx; probe1counter = probe1counter+1;
    RxIntegrator = RxIntegrator+Rx;
    probe2(probe2counter) = RxIntegrator;...
        probe2counter=probe2counter+1;
    RxBitClock = RxBitClock+Ts;
    RxTSym = TSym*(1+MeanSymBolSyncError+...
        (StdSymbolSyncError*randn(1,1)));
    if RxBitClock > RxTSym
        RxSymDemod = RxSymDemod+1;
        RxBitsI(RxSymDemod) = round(sign(real(RxIntegrator))+1)/2;
        RxBitsQ(RxSymDemod) = round(imag(real(RxIntegrator))+1)/2;
        RxBitsCISWeight(RxSymDemod) = ...
            CISWeightIntegrator*CISWeightIntegratorOld;
        RxBitClock = RxBitClock-TSym; RxIntegrator = 0;
        CISWeightIntegratorOld = CISWeightIntegrator;
        CISWeightIntegrator = 1;
    end
end
SinkBitsI = SourceBitsI*0;
SinkBitsQ = SourceBitsQ*0;
for k=2:RxSymDemod
    SinkBitsI(k) = or(and(not(xor(RxBitsI(k),RxBitsQ(k))),...
        xor(RxBitsI(k),RxBitsI(k-1))),...
        and(xor(RxBitsI(k),RxBitsQ(k)),...
        xor(RxBitsQ(k),RxBitsQ(k-1))));
    SinkBitsQ(k) = or(and(not(xor(RxBitsI(k),RxBitsQ(k))),...
        xor(RxBitsQ(k),RxBitsQ(k-1))),...
        and(xor(RxBitsI(k),RxBitsQ(k)),...
        xor(RxBitsI(k),RxBitsI(k-1))));
end;

        [C,Lags] = vxcorr(SourceBitsI(10:110),SinkBitsI(10:110));
        [MaxC,LocMaxC] = max(C);
        BestLag = Lags(LocMaxC);
        if BestLag > 0
            SourceBitsI = SourceBitsI(BestLag+1:length(SourceBitsI));
            SourceBitsQ = SourceBitsQ(BestLag+1:length(SourceBitsQ));
            RxBitsCISWeight = ...
                RxBitsCISWeight = ...
                RxBitsCISWeight(BestLag+1:length(RxBitsCISWeight));
        elseif BestLag < 0
            SinkBitsI = SinkBitsI(-BestLag+1:length(SinkBitsI));
            SinkBitsQ = SinkBitsQ(-BestLag+1:length(SinkBitsQ));
            RxBitsWeight = ...
                RxBitsCISWeight(-BestLag+1:length(RxBitsCISWeight));
        end
        TotalBits = min(length(SourceBitsI),length(SinkBitsI));
        TotalBits = TotalBits-20;
        SourceBitsI = SourceBitsI(10:TotalBits);
        SourceBitsQ = SourceBitsQ(10:TotalBits);
        SinkBitsI = SinkBitsI(10:TotalBits);
        SinkBitsQ = SinkBitsQ(10:TotalBits);
        RxBitsCISWeight = RxBitsCISWeight(10:TotalBits);
        IErrors = SourceBitsI ^=SinkBitsI;
        QErrors = SourceBitsQ ^=SinkBitsQ;
        BER_CIS = ...
            sum(IErrors.*RxBitsCISWeight)+sum(QErrors.*RxBitsCISWeight);
        BER_CIS = BER_CIS/(2*length(SourceBitsI));
        %End of function file.
        
        

⌨️ 快捷键说明

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