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

📄 popupmenu100.asv

📁 在matlab下输入guide命令后打开main_main.gig 实现卷积编码
💻 ASV
字号:
clear 
global dt t f df N T
close all
clear Eb_N0 Pe

N=2^10; %采样点数
L=32;    %每码元的采样点数
M=N/L   %码元数
Rb=2;		%码速率是2Mb/s
Ts=1/Rb;        %码元间隔
dt=Ts/L;        %时域采样间隔
df=1/(N*dt)     %频域采样间隔
T=N*dt          %截短时间
Bs=N*df/2       %系统带宽
alpha=0.5 	%滚降系数
fc=15
Na=4;           %示波器扫描宽度为4个码元
t=linspace(-T/2,T/2,N); %时域横坐标
f=linspace(-Bs,Bs,N)+eps;   %频域横坐标

%升余弦
hr1=sin(pi*t/Ts)./(pi*t/Ts);
hr2=cos(alpha*pi*t/Ts)./(1-(2*alpha*t/Ts).^2);
hr=hr1.*hr2;
HR=abs(t2f(hr));%取模是为了忽略时延
GT=sqrt(HR);
GR=GT;

for loop1=1:10
    Eb_N0(loop1)=(loop1-1)  %Eb/N0 in dB
    eb_n0(loop1)=10^(Eb_N0(loop1)/10);
    Eb=1;	
    n0=Eb/eb_n0(loop1); %信道的噪声谱密度   
    sita=n0*Bs; %信道中噪声功率
    
    n_err=0;     %误码计数
    EP=zeros(size(f))+eps;
    EP1=zeros(size(f))+eps;
    for loop2=1:3            %循环3次求Pe取平均值
        s4=round(rand(1,M));
        b1=a(1:2:M);         %b1为同相支路序列,b2为正交支路序列
        c1=zeros(1,0.25*M);
        for i=1:0.25*M
            if b1(2*i-1)==1&b1(2*i)==0
                c1(i)=1;
            elseif b1(2*i-1)==1&b1(2*i)==1
                c1(i)=3;
            elseif b1(2*i-1)==0&b1(2*i)==0
                c1(i)=-1;
            elseif b1(2*i-1)==0&b1(2*i)==1
                c1(i)=-3;
            end
        end
        b2=a(2:2:M);
        c2=zeros(1,0.25*M);
        for j=1:0.25*M
            if b2(2*j-1)==1&b2(2*j)==0
                c2(j)=1;
            elseif b2(2*j-1)==1&b2(2*j)==1
                c2(j)=3;
            elseif b2(2*j-1)==0&b2(2*j)==0
                c2(j)=-1;
            elseif b2(2*j-1)==0&b2(2*j)==1
                c2(j)=-3;
            end
        end
        
        imp1=zeros(1,N);    %产生冲激序列(同相支路)imp1
        imp1(2*L:4*L:N)=c1/dt;
        imp2=zeros(1,N);    %产生冲激序列(正交支路)imp2
        imp2(2*L:4*L:N)=c2/dt;
        IMP1=t2f(imp1);
        IMP2=t2f(imp2);
        si=real(f2t(IMP1.*GT));
        S=t2f(si);
        sq=real(f2t(IMP2.*GT));
        ssi=si.*carry1;   %发送信号同相支路
        ssq=sq.*carry2;   %发送信号正交支路
        ss=ssi+ssq;
        n0=sqrt(sita)*randn(size(t)); %信道噪声
        d=ss+n0;       %接收信号
        r1=d.*carry1;
        r2=d.*carry2;
        Y1=t2f(r1).*GR;
        Y2=t2f(r2).*GR;
        y1=real(f2t(Y1)); 
        y2=real(f2t(Y2)); 
        aa1=y1(2*L:4*L:N);       %同相支路取样
        aaa1=zeros(1,0.5*M);
        for ii=1:0.25*M
            if aa1(ii)>=2
                aaa1(2*ii-1)=1;aaa1(2*ii)=1;
            elseif aa1(ii)>=0
                aaa1(2*ii-1)=1;aaa1(2*ii)=0;
            elseif aa1(ii)>=-2
                aaa1(2*ii-1)=0;aaa1(2*ii)=0;
            elseif aa1(ii)<-2
                aaa1(2*ii-1)=0;aaa1(2*ii)=1;
            end 
        end
        aa2=y2(2*L:4*L:N);       %正交支路取样
        aaa2=zeros(1,0.5*M);
        for jj=1:0.25*M
            if aa2(jj)>=2
                aaa2(2*jj-1)=1;aaa2(2*jj)=1;
            elseif aa2(jj)>=0
                aaa2(2*jj-1)=1;aaa2(2*jj)=0;
            elseif aa2(jj)>=-2
                aaa2(2*jj-1)=0;aaa2(2*jj)=0;
            elseif aa2(jj)<-2
                aaa2(2*jj-1)=0;aaa2(2*jj)=1;
            end 
        end
        aa=zeros(1,M);
        aa(1:2:M)=aaa1;
        aa(2:2:M)=aaa2;
        P1=S.*conj(S)/T;      %发送根号升余弦信号的功率谱
        EP1=(EP1*(loop2-1)+P1+eps)/loop2;
           
        P=Y1.*conj(Y1)/T;      %升余弦信号的功率谱
        EP=(EP*(loop2-1)+P+eps)/loop2;
        n_err=n_err+length(find(aa~=a))  
    end
    Pe(loop1)=n_err/(M*loop2);      %平均误码率=误码总数/(码元数×循环次数)
    figure(3) 
    semilogy(Eb_N0,Pe,'g');
    eb_n0=10.^(Eb_N0/10);
    hold on
    semilogy(Eb_N0,1.5*erfc(sqrt(0.5*eb_n0)));
    axis([0,9,1e-4,1])
    xlabel('Eb/N0')
    ylabel('Pe')
    legend('实际误比特率曲线','理论误比特率曲线')
end

⌨️ 快捷键说明

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