随着现代通信技术的发展,特别是移动通信技术高速发展,新的需求层出不穷,促使新的业务不断产生,因而导致频率资源越来越紧张。在有限的带宽里要传输大量的多媒体数据,频谱利用率成为当前至关重要的课题,由于具有高频谱利用率、高功率谱密度等优势,16QAM技术被广泛应用于高速数据传输系统.在很多宽带应用领域,比如数字电视广播,Internet宽带接入,QAM系统都得到了广泛的应用。QAM也可用于数字调制。数字QAM有4QAM、8QAM、16QAM、32QAM等调制方式。其中,16QAM和32QAM广泛用于数字有线电视系统。当今国际市场上出现了采用16QAM调制技术的卫通调制解调器,如美国COMTECH EF DATA公司新推出的CDM-600。该卫通调制解调器支持速率高达20Mbps[1]。
无线通信技术的迅猛发展对数据传输速率、传输效率和频带利用率提出了更高的要求。选择高效可行调制解调手段,对提高信号的有效性和可靠性起着至关重要的作用。由于QAM已经成为宽带无线接入和无线视频通信的重要技术方案。关于调制解调技术的仿真研究对于QAM理论研究和相关产品开发具有重要意义。
QAM信号用正交相干解调方法进行解调,通过解调器将QAM信号进行正交相干解调后,用低通滤波器LPF滤除乘法器产生的高频分量,输出抽样判决后可恢复出的两路独立电平信号,最后将多电平码元与二进制码元间的关系进行转换,将电平信号转换为二进制信号,经并/串变换后恢复出原二进制基带信号。
(2)16QAM
16QAM产生的原理图
(1)首先生成一个随机且长度为10000的二进制比特流,并画出了前50个比特的信号图(如图17所示)。
(2)在MATLAB中16QAM调制器要求输入的信号为0-15这16个值,所以需要用函数reshape和bi2de将二进制的比特流转换为对应的十六进制信号。
(3)利用MATLAB中的modem.qammod函数生成16QAM调制器,再通过其对信号进行调制并画出信号的星座图。
(4)通过awgn 信道在16QAM信号中加入高斯白噪声(假设Eb/No=15db)。
(5)利用MATLAB中的scatterplot函数画出通过信道后接受到的信号的星座图。
(6)利用MATLAB中的eyediagram函数生成经过信道后的眼图。
(7)利用MATLAB中的demodulate和modem.qamdemod函数生成解调器对16QAM信号的解调,并将十六进制信号转化成二进制比特流信息。
(8)用得到比特流信息除以原始发送的比特流信息来计算误码率。
M=16;
k=log2(M);
n=100000; %比特序列长度
samp=1; %过采样率
x=randint(n,1); %生成随机二进制比特流
stem(x(1:50),'filled'); %画出相应的二进制比特流信号
title('二进制随机比特流');
xlabel('比特序列');ylabel('信号幅度');
x4=reshape(x,k,length(x)/k); %将原始的二进制比特序列每四个一组分组,并排列成k行length(x)/k列的矩阵
xsym=bi2de(x4.','left-msb'); %将矩阵转化为相应的16进制信号序列
figure;
stem(xsym(1:50)); %画出相应的16进制信号序列
title('16进制随机信号');
xlabel('信号序列');ylabel('信号幅度');
y=modulate(modem.qammod(M),xsym); %用16QAM调制器对信号进行调制
scatterplot(y); %画出16QAM信号的星座图
text(real(y)+0.1,imag(y),dec2bin(xsym));
axis([-5 5 -5 5]);
EbNo=15;
snr=EbNo+10*log10(k)-10*log10(samp); %信噪比
yn=awgn(y,snr,'measured'); %加入高斯白噪声
h=scatterplot(yn,samp,0,'b.'); %经过信道后接收到的含白噪声的信号星座图
hold on;
scatterplot(y,1,0,'k+',h); %加入不含白噪声的信号星座图
title('接收信号星座图');
legend('含噪声接收信号','不含噪声信号');
axis([-5 5 -5 5]);
hold on;
eyediagram(yn,2); %眼图
yd=demodulate(modem.qamdemod(M),yn); %此时解调出来的是16进制信号
z=de2bi(yd,'left-msb'); %转化为对应的二进制比特流
z=reshape(z.',numel(z),1');
[number_of_errors,bit_error_rate]=biterr(x,z)
运行结果:
number_of_errors =0
bit_error_rate =0
实验图:
1.
2 rand randn randint的区别
matlab中rand函数是产生0到1的随机分布
matlab中randn函数是产生标准正态分布,就是均值为0,方差为1的正态分布
randint是产生整数随机数,默认为0和1
3 16QAM的调制
这里调制直接是调用matlab库文件里面的 modem.qammod对象实现M-QAM调制器,对信号进行调制,本示例中M为16。其输入参数是从0到15的整数而不是4bits二进制数据。因此,在利用此对象的modulate方法之前需要对二进制数据序列x进行预处理。特别地, 先采用MATLAB中的reshape函数将x沿着矩阵的行方向重新整理成每行4bit数据,然后应用bi2de函数将4bit数据转换成相应的整数。
这里y=modulate(modem.qammod(M),xsym); %用16QAM调制器对信号进行调制 ,这句话也可以写成qammod(xsym,16)效果是一样的
如果进行8QAM调制,就直接写成qammod(xsym,8)
如果进行16psk调制,就直接调用库函数pskmod(16,xsym)就可以了。
上面程序函数的使用
函数或方法
产生随机二进制数据序列
randint
16QAM调制
modem.qammod 对象中的modulate方法
AWGN信道
awgn
绘制散点图
scatterplot
16QAM解调
modem.qamdemod 对象中的demodulate方法(原文档有误)
计算系统误码率
biterr计算误比特数和误比特律
matlab通信工具箱
信号源 |
randerr |
产生随机无码图样 |
randint |
产生均匀分布的随机整数 |
|
randsrc |
用预定义的字母表产生随机矩阵 |
|
wgn |
产生高斯噪声 |
|
信号分析函数
|
biterr |
计算误比特数和误比特率 |
eyediagram |
产生眼图 |
|
scatterplot |
产生散列图 |
|
symerr |
计算误码数和误码率 |
|
信源编码 |
arithdeco |
算术解码码 |
arithenco |
对一符号序列进行算术编码 |
|
compand |
μ律或A律压扩编码 |
|
dpcmdeco |
差分脉冲调制解码 |
|
dpcmenco |
差分脉冲调制编码 |
|
dpcmopt |
使用训练序列对差分脉冲调制参数进行优化 |
|
lloyds |
使用训练序列结合lloyd算法优化标量量化 |
|
quantiz |
产生量化序号和量化值 |
|
差错控制编码 |
bchpoly |
产生BCH码的参数或生成多项式 |
convenc |
卷积编码 |
|
cyclgen |
产生循环码的生成矩阵和校验矩阵 |
|
cyclpoly |
产生循环码的生成多项式 |
|
decode |
纠错码解码 |
|
encode |
纠错码编码 |
|
gen2pa |
生成矩阵和校验矩阵的转换 |
|
gfweight |
计算线性分组码的最小距离 |
|
hammgen |
产生汉明码的生成矩阵和校验矩阵 |
|
rsdec |
RS解码器 |
|
rsenc |
RS编码器 |
|
rsdecof |
将RS编码的ASCII文件解码 |
|
rsencof |
对一个ASCII文件进行RS编码 |
|
rsgenpoly |
产生RS码的生成多项式 |
|
syndtable |
产生故障解码器 |
|
vitdec |
使用Viterbi算法卷积解码 |
|
差错控制编码 |
bchdeco |
BCH解码器 |
bchenco |
BCH编码器 |
|
调制与解调
|
ademod |
模拟带通信号解调 |
ademodce |
模拟基带信号解调 |
|
amod |
模拟带通信号调制 |
|
amodce |
模拟基带信号调制 |
|
apkconst |
绘制ASK-PSK信号星座图 |
|
ddemod |
数字带通信号解调 |
|
ddemodce |
数字基带信号解调 |
|
demodmap |
模拟信号→数字信号 |
|
dmod |
数字带通信号调制 |
|
dmodce |
数字基带信号调制 |
|
modmap |
数字信号→模拟信号 |
|
qaskdeco |
矩形QASK星座图中的信号→数字信号 |
|
qaskenco |
数字信号→矩形QASK星座图中的信号 |
|
特殊滤波器 |
hank2sys |
将Hankel矩阵转换为线性系统模型 |
hilbiir |
IIR滤波器设计中的Hilbert变换 |
|
rcosflt |
使用升余弦滤波器对输入信号进行滤波 |
|
rcosine |
设计升余弦滤波器 |
|
特殊滤波器 |
rcosfir |
设计升余弦FIR滤波器 |
rcosiir |
设计升余弦IIR滤波器 |
|
信道函数 |
awgn |
将高斯噪声叠加到信号上 |
有限域计算 |
gf |
生成一个有限域数组 |
gfhelp |
生成适于有限域数组的操作表 |
|
convmtx |
有限域向量的卷积矩阵 |
|
cosets |
有限域陪集计算 |
|
dftmtx |
有限域中的离散傅里叶变换矩阵 |
|
gftable |
创建一个文件以便加快有限域计算 |
|
isprimitive |
检测有限域中的本原多项式 |
|
minpily |
寻找有限域的最小多项式 |
|
primpoly |
找出有限域中的本原多项式 |
|
具有奇特性的 |
gfadd |
有限域的多项式加法 |
gfconv |
有限域的多项式乘法 |
|
gfcosets |
有限域陪集计算 |
|
gfdeconv |
有限域的多项式除法 |
|
gfdiv |
有限域中除一个元素 |
|
gffilter |
有限域滤波计算 |
|
gflineq |
有限域中解方程ax=b |
|
gfminpol |
寻找有限域的最小多项式 |
|
gfmul |
有限域乘法 |
|
gfpretty |
按传统方式显示多项式 |
|
gfprimck |
检测多项式在有限域中是否为本原多项式 |
|
gfprimdf |
产生有限域的本原多项式 |
|
gfprimfd |
找出有限域中的本原多项式 |
|
gfrank |
在有限域中计算一个矩阵的秩 |
|
gfrepcov |
改变有限域中多项式的表示方法 |
|
gfroots |
在有限域中计算多项式的根 |
|
gfsub |
有限域除法 |
|
gftrunc |
将多项式的表示方式化为最简 |
|
gftuple |
简化或转换有限域中的元素表示方法 |
|
实用工具 |
bi2de |
二进制向量→十进制 |
de2bi |
十进制向量→二进制 |
|
erf |
误差函数 |
|
erfc |
余误差函数 |
|
istrellis |
检测输入是否为有效的格形结构 |
|
marcump |
产生Marcum Q函数 |
|
mask2shift |
将向量转换为移位寄存器形式 |
|
oct2dec |
八进制→十进制 |
|
poly2trellis |
多项式→格形表示 |
|
shift2mask |
移位寄存器→向量 |
|
vec2mat |
向量→矩阵 |
其他地方看自己编写的程序