基于IT++的QAM调制解调算法的实现

2015-05-30 10:48杨柳赵勇杨洪元袁伟娜
软件工程 2015年6期

杨柳 赵勇 杨洪元 袁伟娜

摘 要:信息传输的核心问题是有效性和可靠性,正交幅度调制(QAM)作为一种新的调制技术因其具有很高的频带利用率而得到广泛应用。IT++是基于C++语言的信号处理和通信方面的仿真库函数工具。本文分析和研究了M-QAM调制在IT++平台中的实现方法,并比较了不同M值的QAM的性能。仿真结果与理论分析一致,与MATLAB相比极大地提高了仿真速度。

关键词:IT++;QAM;调制

中图分类号:TN911.3 文献标识码:B

1 引言(Introduction)

提高频谱利用率一直是现在通信中人们关注的焦点之一,寻找频谱利用率较高的数字调制方式随着通信业务需求的迅速增长已经成为数字通信系统研究和设计的主要目标之一。正交振幅调制(Quadrature Amplitude Modulation,QAM)是一种振幅和相位联合键控[1],它是一种频谱利用率很高的调制方式,其在有线电视网络高速数据传输、大中容量数字微波通信系统、卫星通信等各个领域均得到了广泛的应用[2]。

随着通信技术的迅猛发展,无线通信系统的功能越来越强、性能越来越高。另一方面,通信系统技术研究和产品开发的周期越来越短。强大的计算机辅助分析设计技术和仿真工具的出现为解决以上两个问题提供了有力的支撑。目前,进行通信仿真的软件主要采用Simulink/MATLAB和C/C++,二者各有优点。MATLAB因其在处理向量以及矩阵方面功能强大,人机界面友好,编程效率高,拥有强大而智能化的画图功能,进行较小规模的仿真十分方便。C/C++因其通用性强,接近底层,运行效率很好,被广泛应用于较大规模平台的仿真。

IT++库是由瑞典查尔姆斯理工大学(Chalmers University of Technology)前信息理论系创建的,主要用于模拟通信系统并进行通信相关领域的研究。由于在编写类库时使用的是C++语言,故命名为IT++。IT++作为C++的一个库,拥有许多类似MATLAB的向量、矩阵、数学、信号处理和通信的类和函数,结合了两者的优点,能够快速、方便地进行通信系统的仿真[3]。

本文将基于IT++实现QAM的调制与解调。

2 基于IT++的QAM调制解调算法实现(An

implementation of QAM modulation/

demodulation algorithm based on IT++)

2.1 QAM类介绍

在IT++中,QAM类所包含的各成员函数将实现比特流或符号到QAM星座点的映射及解映射过程。该类itpp::QAM与通用调制类的继承关系如图1所示。

图1 QAM类继承图

Fig.1 Inheritance diagram of class QAM

QAM类用来实现方形M阶QAM调制器,使用此类需添加头文件:

#include[4]

QAM星座的大小是,这里k=1,2,...。每维符号值为。比特到符号的映射表采用格雷编码,且符号是归一化处理的,即平均能量是1,归一化因子为。

2.2 实现过程

程序实现模块框图如图2和图3所示。其中,比特调制模块主要用于计算误码率,符号调制模块用于绘制星座图。

图2 比特调制模块框图

Fig.2 Flow chart of'bit modulation'

图3 符号调制模块框图

Fig.3 Flow chart of'symbol modulation'

上述模块在程序中的实现代码见表1到表4。

表1 信号产生模块

Tab.1 Signal generating module

功能 实现代码

设定发送符号个数 const int no_symbols=10000;

设定每符号的比特数 int bps=round_i(qam.bits_per_symbol());

产生发送比特 bvec tx_bits=randb(no_symbols*bps);

产生发送符号 ivec tx_sym_numbers=randi(no_symbols,0, pow2i(bps)-1);

表2 调制模块

Tab.2 Modulation module

功能 实现代码

初始化QAM调制类型 QAM qam(16);

比特调制 tx_symbols=qam.modulate_bits(rx_symbols);

符号调制 cvec tx_symbols=qam.modulate(tx_sym_numbers);

表3 噪声模块

Tab.3 Additive noise module

功能 实现代码

设置噪声功率 const double N0=0.01

产生噪声 cvec noise=sqrt(N0)*randn_c(no_symbols);

接收符号 cvec rx_symbols=tx_symbols+noise;

表4 解调模块

Tab.4 Demodulation module

功能 实现代码

比特硬解调 bvec decbits=qam.demodulate_bits(rx_symbols);

AWGN信道软比特近似解调 vec softbits_approx=qam.demodulate_soft_bits (rx_symbols,N0,APPROX);

AWGN信道软比特Log-MAP解调 vec softbits=qam.demodulate_soft_bits (rx_symbols,N0,LO GMAP);

3 仿真结果(Simulation results)

基于IT++平台,以16QAM和64QAM为例,分别仿真了SNR=20dB和SNR=30dB时系统的误码率性能,并绘制了星座图,如图4到图6所示。在相同SNR下,高阶调制的误码率性能差于低阶调制。对相同阶数QAM调制,SNR越大,星座图越清晰,系统性能越好。

a.16QAM星座图

a.Constellations for 16QAM

b.添加噪声后的16QAM星座图(SNR=20dB)

b.Constellations for 16QAM with AWGN(SNR=20dB)

c.添加噪声后的16QAM星座图(SNR=30dB)

c.Constellations for 16QAM with AWGN(SNR=30dB)

图4 不同SNR下16QAM调制星座图

Fig.4 Constellations for 16QAM with different SNRs

a.64QAM星座图

a.Constellation for 64QAM

b.添加噪声后的64QAM星座图(SNR=20dB)

b.Constellations for 64QAM with AWGN(SNR=20dB)

c.添加噪声后的64QAM星座图(SNR=30dB)

c.Constellations for 64QAM with AWGN(SNR=30dB)

图5 不同SNR下64QAM调制星座图

Fig.5 Constellations for 64QAM with different SNRs

图6 16QAM、64QAM、256QAM误码率对比图

Fig.6 BER comparison between 16QAM,64QAM and 256QAM

4 结论(Conclusion)

本文采用IT++库这一新型工具,详细研究了QAM调制解调的各个步骤,最终得到与理论一致的仿真结果。以16QAM调制为例,仿真点数为100000bit,基于IT++平台运行时间约为14s,与MATLAB相比极大地提高了仿真速度。本文以QAM调制为例进行了研究,后续可以扩展到链路级,甚至系统级仿真,由此可以看出这一工具具有很大的研究空间和发展前景。

参考文献(References)

[1] 樊昌信,曹丽娜.通信原理(第7版)[M].北京:国防工业出版社,2012.

[2] 朱泳霖,QAM调制解调技术研究及其FPGA实现[D].长沙:中南大学,2010.

[3] 刘林,王平,陈红.无线通信系统仿真.IT++分析与实例[M].北京:电子工业出版社,2012.

[4] IT++源代码(4.3.1)[DB/OL].[2015-4-8]http://itpp.sourceforge.net/4.3.1/files.html.

作者简介:

杨 柳(1993-),男,本科生.研究领域:无线通信理论.

赵 勇(1993-),男,本科生.研究领域:无线通信理论.

杨洪元(1991-),男,本科生.研究领域:无线传感器网络技术.

袁伟娜(1979-),女,博士,副教授.研究领域:无线通信理论

与关键技术.