v1.0 可编辑可修改
四、实验结果及分析
编程实现16QAM调制
x=randint(n,1);
产生一个n=1000的随机信号,画出该序列(1:50)的时域波形如下图。
x4=reshape(x,k,length(x)/k); xsym=bi2de(x4.','left-msb');
将原始的二进制比特序列每四个一组分组并排列成k行length(x)/k列的矩,将矩阵转化为相应的16进制信号序列
y=modulate(M),xsym);
1111
v1.0 可编辑可修改 令M=16,用QAM调制器对信号进行16QAM调制,星座图如下
yn=awgn(y,snr,'mea
sured');
h=scatterplot(yn,samp,0,'b.');
加入高斯白噪声,经过信道后接收到的含白噪声的信号星座图如下
1212
v1.0 可编辑可修改
yd=demodulate(M),yn);
z=de2bi(yd,'left-msb'); z=reshape(z.',numel(z),1');
此时解调出来的是16进制信号,转化为对应的二进制比特流,解调后的序 列如下图
1313
v1.0 可编辑可修改
五、实验总结
此次实验利用MATLAB集成环境下的M文件,编写程序来实现16QAM的调制解调,并绘制出原始信号,调制后的星座图,叠加噪声时的星座图及解调后的序列。通过此次实验,进一步了解了QAM调制与解调原理,加深了关于正交调幅方面的理论知识,加强了MATLAB软件的操作能力,对以后的实验操作打下了基础。
附录:源程序代码 clear;clc; M=16; k=log2(M);
n=100000; %比特序列长度 samp=1; %过采样率
x=randint(n,1); %生成随机二进制比特流
1414
v1.0 可编辑可修改 stem(x(1:50),'filled'); %画出相应的二进制比特流信号 title('二进制随机比特流');
xlabel('比特序列');ylabel('信号幅度'); %
x4=reshape(x,k,length(x)/k); %将原始的二进制比特序列每四个一组分组,并排列成k行length(x)/k列的矩阵
xsym=bi2de(x4.','left-msb'); %将矩阵转化为相应的16进制信号序列 figure;
stem(xsym(1:50)); %画出相应的16进制信号序列 title('16进制随机信号');
xlabel('信号序列');ylabel('信号幅度');
y=modulate(M),xsym); %用16PSK调制器对信号进行调制 scatterplot(y); %画出16PSK信号的星座图 text(real(y)+,imag(y),dec2bin(xsym)); axis([-5 5 -5 5]);
EbNo=15; %假设Eb/No=15db snr=EbNo+10*log10(k)-10*log10(samp); %信噪比 yn=awgn(y,snr,'measured'); % 加入高斯白噪声
h=scatterplot(yn,samp,0,'b.'); %经过信道后接收到的含白噪声的信号星座图
1515