基于matlab的索引OFDM系统误码率仿真
Posted fpga和matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于matlab的索引OFDM系统误码率仿真相关的知识,希望对你有一定的参考价值。
目录
作者ID :fpga和matlab
CSDN主页:https://blog.csdn.net/ccsss22?type=blog
擅长技术:
1.无线基带,无线图传,编解码
2.机器视觉,图像处理,三维重建
3.人工智能,深度学习
4.智能控制,智能优化
5.其他
一、理论基础
空间索引调制技术属于多天线通信技术的一种类型[21],其通过加入空间维度的概念,将发射端天线的序列好作为信息载体,然后建立一个关于天线序列号和输入比特信息的对应关系,即天线索引比特,然后在同一个时刻只激活一个天线,从而实现多维度空间索引调制。其基本结构如下图所示:
图1空间索引调制结构图
从图1可知,发送天线1~Nt,其根据输入的比特索引信息S,0,0,.....进行进行选择性激活,因此,和传统方式相比,其发送数据一部分通过普通的调制方式进行传输,还有一部分则隐含在天线的序列中。在SM索引调制系统中,每一时刻,只激活一个发送天线,因此避免了多天线之间的相互干扰问题以及多天线之间的同步问题。此外,每次激活一根天线,那么意味着实际的发送端只需要一个射频发送单元,从而极大的降低实际的硬件电路设计成本以及硬件电路的复杂度。
OFDM调制技术具有广泛的应用,其中MIMO技术,资源分配技术等新型的通信技术都是建立在OFDM调制技术基础之上的。随着第四代通信技术的不管应用,以及第五代通信技术的发展,OFDM技术起着越来越重要的作用。OFDM调制技术其具有对抗码间干扰(Inter Symbol Interference, ISI)的功能,具有高速的数据传输能力,在移动通信,数字通信,多媒体通信,语音视频等业务领域均有着广泛的应用前景[04]。OFDM作为一种多载波数字调制技术,其具有较高的频谱利用率,以及其通过IFFT和FFT完整OFDM的调制解调,因此OFDM的理论实现广泛应用在4G通信系统中,并在未来的5G移动通信方面有着无法替代的地位。但是OFDM调制技术,其要求各个子载波之间满足严格的正交性,因此OFDM调制技术对频率偏移较为敏感。针对这个问题,人们提出了索引调制技术(Index Modulation,IM),通过索引调制技术,可以将一部分数据通过子载波激活的位置来进行传输,降级被激活的子载波的数量,从而减少了OFDM系统对频偏的敏感性,提高了系统的通信性能。通过索引调制之后,OFDM系统中的子载波将被划分为用于传输调制信号的激活子载波以及用户传输索引信息的静默子载波。所以OFDM索引调制技术同时传输了数据和索引位置信息。
OFDM-IM是一种多载波索引调制技术,其在信号的频域加入了子载波块的功能,将多个子载波组合成一个子载波块,一个子载波块作为一个调制单元。每次发送过程中,只选择子载波块中的一个或者部分子载波进行激活并发送信息,其功能类似于基于频域的空间索引调制随机数。OFDM-IM技术的基本结构如下图所示:
索引OFDM的基本结构如下图所示:
假设索引比特信息为0,1,1,0,其中0表示激活第一个子载波被激活发送,1表示的是第二个子载波被激活发送,发送数据比特为S1,S2,S3以及S4,那么通过索引调制之后,我们可以看到,当索引比特为0的时候,系统将发送数据为S-0,而当索引比特为1的时候,系统将发送0-S数据。
OFDM-IM索引调制技术包括空间索引调制技术和基于OFDM的索引调制技术两种不同的类型。本文主要研究基于OFDM-IM索引调制技术。然后从理论上分析了OFDM-IM索引调制受频偏的影响,由于OFDM-IM索引调制系统相对于传统的OFDM系统而言,其被激活的子载波数量被降低,因此其对频偏不敏感。
相对于传统的OFDM系统而言,OFDM-IM调制技术具有如下几个方面的优势:
第一、系统设置灵活,OFDM-IM调制系统的索引调制方式多种多样,其可根据实际的频谱使用效率和系统误码率的需求进行调整和配置。
第二、系统误码率性能较高。和传统的OFDM系统相比而言,在相同信噪比条件下,OFDM-IM调制技术的误码率性能远远优于OFDM调制的误码率性能指标。
第三、具有较强的抗子载波干扰能力,由于OFDM-IM调制技术每次选择子载波块中一部分子载波进行激活,因此其大大降低了不同子载波之间的相互干扰影响。因此,其对频偏的敏感度较低,适用于各类高速运动的场合。
第四、较高的频谱利用率。由于OFDM-IM调制系统存在较多的静默子载波,通过这些可以进行信道估计等其他操作,从而极大的提高了频谱利用率。
二、核心程序
function Ber=func_ofdm(SNR,SubNum,sel)
Nlen = 100000;%数据仿真长度
Ncp = 8;%插入CP长度
Tdat = floor(rand(1,Nlen*SubNum)*2);
%Modulate,下面几行都是调制
Dat_Qam = reshape(Tdat,2,Nlen*SubNum/2).';
Dat_Qam2 = bi2de(Dat_Qam,2,'left-msb');
Mod_Table = [-1-i -1+i 1-i 1+i];%调制映射表格
SymQAM = Mod_Table(Dat_Qam2+1);
%IFFT变换
dat_ifft1 = zeros(SubNum,Nlen);
dat_ifft2 = reshape(SymQAM,SubNum/2,Nlen);
dat_ifft3 = zeros(SubNum,Nlen);
%IFFT的实部和虚部
dat_ifft3(1,:) = real(dat_ifft2(1,:));
dat_ifft3(SubNum/2+1,:) = imag(dat_ifft2(1,:));
dat_ifft3(2:SubNum/2,:) = dat_ifft2(2:SubNum/2,:);
dat_ifft3((SubNum/2+2):SubNum,:) = flipdim(conj(dat_ifft2(2:SubNum/2,:)),1);
dat_ifft1 = ifft(dat_ifft3,SubNum,1);
%Add cyclic prefix,加入循环间隔
NumAddPrefix = SubNum + Ncp;
SymCP = zeros(NumAddPrefix,Nlen);
RowPrefix = (SubNum - Ncp + 1):SubNum;
SymCP = [dat_ifft1(RowPrefix,:);dat_ifft1];
%上变频
ff = 5e7;
SymCP = SymCP.*exp(sqrt(-1)*2*pi*ff*repmat([1:length(SymCP)],size(SymCP,1),1));
%channel,定一个多径信道
H_channel = zeros(1,(SubNum + Ncp)*Nlen);
H_channel2 = SymCP(:).';
snr = SNR + 10*log10(log2(2)/log10(SubNum));
% Add the AWGN,加入高斯白噪声
if sel==1
H_channel = awgn(H_channel2,snr,'measured');
end
if sel==2
Ch = [1 1/5];
H_channel3 = filter(Ch,1,H_channel2);
H_channel = awgn(H_channel3,snr,'measured');
end
if sel==3
Ch = [1 0.2,0.2,0.2,0.1];
H_channel3 = filter(Ch,1,H_channel2);
H_channel = awgn(H_channel3,snr,'measured');
end
%下变频
H_channel = H_channel.*exp(-sqrt(-1)*2*pi*ff*[1:length(H_channel)]);
%remove,删除循环间隔
data_no_cp = zeros(SubNum,Nlen);
data_no_cp2 = reshape(H_channel,SubNum + Ncp,Nlen);
data_no_cp = data_no_cp2((Ncp+1):NumAddPrefix,:);
%FFT变换
dat_fft = fft(data_no_cp,SubNum,1);
dat_demod = zeros(SubNum,Nlen);
dat_Eq(1,:) = dat_fft(1,:)+i*dat_fft(SubNum/2+1,:);
dat_Eq(2:SubNum/2,:) = dat_fft(2:SubNum/2,:);
%解调
for m = 1:Nlen
for n = 1:SubNum/2
Real = real(dat_Eq(n,m));
Imag = imag(dat_Eq(n,m));
if( abs((Real -1)) < abs((Real +1 )) )
dat_demod(2*n-1,m) = 1;
else
dat_demod(2*n-1,m) = 0;
end
if( abs((Imag -1)) < abs((Imag +1 )) )
dat_demod(2*n,m) = 1;
else
dat_demod(2*n,m) = 0;
end
end
end
BitsRx = zeros(1,SubNum*Nlen);
BitsRx = dat_demod(:).';%输出误码率
[Num,Ber] = symerr(Tdat,BitsRx);
三、仿真测试结果
A01-172
以上是关于基于matlab的索引OFDM系统误码率仿真的主要内容,如果未能解决你的问题,请参考以下文章
基于STBC空时分组码的OFDM通信系统误码率matlab仿真