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

📄 qam.m

📁 QAM调制的MATLAB仿真程序
💻 M
字号:
%数字通信QAM仿真
clear
%产生基带符号流
M=16;       %进制 16QAM
N=40;       %信源比特流长度,为保证对齐,选择是log2(M)的整倍数
bitstream=zeros(1,N);
symbolstream=zeros(1,N/log2(M));
for n1=1:N
    bitstream(n1)=binornd(1,0.5,1,1);
end
%格雷码编码
for n1=1:length(symbolstream)
    pack=[bitstream(4*(n1-1)+1) bitstream(4*(n1-1)+2) bitstream(4*(n1-1)+3) bitstream(4*(n1-1)+4)];
    if  pack==[0 0 0 0]
        symbolstream(n1)=1+j;
    elseif  pack==[0 0 1 0]
        symbolstream(n1)=2+j;
    elseif  pack==[0 0 1 1]
        symbolstream(n1)=2+2j;
    elseif  pack==[0 0 0 1]
        symbolstream(n1)=1+2j;
    elseif  pack==[0 1 0 1]
        symbolstream(n1)=-1+2j;
    elseif  pack==[0 1 0 0]
        symbolstream(n1)=-1+j;
    elseif  pack==[0 1 1 1]
        symbolstream(n1)=-2+2j;
    elseif  pack==[0 1 1 0]
        symbolstream(n1)=-2+j;
    elseif  pack==[1 1 1 0]
        symbolstream(n1)=-2-j;
    elseif  pack==[1 1 1 1]
        symbolstream(n1)=-2-2j;
    elseif  pack==[1 1 0 1]
        symbolstream(n1)=-1-2j;
    elseif  pack==[1 1 0 0]
        symbolstream(n1)=-1-j;
    elseif  pack==[1 0 0 0]
        symbolstream(n1)=1-j;
    elseif  pack==[1 0 1 0]
        symbolstream(n1)=2-j;
    elseif  pack==[1 0 0 1]
        symbolstream(n1)=1-2j;
    else symbolstream(n1)=2-2j;
    end
end
figure(1)
hold on
for n1=-2:2
    for n2=-2:2
        if ~((n1==0)|(n2==0)) 
            scatter(n1,n2);
        end
    end
end
axis([-3 3 -3 3]);
hold off
title('16QAM星座图');
xlabel('同相支路')
ylabel('正交支路')
%产生载波
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);
%产生信号脉冲g(t)
%gt=ones(1,length(carrier));
gt=1-cos(2*pi*(1/T)*t);

%生成调制信号S(t)
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(2)
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(3)
F=0:fs/(2*length(S_spectrum)):fs/2-fs/(2*length(S_spectrum));
plot(F,10*log10(S_spectrum))
axis([0 50 -70 60]);
title('QAM信号功率谱密度')
xlabel('频率/Hz')
ylabel('功率')
figure(4)
index=400:1600;
plot(F(index),10*log10(S_spectrum(index)));
axis([4 16 0 60]);
title('QAM信号功率谱密度在载频附近的放大图')
xlabel('频率/Hz')
ylabel('功率')

⌨️ 快捷键说明

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