方形16QAM的C语言仿真
本文首先给出16QAM的原理,再给出对应方形星座的C语言设计过程,并附代码。
一、16QAM调制方式原理
为改善进制数较大情况下噪声容限减小的问题,发展出了QAM技术。QAM表示正交幅度调制,其对振幅和相位两个参量同时调制,其具有很高的频谱利用率和抗干扰能力,但对器件参数要求较高。
研究QAM技术主要从其最明显的特征——星座图入手。一般的,我们可以将QPSK视为4QAM,其为最简单的QAM,扩展至16QAM,对比其信号矢量图如下:
可以将16QAM视为两个交错的4ASK。对于每一个点的编码,可以分为对两个4ASK进行级联编码,按格雷码编码如下图所示:
使用格雷码按照上图顺序进行编码可以保证横,纵只有一比特位改变,在保证误码率不变的情况下将减小误比特率。
方形16QAM星座的噪声容限相较于星型16QAM的噪声容限要大,但在衰落信道中,由于星型16QAM的相位,幅度值少,故性能要更好。但是在调制解调的复杂度上,方形更好。
二、16QAM仿真程序
只需要将信号按照两路4ASK在调制判决即可。对于高斯噪声的添加原理,请参考以下博客的第二节:
BPSK,QPSK的C语言仿真
这里信噪比中的Eb计算如下:
方形16QAM的信号平均功率为:
P = A 2 M ∑ n = 1 M ( c n 2 + d n 2 ) = 10 A 2 P = \frac{
{
{A^2}}}{M}\sum\limits_{n = 1}^M {\left( {
{c_n}^2 + {d_n}^2} \right)} = 10{A^2} P=MA2n=1∑M(cn2+dn2)=10A2
程序内设置 A = 1 A=1 A=1,则单位信号能量为10,则单位比特能量为2.5。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#define pi 3.14159265
#define data_len 1000000 //比特长
#define M 4 //进制数
#define k 16 //符号比特
#define N 2 //正交路 I Q
#define symbol_len data_len / M
#define EbN0_dB_MAX 15
int data_bfcoding[data_len];
int symbol_bfcoding[M][symbol_len];
double symbol_coding