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

📄 test_16qam.asv

📁 在matlab下输入guide命令后打开main_main.gig 实现卷积编码
💻 ASV
字号:
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;   %频域横坐标

carry1=sqrt(2)*cos(2*pi*fc*t);  %同相载波
carry2=-sqrt(2)*sin(2*pi*fc*t); %正交载波

figure(1)
set(1,'Position',[50,100,400,600])

figure(2)
set(2,'Position',[500,100,400,600])
figure(4)
set(4,'Position',[500,100,400,600])

%升余弦
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取平均值
        a=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,0.5*erfc(sqrt(eb_n0)));
    axis([0,9,1e-4,1])
    xlabel('Eb/N0')
    ylabel('Pe')
    legend('16QAM误比特率曲线','2PSK误比特率曲线')
end

figure(1)							%调制解调信号的波形
subplot(2,1,1)					%发送的调制信号
plot(t/Ts,ssi);
hold on
xlabel('t/Ts');
ylabel('信号幅度');
axis([-5,5,-5,5]);				%只取20个码元进行观察
title('16QAM同相支路信号');
plot(t/Ts,si*sqrt(2),'g');
plot(t/Ts,-si*sqrt(2),'g');


subplot(2,1,2)					%接收的解调信号
plot(t/Ts,y1/sqrt(2));
xlabel('t/Ts');
ylabel('信号幅度');
axis([-5,5,-3,3]);				%只取20个码元进行观察
title('同相支路解调信号波形)');

figure(2)
subplot(2,1,1);
plot(f,30+10*log10(EP1),'g');
axis([-3,+3,-50,50])
xlabel('f (MHz)')
ylabel('Ps(f)  (dBm/MHz)')
title('调制信号功率谱密度')


subplot(2,1,2);    %画眼图
hold on
tt=[0:dt:Na*L*dt];
for jj=1:Na*L:N-Na*L
    plot(tt,si(jj:jj+Na*L)); 
    xlabel('t in us')
    ylabel('y(t) in V')
    title('调制信号眼图')
end
figure(4)
subplot(2,1,1);
plot(f,30+10*log10(EP),'g');
axis([-3,+3,-50,50])
xlabel('f (MHz)')
ylabel('Ps(f)  (dBm/MHz)')
title('解调信号功率谱密度')


subplot(2,1,2);    %画眼图
hold on
tt=[0:dt:Na*L*dt];
for jj=1:Na*L:N-Na*L
    plot(tt,y1(jj:jj+Na*L)); 
    xlabel('t in us')
    ylabel('y(t) in V')
    title('解信号眼图')
end

figure(5)
subplot(2,1,1)
stem(c1,c2,'filled');
grid on
axis([-5,5,-5,5]);

subplot(2,1,2)
stem(aa1,aa2,'filled');
grid on
axis([-5,5,-5,5]);

⌨️ 快捷键说明

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