正交幅度调制(QAM)及解调Matlab仿真分解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
正交幅度调制(QAM)及解调Matlab仿真实验目的:
1.掌握QAM及解调原理与特性;
2.了解星座图的原理及用途。
实验内容:
1.编写MATLAB程序仿真QAM及相干解调;
2.观察I、Q两路基带信号的特征及与输入NRZ码上网关系;
3.观察I、Q调制过程中信号的变化;
4.观察星座图在不同噪声环境下的变化;
5.分析仿真中观察的数据,撰写实验报告。
仿真代码:
function project(N,p)
%N为待仿真序列的长度
%p为产生1的概率
%======================
%首先产生随机二进制序列
N=input('输入二进制序列的长度:N=');
p=input('输入产生1的概率:');
source=randsrc(1,N,[1,0;p,1-p]);
figure(1);
stem(source);
axis([1 N -1 2]);
%对产生的二进制序列进行QAM调制
[source1,source2]=Qam_modulation(source);
%===============================
%画出星座图
figure(2);
plot_astrology(source1,source2);
%==============================
%两路信号进行插值(8倍过采样)
sig_insert1=insert_value(source1,8);
sig_insert2=insert_value(source2,8);
%================================
%画出两路信号的波形图
figure(3);
plot_2way(sig_insert1,sig_insert2,length(sig_insert1),0.5);
title('两路信号波形');
%================================
%通过低通滤波器
[sig_rcos1,sig_rcos2]=rise_cos(sig_insert1,sig_insert2,0.25,2);
%================================
%画出两路信号信号波形图
figure(4);
plot_2way(sig_rcos2,sig_rcos2,length(sig_rcos1)/4,0.5);
title('通过低通滤波器后两路信号波形图')
hold on
stem_2way(sig_insert1,sig_insert2,3,0.25,2,length(sig_rcos1)/4); %================================
%将基带信号调制到高频上
[t,sig_modulate]=modulate_to_high(sig_rcos1,sig_rcos2,0.25,2.5); figure(5);
plot(t(1:500),sig_modulate(1:500));
title('载波调制信号图');
%================================
%将滤波后的信号加入高斯噪声
snr=10;
[x1,x2]=generate_noise(sig_rcos1,sig_rcos2,snr);
sig_noise1=x1';
sig_noise2=x2';
figure(6);
plot_2way(sig_noise1,sig_noise2,length(sig_noise1)/4,0.5);
title('加入高斯白噪声后的两路信号波形');
%================================
%经过匹配滤波器
[sig_match1,sig_match2]=rise_cos(sig_noise1,sig_noise2,0.25,2); figure(7);
plot_2way(sig_match1,sig_match2,length(sig_match1)/4,0.5); title('经过匹配滤波器后');
%================================
%采样
[x1,x2]=pick_sig(sig_match1,sig_match2,8);
sig_pick1=x1;
sig_pick2=x2;
%画出星座图
figure(8)
plot_astrology(sig_pick1,sig_pick2);
%================================
%解调
signal=demodulate_sig(sig_pick1,sig_pick2);
r=signal;
%画出解调后的信号
figure(9);
stem(r);
axis([1 N -1 2]);
demodulate_sig
function y=demodulate_sig(x1,x2)
%解调
xx1(find(x1>=2))=3;
xx1(find((x1<2)&(x1>=0)))=1;
xx1(find((x1>=-2)&(x1<0)))=-1;
xx1(find(x1<-2))=-3;
xx2(find(x2>=2))=3;
xx2(find((x2<2)&(x2>=0)))=1;
xx2(find((x2>=-2)&(x2<0)))=-1;
xx2(find(x2<-2))=-3;
temp1=zeros(1,length(xx1)*2);
temp1(find(xx1==-1)*2)=1;
temp1(find(xx1==1)*2-1)=1;
temp1(find(xx1==1)*2)=1;
temp1(find(xx1==3)*2-1)=1;
temp2=zeros(1,length(xx2)*2);
temp2(find(xx2==-1)*2)=1;
temp2(find(xx2==1)*2-1)=1;
temp2(find(xx2==1)*2)=1;
temp2(find(xx2==3)*2-1)=1;
n=length(temp1);
for i=1:2:2*n-1
y(i)=temp1((i+1)/2);
y(i+1)=temp2((i+1)/2);
end
generate_noise
function [y1,y2]=generate_noise(x1,x2,snr)
snr1=snr+10*log10(4);
ss=var(x1+i*x2,1);
y=awgn([x1+j*x2],snr1+10*log10(ss/10),'measured'); y1=real(y);
y2=imag(y);
insert_value