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

📄 qam16.m

📁 在matlab下输入guide命令后打开main_main.gig 实现卷积编码
💻 M
字号:


%本程序中时间单位是微秒
%频率单位为MHz
%码速率单位是Mb/s

global dt t f df N T
close all
clear Eb_N0 Pe

N=2^13; %采样点数
L=32;    %每码元的采样点数
M=N/L   %码元数
Rb=2;		%码速率是2Mb/s
Tb=1/Rb;        %码元间隔
Ts=4/Rb;        %每一支路码元间隔
dt=Tb/L;        %时域采样间隔
df=1/(N*dt)     %频域采样间隔
T=N*dt          %截短时间
Bs=N*df/2       %系统带宽
alpha=0.5 	    %滚降系数
fc=10*Rb;       %载波频率

t=[-T/2+dt/2:dt:T/2];  %每一支路时域横坐标
f=[-Bs+df/2:df:Bs];    %每一支路频域横坐标

%升余弦
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;

%产生冲激序列
a=round(rand(1,M));
a1=zeros(1,M/2); %串并变换
a2=zeros(1,M/2);
ac=zeros(1,M/4); %数摸变换
as=zeros(1,M/4);

%噪声    
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;     %误码计数
    for i=1:M/2
        a1(i)=a(2*i-1);    
    end
    
    
    for k=1:M/4
        if (a1(2*k-1)==0)&(a1(2*k)==0),   %数摸变换
            ac(k)=-3;
        elseif (a1(2*k-1)==0)&(a1(2*k)==1),
            ac(k)=-1;
        elseif (a1(2*k-1)==1)&(a1(2*k)==1),
            ac(k)=1;
        else (a1(2*k-1)==1)&(a1(2*k)==0),
            ac(k)=3;
        end
    end
    imp1=zeros(1,N);    %产生冲激序列
    imp1(2*L:4*L:N)=ac/dt;
    IMP1=t2f(imp1);
    
    %%第二路
    for j=1:M/2;
        a2(j)=a(2*i);
        %         m=2i-1;    
    end
    
    for m=1:M/4
        if (a1(2*m-1)==0)&(a1(2*m)==0),   %数摸变换
            as(m)=-3;
        elseif (a1(2*m-1)==0)&(a1(2*m)==1),
            as(m)=-1;
        elseif (a1(2*m-1)==1)&(a1(2*m)==1),
            as(m)=1;
        else (a1(2*m-1)==1)&(a1(2*m)==0),
            as(m)=3;
        end
    end
    imp2=zeros(1,N);    %产生冲激序列
    imp2(2*L:4*L:N)=as/dt;
    IMP2=t2f(imp2);
    
    
    It=f2t(IMP1.*GT);
    Qt=f2t(IMP2.*GT);
    s1=It.*(cos(2*pi*fc*t));
    s2=-Qt.*(sin(2*pi*fc*t));
    Qam=It.*(sqrt(2)*cos(2*pi*fc*t))-Qt.*(sqrt(2)*sin(2*pi*fc*t));%Qam表示输出的时域波形
    %%%%%%%%%%%%%%%%%%%%%%%%调制完成%%%%%%%%%%%%%%%%%%%
    % %噪声    
    % 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;     %误码计数
    
    for loop2=1:5 
        n_ch=sqrt(sita)*randn(size(t)); %信道噪声
        
        s=Qam+n_ch;
        %%%%%%%%%%%%%%%%%%%%%%%%开始解调%%%%%%%%%%%%%%%%%%%       
        s1=s.*cos(2*pi*t); 
        s2=s.*(-sin(2*pi*t));
        r1=real(f2t(t2f(s1).*GR));   %解调信号1
        r2=real(f2t(t2f(s2).*GR));   %解调信号2
        y1=r1(2*L:4*L:N);		  %取样1
        y2=r2(2*L:4*L:N);		  %取样2
        
        %%%%%%%%%%%判决%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        aa1=zeros(1,M/2); %并串变换
        aa2=zeros(1,M/2);
        for ii=1:M/4
            if y1>=2       %判决1
                aa1(2*ii-1)=1;
                aa1(2*ii)=0;
            elseif y1<2&y1>0
                aa1(2*ii-1)=1;
                aa1(2*ii)=1;
            elseif y1<0&y1>-2
                aa1(2*ii-1)=0;
                aa1(2*ii)=1;
            else
                aa1(2*ii-1)=0;
                aa1(2*ii)=0;
            end
        end
        
        for jj=1:M/4
            if y2>=2       %判决2
                aa2(2*jj-1)=1;
                aa2(2*jj)=0;
            elseif y2<2&y2>=0
                aa2(2*jj-1)=1;
                aa2(2*jj)=1;
            elseif y2<0&y2>=-2
                aa2(2*jj-1)=0;
                aa2(2*jj)=1;
            else
                aa2(2*jj-1)=0;
                aa2(2*jj)=0;
            end
        end    
        
        c=zeros(1,M);%并串变换
        for n=1:2:M-1
            c(n)=aa1((n+1)/2);
            c(n+1)=aa2((n+1)/2);
        end
        
    end   
    figure(1)             %画星座图
    
    subplot(2,1,1)
    stem(ac,as,'filled');
    grid on
    axis([-5,5,-5,5]);
end

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

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

⌨️ 快捷键说明

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