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

📄 qam_16.m

📁 16QAM的MATLAB源程序
💻 M
字号:
clear
d=1;
M=16;
k=log2(M);
fc=10;                          %载波频率
fs=100;                         %采样频率
T=1;                            %每符号持续时间
N_samples=T*fs;                 %每符号内的采样点数
t=0:T/N_samples:(T-T/N_samples);
carrier=exp(j*2*pi*fc*t);

gt=ones(1,length(carrier));     %产生信号脉冲g(t)
N=32;
for i=1:N
    temp=rand;
    dsource(i)=1+floor(M*temp);
end

mapping=[-3*d  3*d;
         -d    3*d;
         d     3*d;
         3*d   3*d;
         -3*d  d;
         -d    d;
         d     d;
         3*d   d;
         -3*d  -d;
         -d    -d;
         d     -d;
         3*d   -d;
         -3*d  -3*d;
         -d    -3*d;
         d     -3*d;
         3*d   -3*d];
for i=1:N
    j=sqrt(-1);
    qam_sig(i,:)=mapping(dsource(i),:);
    symbolstream(i)=qam_sig(i,1)+j*qam_sig(i,2);
end
St_complex=zeros(1,length(carrier)*length(symbolstream));
for n1=1:length(symbolstream)
    St_complex((N_samples*(n1-1)+1):(N_samples*(n1-1)+N_samples))=(symbolstream(n1)*carrier).*gt;
end
figure(1)
St_real=real(St_complex);
plot(St_real)
title('QAM仿真波形图 载波10Hz g(t)为矩形脉冲');
xlabel('采样点')
ylabel('幅度')
                       %求出功率谱,这种功率谱不是按照公式直接计算的
                       %而是对所产生的一段时间内的信号的采样点进行FFT所得到的
spectrum=(real(fft(St_real,10*length(St_real)))).^2;
S_spectrum=spectrum(1:length(spectrum)/2);
figure(2)
F=0:fs/(2*length(S_spectrum)):fs/2-fs/(2*length(S_spectrum));
plot(F,10*log10(S_spectrum))
axis([0 50 -30 70]);
title('QAM信号功率谱密度')
xlabel('频率/Hz');
ylabel('功率');
%生成星座图。
figure(3)
a=[-3 -1 1 3];b=[-3 -1 1 3];
hold on
for i=1:4
    for j=1:4       
        scatter(a(i),b(j));       
    end
end
axis([-4 4 -4 4]);
hold off
title('16QAM星座图');
xlabel('同相支路');
ylabel('正交支路');
%对不同信噪比情况下的性能仿真
echo on
SNRindB1=0:2:15;
SNRindB2=0:0.1:15;

for i=1:length(SNRindB1)
    smld_err_prb(i)=cm_sm(SNRindB1(i));
    echo off;
end
echo on;
for i=1:length(SNRindB2)
    SNR=exp(SNRindB2(i)*log(10)/10);
    theo_err_prb(i)=4*Qfunct(sqrt(3*k*SNR/(M-1)));
    echo off;
end
echo on;
figure(4)
semilogy(SNRindB1,smld_err_prb,'*');
hold
semilogy(SNRindB2,theo_err_prb);





    
    






⌨️ 快捷键说明

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