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

📄 dbpsk.m

📁 数字通信中的DBPSK调制解调的原理和过程, 通过用Matlab 对这一过程的编程,分析信号在理想信道和加噪信道中传输时的时域图, 并用蒙特卡罗算法进行仿真。
💻 M
字号:
% function [Pb,ErrP]=DBPSK(EbN0)
%7.3dB,Pb=.001,ErrP=.0075//8.3dB,Pb=.00024,ErrP=.0037
%9.89dB,Pb=10e-5,ErrP=0//5.2dB,Pb=10e-2,ErrP=.0367
clear;clc;format compact;
EbN0=5.2;%dB
%验证差分相干解调
LPN=255;
LFram=4;
REN=10^(EbN0/10);
Pb=2*Q((2*REN)^.5)*(1-Q((2*REN)^.5))
CNR=10*log10(128e3)+EbN0;%10e-5:62.4(未编码);10e-3:60(未编码)

f0=70e6;
fb=128e3;
fc=fb*LPN;
fs=fb*256*5;
fl=70e6+0;
sgma=(1+2*10^(CNR/10)/fs)^-.5;
P0=2*sgma^2*10^(CNR/10)/fs;
P=P0;
%信息及其差分
BSer=sign(randn(1,(LFram+1)*125));
DBSer=[];
for i=1:(LFram+1)
    DBSer=[DBSer 1 1];
    for j=1:125
        tp=length(DBSer);
        if(BSer((i-1)*125+j)==DBSer(tp))
            DBSer=[DBSer 1];
        else
            DBSer=[DBSer -1];
        end
    end
    DBSer=[DBSer 1];
end

%伪码构造
ms=2*genmCode(8,'FF','11D')-1;
PNSer=ms(1:255);

%成型滤波器
SSFIR=fir1(16,1.3*fc/fs,kaiser(17,5));
SSCache=zeros(1,17);SSCache1=zeros(1,17);
%抽取滤波器
DDCFIR10=fir1(60,1.3*fb/fs,kaiser(61,7));
DDCCache10=zeros(1,61);
DDCFIR16=fir1(32,1.3*fb/(fs/10),kaiser(33,7));
DDCCache16=zeros(1,33);
%符号滤波器
SymFIR=fir1(64,1.3*fb/(fs/160),kaiser(65,5));
SymFIRCache=zeros(1,65);SymFIRCache1=zeros(1,65);

pr=0;pc=0;pb=0;PNStt=zeros(1,5*8);enDcn=0;
pl=2*pi/6;
BDelay=zeros(1,32);SymSum=0;SymOut=[];
i1=0;i2=0;i3=0;i4=0;i5=0;i6=0;Pcnt=0;
stop=0;
while(stop==0)
    i1=i1+1;
    if(mod(i1-1,65536)==0)
        noise=sgma*randn(1,65536);
    end
    %构造接收信号
    pc=mod(pc+fc/fs,255);pn=PNSer(mod(round(pc),255)+1);pn=1;
    pb=pb+fb/fs;sb=DBSer(round(pb)+1);
    pr=pr+2*pi*f0/fs;
    rcv=(2*P)^.5*pn*sb*sin(pr)+1*noise(mod(i1-1,65536)+1);
    if(mod(i1,163840)==0)
        Pcnt=1;P=0;pr=pr+2*pi*rand(1);
    end
    if(Pcnt~=0)
        Pcnt=Pcnt+1;
    end
    if(Pcnt==128)
        Pcnt=0;P=P0;
    end
    
    %混频
    pl=pl+2*pi*fl/fs;
    mix=rcv*exp(-1j*pl);
    SSCache=[SSCache(2:17) mix];
    mixo=SSCache*SSFIR';
    
    %解扩
    pn=PNSer(mod(round(pc),255)+1);pn=1;
    SSCache1=[SSCache1(2:17) pn];
    PNStt=[PNStt(2:40) pn];
    DSO=mixo*(SSCache1*SSFIR');
    
    if(sum(PNStt)==40)
        enDcn=1;
    end
    %抽取滤波
    DDCCache10=[DDCCache10(2:61) DSO];
    if(mod(i1,10)==0)
        i2=i2+1;

        ddc1=DDCCache10*DDCFIR10';
        DDCCache16=[DDCCache16(2:33) ddc1];
        if(mod(i2,4)==0)
            i3=i3+1;
            
            ddc2=DDCCache16*DDCFIR16';
            %SymFIRCache=[SymFIRCache(2:65) ddc2];
            %ddc3=SymFIRCache*SymFIR';
            mul=ddc2*conj(BDelay(1));
            BDelay=[BDelay(2:32) ddc2];
            mul1=real(mul);
            V1(i3)=mul1;
            if(i3>20)%71
                i4=i4+1;
                SymSum=SymSum+mul1;
                if(i4<8)
                    enDcn=0;
                end
                if(i4==32)%if(enDcn)%
                    enDcn=0;
                    i5=i5+1;
                    if((i5>1) & (i5<127))
                        if(SymSum>0)
                            SymOut=[SymOut 1];
                        else
                            SymOut=[SymOut -1];
                        end
                        i6=i6+1;
                        if(mod(i6,200)==0)
                            i6;
                        end
                    end
                    SymSum=0;i4=0;
                    if(i5==128)
                        i5=0;
                    end
                end
            end
            if(i6==LFram*125)
                stop=1;
            end
        end
    end
end
RLen=length(SymOut);
Err=BSer(1:RLen)-SymOut;
figure(2);stem(Err,'.');
figure(1);stem(BSer(1:RLen),'.');hold on;stem(SymOut,'r:.');

ErrP=sum(abs(Err))/2/RLen

% disp('OVER!');

⌨️ 快捷键说明

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