方形16QAM的C语言仿真

方形16QAM的C语言仿真

本文首先给出16QAM的原理,再给出对应方形星座的C语言设计过程,并附代码。

一、16QAM调制方式原理

为改善进制数较大情况下噪声容限减小的问题,发展出了QAM技术。QAM表示正交幅度调制,其对振幅和相位两个参量同时调制,其具有很高的频谱利用率和抗干扰能力,但对器件参数要求较高。
研究QAM技术主要从其最明显的特征——星座图入手。一般的,我们可以将QPSK视为4QAM,其为最简单的QAM,扩展至16QAM,对比其信号矢量图如下:
星座图对比
可以将16QAM视为两个交错的4ASK。对于每一个点的编码,可以分为对两个4ASK进行级联编码,按格雷码编码如下图所示:
16QAM星座图编码使用格雷码按照上图顺序进行编码可以保证横,纵只有一比特位改变,在保证误码率不变的情况下将减小误比特率。

方形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=1M(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[
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值