基于Matlab的QAM调制系统仿真设计.docx
《基于Matlab的QAM调制系统仿真设计.docx》由会员分享,可在线阅读,更多相关《基于Matlab的QAM调制系统仿真设计.docx(20页珍藏版)》请在冰豆网上搜索。
基于Matlab的QAM调制系统仿真设计
《通信技术综合实验》
实验报告
题目
基于Matlab的QAM调制
系统仿真
系(院)
计算机科学技术系
专业
通信工程
班级
学生姓名
学号
2011年1月11日
基于Matlab的QAM调制系统仿真
1.引言
随着通信业迅速的发展,传统通信系统的容量已经越来越不能满足当前用户的要求,而可用频谱资源有限,业不能靠无限增加频道数目来解决系统容量问题。
另外,人们亦不能满足通信单一的语音服务,希望能利用移动电话进行图像等多媒体信息的通信。
但由于图像通信比电话需要更大的信道容量。
高效、可靠的数字传输系统对于数字图像通信系统的实现很重要,正交幅度调制QAM是数字通信中一种经常利用的数字调制技术,尤其是多进制QAM具有很高的频带利用率,在通信业务日益增多使得频带利用率成为主要矛盾的情况下,正交幅度调制方式是一种比较好的选择。
为了加深对QAM调制解调数字传输系统的理解,本实验对整个16-QAM基带传输系统的仿真,结构框图如图所示:
2.仿真分析与设计
(1)随机信号的生成
利用Matlab中自带的函数randsrc来产生0、1等概分布的随机信号。
源代码如下所示:
globalN
N=300;
globalp
p=0.5;
source=randsrc(1,N,[1,0;p,1-p]);
(2)星座图映射
将等概分布的0、1信号映射到16QAM星座图上。
每四个bit构成一个码子,具体实现的方法是,将输入的信号进行串并转换分成两路,分别叫做I路和Q路。
再把每一路的信号分别按照两位格雷码的规则进行映射,这样实际上最终得到了四位格雷码。
为了清楚说明,参看表1
表1两位格雷码的映射规律
两位0、1码
映射后(按格雷码)
00
-3
01
-1
11
1
10
3
源代码如下所示:
function[y1,y2]=Qam_modulation(x)
%QAM_modulation
%对产生的二进制序列进行QAM调制
%=====首先进行串并转换,将原二进制序列转换成两路信号
N=length(x);
a=1:
2:
N;
y1=x(a);
y2=x(a+1);
%=====分别对两路信号进行QPSK调制
%======对两路信号分别进行2-4电平变换
a=1:
2:
N/2;
temp1=y1(a);
temp2=y1(a+1);
y11=temp1*2+temp2;
temp1=y2(a);
temp2=y2(a+1);
y22=temp1*2+temp2;
%=======对两路信号分别进行相位调制
a=1:
N/4;
y1=(y11*2-1-4)*1.*cos(2*pi*a);
y2=(y22*2-1-4)*1.*cos(2*pi*a);
%========按照格雷码的规则进行映射
y1(find(y11==0))=-3;
y1(find(y11==1))=-1;
y1(find(y11==3))=1;
y1(find(y11==2))=3;
y2(find(y22==0))=-3;
y2(find(y22==1))=-1;
y2(find(y22==3))=1;
y2(find(y22==2))=3;
(3)插值
为了能够模拟高斯白噪声的宽频谱特性,以及为了能够显示波形生成器(平方根升余弦滤波器)的效果,所以在原始信号中间添加一些0点。
具体实现是分别在信号的I路和Q路中,任意相邻的两个码字之间添加7个0。
源代码如下所示:
functiony=insert_value(x,ratio)
%===============================
%x是待插值的序列,ratio是插值的比例。
%两路信号进行插值
%首先产生一个长度等于ratio倍原信号长度的零向量
y=zeros(1,ratio*length(x));
%再把原信号放在对应的位置
a=1:
ratio:
length(y);
y(a)=x;
(4)波形成形(平方根升余弦滤波器)
为了避免相邻传输信号之间的串扰,多元符号需要有合适的信号波形。
图1中的方波是在本地数字信号处理时常见的波形,但在实际传输时这种方波并不合适。
根据奈奎斯特第一准则,在实际通信系统中一般均使接收波形为升余弦滚降信号。
这一过程由发送端的基带成形滤波器和接收端的匹配滤波器两个环节共同实现,因此每个环节均为平方根升余弦滚降滤波,两个环节合成就实现了一个升余弦滚降滤波。
实现平方根升余弦滚降信号的过程称为“波形成形”,通过采用合适的滤波器对多元码流进行滤波实现,由于生成的是基带信号,因此这一过程又称“基带成形滤波”。
1)平方根升余弦滤波器的冲激响应
基带平方根升余弦滤波器具有以下定义的理论函数
其中:
是奈奎斯特平率,
是滚降系数。
下面给出平方根升余弦滤波器的冲激响应曲线,如图2所示。
图2平方根升余弦滤波器的冲激响应曲线
从上图上不难看出来,平方根升余弦滤波器的冲激响应很显然的引入了符号间干扰(ISI)即它的冲激响应在相邻的抽样点上的值并不象升余弦滤波器那样恒为0。
然而造成这一后果的原因在于,当我们引入平方根升余弦滤波器的时候,就是认为整个信道,也就是说,包括信号发送端的滤波器和信号接收端的滤波器,总体的效果是避免了符号间干扰(ISI),所以,单独看这每一个滤波器,勿庸置疑,它们都是存在着符号间干扰(ISI)的。
2)经过平方根升余弦滤波器后
源代码如下:
%x1、x2是两路输入信号,fd是信号信息位的频率,fs是信号的采样频率
function[y1,y2]=rise_cos(x1,x2,fd,fs)
%生成平方根升余弦滤波器
[yf,tf]=rcosine(fd,fs,'fir/sqrt');
%对两路信号进行滤波
[y1,to1]=rcosflt(x1,fd,fs,'filter/Fs',yf);
[y2,to2]=rcosflt(x2,fd,fs,'filter/Fs',yf);
(5)10倍载波调制
将通过成形滤波器后的信号调制到10倍于原频率的载波上。
由于在仿真的过程中,只能用离散的点来模拟连续信号,因而为了能够显示出一个正弦曲线,至少需要在一个正弦周期内采样到4个以上的点,这里,我们在一个周期内采10个点。
假设最初的0、1信号的频率是1Hz,那么I路和Q路符号传输的频率是1/4Hz,而10倍频是建立在I路或Q路符号频率的基础上,也就是说,载频的频率是2.5Hz。
按照前面的假设,那么相邻两个采样点之间的时间间隔是0.04s。
而一个完整周期内的正弦波形的幅值是相同的,都是对应的这个周期内的I路和Q路线性叠加,调制后的信号为,
其中,
为载波频率。
源代码如下:
%载波调制
%x1,x2代表两路输入信号,f是输入信号的频率,hf是载波的频率
function[t,y]=modulate_to_high(x1,x2,f,hf)
%产生两个中间变量,用来存储插值后的输入信号
yo1=zeros(1,length(x1)*hf/f*10);
yo2=zeros(1,length(x2)*hf/f*10);
n=1:
length(yo1);
%对输入信号分别进行插值,相邻的两个点之间加入9个点,且这9个点的值同第0个点的值相同
yo1(n)=x1(floor((n-1)/(hf/f*10))+1);
yo2(n)=x1(floor((n-1)/(hf/f*10))+1);
%生成输出输出信号的时间向量
t=(1:
length(yo1))/hf*f/10;
%生成载波调制信号
y=yo1.*cos(2*pi*hf*t)-yo2.*sin(2*pi*hf*t);
(6)加入高斯白噪声
将通过成形滤波器后的信号送到具有高斯白噪声特征的加性信道中,相当于在原信号上加入高斯白噪声。
由于高斯白噪声加在了通过插值和滤波后的点上,因此在计算信噪比的时候存在一个信噪比换算的问题。
当我们把仿真得到的误码率曲线同理论的误码率曲线相比较的时候,两者的信噪比的定义必须是一致的。
一致包括两个方面,一是二者均为每bit符号上的信号功率和噪声功率的比值,另一个是信号的功率是指那些信息点上的平均功率,噪声也是指信息点上所对应的噪声的平均功率,但由于噪声的功率谱密度是一个定值,所以噪声的平均功率实际上就是噪声的功率谱密度。
对于第二点,由于所有信号的平均功率和信息点上的信号的平均功率不同,所以需要在加入高斯噪声的时候进行纠正,具体的公式推导如下。
设
是最后理论计算中的信噪比,
是加入高斯白噪声后的整体信号(包括插值后的点)的信噪比,
是每bit信息点的平均能量,
是每bit信号的平均能量,
是噪声的平均功率,现在需要推导出
与
的关系。
;即两个信噪比的比值就是平均能量的比值。
源程序如下:
%对输入的两路信号加高斯白噪声,返回处理后的两路信号,信息点等效bit信噪比为snr的值
function[y1,y2]=generate_noise(x1,x2,snr)
%snr1代表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);
给出加入高斯白噪声的两路信号波形。
(7)匹配滤波器
在数字传输系统中,滤波器是不可缺少的。
滤波器的一个作用是使基带信号频谱成形,例如为了满足奈奎斯特第一准则,基带信号频谱通常采用升余弦滚降形状,这一点在波形成形部分已经有了较详细的介绍。
而滤波器的另一个重要作用是在接收端限制白噪声,将信号频带外的噪声滤掉,减少它对信号正确判决的影响。
为了能够使滤波器输出信噪比在信息抽样时刻的信噪比最大,所以引入了匹配滤波器。
假设匹配滤波器的频率传递函数为
,时域冲激响应为
。
滤波器输入为发送信号与噪声的叠加,即
这里,
为信号,它的频谱函数为
。
为白色高斯噪声,其双边功率谱密度为
。
滤波器的输出为
其中信号部分为
在
时刻输出的信号抽样值为
滤波器输出噪声的功率谱密度为
平均功率为
因此,
时刻的输出信噪比为
匹配滤波器的传递函数使
达到最大。
在这里利用Schwartz不等式求解,最后得到传递函数的表达式为
即传递函数与信号频谱的复共轭成正比。
传递函数的时域响应为
匹配滤波器的最大输出信噪比为
其中,
为观察间隔内的信号能量。
具体到这个通信系统中,由于信号的时域响应为
其中
是平方根升余弦滤波器的冲激响应。
结合上式可以得到
匹配滤波器实质上是一个具有与发射端的基带成形滤波器相同的滚降系数的平方根升余弦滤波器。
接收端的“匹配滤波”是针对发射端的成形滤波而言,与成形滤波相匹配实现了数字通信系统的最佳接收。
它与基带成形滤波器共同构成了一个奈奎斯特滤波器。
源代码同平方根升余弦滤波器的源代码相同。
(8)采样
由于从匹配滤波器出来的信号的点数8倍于原来信息的点数,为了恢复出原信号,所以需要对该信号进行采样。
从匹配滤波器出来时,首先要剔除卷积过程中冗余的点,接着抽取现在信号中的第1个,第9个,……,第8×k+1个点,源代码如下:
function[y1,y2]=pick_sig(x1,x2,ratio)
y1=x1(ratio*3*2+1:
ratio:
length(x1));
y2=x2(ratio*3*2+1:
ratio:
length(x1));
(9)判决解调
经过前边的匹配滤波器解调或者称为相关解调产生了一组向量,在这里就是一个一维的向量,根据最大后验概率(MAP)准则(由于各个信号的先验概率相等,所以页可以认为是最大似然准则),得到了最小距离检测。
具体在本仿真系统中,判断为各个信号的门限如表2所示。
判决后得到的数据再按照格雷码的规则还原成0、1信号,最终将两路0、1信号合成一路0、1信号,用来同最初的信号一起决定误码率。
表2判决电平对应表
判决前的信号的幅度
对应的判决后的幅度
-3
-1
1
3
源代码如下:
functiony=demodulate_sig(x1,x2)
%对x1路信号进行判决
xx1(find(x1>=2))=3;
xx1(find((x1<2)&(x1>=0)))=1;
xx1(find((x1>=-2)&(x1<0)))=-1;
xx1(find(x1<-2))=-3;
%对x2路信号进行判决
xx2(find(x2>=2))=3;
xx2(find((x2<2)&(x2>=0)))=1;
xx2(find((x2>=-2)&(x2<0)))=-1;
xx2(find(x2<-2))=-3;
%将x1路信号按格雷码规则还原成0、1信号
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;
%将x2路信号按格雷码规则还原成0、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;
%将两路0、1信号合成一路
y=zeros(1,length(temp1)*2);
y(1:
2:
length(y))=temp1;
y(2:
2:
length(y))=temp2;
(10)误码率曲线
对于16QAM信号星座图等效为在两个正交载波上的两个PAM信号,其中每一个具有4个信号点。
因为在解调器中可以将相位正交的两个信号分量完全分开,所以QAM的错误概率可以由PAM的错误概率求得。
16QAM系统的正确判决概率是
式中,
是4元PAM的错误概率,在等效QAM系统的每一个正交信号中,4元PAM具有一半的平均功率,通过适当的修改4元PAM的错误概率,可以得到
其中
是平均符号SNR。
因此,16QAM的错误概率是
具体的源代码如下:
M=16;
k=log2(M);
n=3e4;
x=randint(n,1);
xsym=bi2de(reshape(x,k,length(x)/k).','left-msb');
y=qammod(xsym,M);
ytx=y;
EbNo=-5:
0.5:
10;
fori=1:
length(EbNo)
snr=(i-1)*0.5-5+10*log10(k);
ynoisy=awgn(ytx,snr,'measured');
yrx=ynoisy;
zsym=qamdemod(yrx,M);
z=de2bi(zsym,'left-msb');
z=reshape(z.',prod(size(z)),1);
[number(i),Pe(i)]=biterr(x,z);
end
theoryBer=(1/k)*3/2*erfc(sqrt(k*0.1*(10.^(EbNo/10))));
semilogy(EbNo,Pe,'bs-','LineWidth',2);
holdon;
semilogy(EbNo,theoryBer,'ms-','LineWidth',2);
legend('theory','simulation');
xlabel('Eb/No,dB')
ylabel('BitErrorRate')
title('Biterrorprobabilitycurvefor16-QAMmodulation')
3.系统仿真分析
随机信号波形图
星座图
从上边的星座图上可以清楚的看到,任意相邻的两个点之间它们对应的4个bit中只有一个有差别,也就是格雷码的特点。
而采用格雷码主要目的是当信噪比较大时,也就是系统的误码率比较低的情况下,当出现一个符号错误的情况下,往往只是这个符号中的一个bit位出现了误码,因此这个情况下误码率和误bit率是4:
1,这一特性在后边的误码率计算的过程中会有应用。
经过插值后的两路信号波形图
I路和Q路信号经过平方根升余弦滤波器后,成形后的波形如图所示
通过平方根升余弦滤波器后的两路信号
载波调制信号展开图
加入高斯白噪声的两路信号波形
经过匹配滤波器后的波形
将采样的数据映射到星座图上
星座图
解调出来的序列
从图中可以看出解调出来的信号与输入信号图基本一致。
误码率曲线图
较为接近地反映了误码率与Eb/No的关系。