OFDM通信系统仿真与实现

本文详细介绍了OFDM通信系统的仿真与实现过程,包括信道编码、调制映射、串并转换、IFFT变换、添加循环前缀、同步信号生成、IQ信号处理、射频收发等步骤,并提供了相关模块的设计原理与代码分析。

1.设计任务
1.1设计目的及需求分析
OFDM通信技术作为第四代移动通信的核心技术,在现代通信架构中具有至关重要的作用。作为一名通信专业的学生,尤其应该明白其原理和设计过程。因此本次课程设计内容为OFDM通信系统仿真与实现,旨在通过此次设计,巩固自身的通信原理基础理论知识,并学会利用软件构建OFDM通信系统。
1.2设计内容
在MATLAB下编写程序实现生成随机比特数据,对比特数据进行信道编码,然后进行调制映射(QPSK、16QAM)、串并转换、IFTT变换、添加循环前缀、生成同步信号,添加同步信号后得到IQ信号。生成的IQ信号数据通过以太网发送到XSRP软件无线电平台,在软件无线电平台中完成IQ数据DA转换、上变频载波调制、射频在指定频点将信号通过天线发射出去。无线信号经过空中无线信道,再通过射频的接收天线在对应的频点将数据接收、下变频、低通滤波、AD转换得到IQ信号。接收的IQ信号通过以太网发送到电脑。在电脑上对接收IQ信号进行处理,包括时隙同步、去循环间隔、FFT变换、并串转换、相偏纠正、解调制映射、信道解码,对还原后的比特数据和发送端比特数据对比统计误码数。

2.系统设计方案
2.1系统总体设计原理
OFDM是一种特殊的多载波传输方案,它可以被看作是一种调制技术,也可以被当作一种复用技术。
简单来说:OFDM是一种多载波的传输方法,它将频带划分为多个子信道并行传输数据,将高速数据流分成多个并行的低速数据流,然后调制到每个信道的子载波上进行传输。由于它将非平坦衰落无线信道转化成多个正交平坦衰落的子信道,从而可消除信道波形间的干扰,达到对抗多径衰落的目的。
正交频分复用(OFDM)是对多载波调制(MCM)的一种改进,在。它的特点是:各子载波相互正交,所以扩频调制后的频谱可以相互重叠,不但减少了子载波间的相互干扰,还大大提高了频谱利用率。
选择OFDM的一个很大的原因是该系统能够很好的对抗频率选择性衰落和窄带干扰。在单载波系统中,一次衰落或者干扰会导致整个链路失效,但是在多载波系统中,某一时刻只会有少部分的子信道受到深衰落的影响。
为了解决多径导致的时延扩展影响子载波的正交性,造成符号间干扰在IFFT后将OFDM符号的尾部重复加在符号前面。这就是添加CP(Cyclic Prefix)即循环前缀
整体设计实现流程:对比特数据进行信道编码,然后进行调制映射(QPSK、16QAM)、串并转换、IFTT变换、添加循环前缀、生成同步信号,添加同步信号后得到IQ信号。生成的IQ信号数据通过以太网发送到XSRP软件无线电平台,在软件无线电平台中完成IQ数据DA转换、上变频载波调制、射频在指定频点将信号通过天线发射出去。无线信号经过空中无线信道,再通过射频的接收天线在对应的频点将数据接收、下变频、低通滤波、AD转换得到IQ信号。接收的IQ信号通过以太网发送到电脑。在电脑上对接收IQ信号进行处理,包括时隙同步、去循环间隔、FFT变换、并串转换、频偏纠正、解调制映射、信道解码,对还原后的比特数据和发送端比特数据对比统计误码数。。其实现原理框图如下:

                                                         无线信道

图1.1 OFDM系统设计框图
2.2系统各部分设计原理
2.2.1计算信道容量模块
模块名称:OFDM_TxCalcSoltCap.vi
模块功能:根据编码方式、调制方式、OFDM符号数、子载波数计算信道一个时隙传输的bit数
模块输入参数:Matlab代码路径,调制方式mod_type,编码方式coder_type,子载波数subCarryNum子载波数、OFDM符号数ofdm_num、错误输入
模块输出参数:Matlab代码路径、一个时隙bit数bitLen、错误输出

图2.1 计算信道容量模块原理图
2.2.2产生比特信源模块
模块名称:OFDM_TxGenBitSource.vi
模块功能:根据输入参数bitLen值产生 bitLen长度个随机01比特
模块输入参数:Matlab代码路径,比特长度bitLen、错误输入
模块输出参数:Matlab代码路径、信源比特数据sourceBit、错误输出

图2.2 产生比特信源模块原理图
2.2.3信道编码模块
模块名称:OFDM_TxTrchCoder.vi
模块功能:对输入的信源比特按照信道编码方式进行编码
模块输入参数:Matlab代码路径,信源比特数据sourceBit、编码方式coder_type、错误输入
模块输出参数:Matlab代码路径、编码后比特数据tch_data、错误输出

图2.3信道编码模块原理图
2.2.4调制映射模块
模块名称:OFDM_TxMod.vi
模块功能:对输入的比特按照调制映射类型产生映射后符号数据
模块输入参数:Matlab代码路径,比特数据tch_data、调制映射方式mod_type、错误输入
模块输出参数:Matlab代码路径、调制映射后符号数据mod_data、错误输出

图2.4调制映射模块原理图
2.2.5串并转换模块
模块名称:OFDM_TxSerialToPara.vi
模块功能:将输入的串行数据转换为并行数据输出
模块输入参数:Matlab代码路径,映射后符号数据mod_data、错误输入
模块输出参数:Matlab代码路径、并行数据parallel_data、错误输出

图2.5串并转换模块原理图
2.2.6 IFFT模块
模块名称:OFDM_TxIFFT.vi
模块功能:将并行数据按行做IFFT变换后输出
模块输入参数:Matlab代码路径,并行符号数据parallel_data、错误输入
模块输出参数:Matlab代码路径、IFFT后数据ifft_data、错误输出

图2.6 IFFT模块原理图
2.2.7加CP模块
模块名:OFDM_TxAddCP.vi
模块功能:对IFFT后的数据加循环前缀并将并行数据转为串行
模块输入参数:Matlab代码路径,IFFT数据ifft_data、错误输入
模块输出参数:Matlab代码路径、加CP后数据add_cp_data、错误输出

图2.7加CP模块原理图
2.2.8生成同步信号模块
模块名:OFDM_TxSCGenerate.vi
模块功能:生成用于接收端时隙同步的同步信号
模块输入参数:Matlab代码路径,同步信号采样率sample_rate、错误输入
模块输出参数:Matlab代码路径、同步数据sc_data、错误输出

图2.8生成同步信号模块原理图
2.2.9加同步信号模块
模块名:OFDM_TxAddSyncCode.vi
模块功能:对添加CP后的数据添加同步信号,添加同步信号位置为第1的OFDM符号之前的160个样点。
模块输入参数:Matlab代码路径,加CP后数据add_cp_data、同步数据sc_data、错误输入
模块输出参数:Matlab代码路径、待发送IQ数据tx_data、错误输出

图2.9加同步信号模块原理图
2.2.10 IQ发送接收(或射频收发)模块
模块名:OFDM_RFLoopback.vi
模块功能:将基带IQ信号发送给XSRP,在XSRP中进行DA、上变频、天线发射、天线接收、下变频、AD最后得到接收的IQ信号
模块输入参数:Matlab代码路径,加CP后数据add_cp_data、同步数据sc_data、错误输入
模块输出参数:Matlab代码路径、待发送IQ数据tx_data、错误输出

图2.10 IQ发送接收模块
2.2.11信号环回模块
模块名:OFDM_RFLoopback.vi
模块功能:将基带IQ信号发送给XSRP,在XSRP中进行DA、上变频、天线发射、天线接收、下变频、AD最后得到接收的IQ信号
模块输入参数:Matlab代码路径,加CP后数据add_cp_data、同步数据sc_data、错误输入
模块输出参数:Matlab代码路径、待发送IQ数据tx_data、错误输出

图2.11 信号环回模块原理图
2.2.12时隙同步模块
模块名:OFDM_RxTimeslotSync.vi
模块功能:根据同步码对信号进行时隙同步
模块输入参数:Matlab代码路径,接收到的数据、数据采样率、错误输入
模块输出参数:Matlab代码路径、同步成功标志位、同步码位置、错误输出

图2.12 时隙同步模块原理图

2.2.13去除循环前缀模块
模块名:OFDM_RxDelteCP.vi
模块功能:去除循环前缀
模块输入参数:Matlab代码路径,接收到的数据、同步码位置、错误输入
模块输出参数:Matlab代码路径、去除前缀后的数据、同步码(用于纠正相位偏移)、错误输出

图2.13去除循环前缀模块原理图
2.2.14 FFT模块
模块名:OFDM_RXFFT.vi
模块功能:对数据按行做FFT
模块输入参数:Matlab代码路径,去除循环前缀后的数据、错误输入
模块输出参数:Matlab代码路径、做FFT后的数据、错误输出

图2.14 FFT模块原理图
2.2.15并串转换模块
模块名:OFDM_R并串转换模块xParalleToSeri.vi
模块功能:将并行数据转换为串行数据
模块输入参数:Matlab代码路径,做FFT后的并行数据、错误输入
模块输出参数:Matlab代码路径、串行数据、错误输出

图2.15 并串转换模块原理图
2.2.16 纠正相位偏模块
模块名:OFDM_RxPhaseCorrect.vi
模块功能:将并行数据转换为串行数据
模块输入参数:用于纠正相位偏移的同步码,Matlab代码路径,串行数据、同步码、错误输入
模块输出参数:Matlab代码路径、纠正相位偏移后的数据、错误输出

图2.16 纠正相位偏模块原理图
2.2.17解调模块
模块名:OFDM_RxDemod.vi
模块功能:对数据进行解调
模块输入参数:Matlab代码路径,纠正相位偏移后的数据、解调类型、错误输入
模块输出参数:Matlab代码路径、解调后数据、错误输出

图2.17 解调模块原理图
2.2.18信道纠错模块
模块名:OFDM_RxTrchDecoder.vi
模块功能:对数据进行纠错
模块输入参数:Matlab代码路径,纠解调后的数据、信道编码类型、错误输入
模块输出参数:Matlab代码路径、纠错后数据、错误输出

图2.18信道纠错模块原理图

3.设计代码分析
3.1 IFFT代码分析
function [output_data] = OFDM_TxIFFT(input_data)

ofdm_num=7; %并行数据条数,即7条并行数据
ifft_num=2048;%IFFT点数,只能是2^n个点由于数据点数为1200个所以2048个点做IFFT
output_data=zeros(ofdm_num,ifft_num)
fill_data=zeros(1,848); %填充的点

for n=1:ofdm_num
temp_data=[input_data(n,601:end),fill_data,input_data(n,1:600)];
output_data(n,:)=ifft(temp_data,ifft_num);

end
3.2 添加循环前缀代码分析
function [output_data] = OFDM_TxAddCP (input_data)

y=input_data;
cp=zeros(7,144);
for n=2:7 %7条并行数据,第一条的前缀部分是同步码所以循环前缀分别加在其他6条前
cp(n,:)=y(n,end-144+1:end); %后144个数据作为循环前缀
end
output_data=[y(1,end-160+1:end),y(1,:),cp(2,:),y(2,:),cp(3,:),y(3,:),cp(4,:),y(4,:),cp(5,:),y(5,:),cp(6,:),y(6,:),cp(7,:),y(7,:)];%一个时隙数据

end
3.3 信道1/2卷积编码代码分析
function [out_data] = OFDM_TxTrchCoder(input_data, coder_type)
input_num=length(input_data);
%功能实现
switch coder_type
case 0
out_data = zeros(1, input_num); %#ok
out_data = input_data;
% 1/2卷积
case 1
%添加尾比特(在输入数据后添加8个0)
temp_data = zeros(1, input_num+8);
temp_data(1,1:input_num) = input_data;
input_num = input_num+8;
%卷积编码
out_data = zeros(1, input_num2); %#ok
CodeGenerator = [561, 753]; %生成多项式
K = 9;
trellis = poly2trellis(K, CodeGenerator); %根据约束度和生成多项式生成网格表
out_data = convenc(temp_data, trellis); %根据网格图生成卷积码
% 1/3卷积
case 2
%添加尾比特(再输入数据后添加8个0)
temp_data = zeros(1, input_num+8);
temp_data(1,1:input_num) = input_data;
input_num = input_num+8;
%卷积编码
out_data = zeros(1, input_num
3); %#ok
CodeGenerator = [557, 663, 711]; %生成多项式
K = 9; %约束度
trellis = poly2trellis(K, CodeGenerator);
out_data = convenc(temp_data, trellis);
case 3
fprintf('error:函数mfTxTrchCoder的参数coder_type=3暂不支持\n ');
otherwise
fprintf(‘error:函数mfTxTrchCoder的参数coder_type输入错误\n’);
end
end

前面已经介绍无线信道的传播模型可分为大尺度(Large-Scale)传播模型和小尺度(Small-Scale)衰落两种[2],三、四、五章已经介绍了大尺度传播。所谓小尺度是描述短距离(几个波长)或短时间(秒级)内接收信号强度快速变化的;而移动无线信道的主要特征是多径,由于这些多径使得接收信号的幅度急剧变化,产生了衰落,因此,本章将介绍小尺度衰落信道,这对我们移动通信研究中传输技术的选择和数字接收机的设计尤为重要。 本章将先介绍小尺度的衰落和多径的物理模型和数学模型,使读者从概念上清楚地认识移动无线信道的主要特点,并建立一个统一的数学模型,为以后讨论各种模型奠定基础;接着将介绍移动多径信道的三组色散参数——时间色散参数(时延扩展,相关带宽)、频率色散参数(多普勒扩展,相关时间)、角度色散参数(角度扩展,相关距离),为之后的信道分类奠定了基础;接下来介绍衰落信道的一阶包络统计特性、二阶统计特性,大量的实测数据表明,在没有直达路径的情况下(如市区),信道的包络服从瑞利分布,在有直达路径的情况下(如郊区),信号包络服从莱斯分布,因此,一阶包络统计特性主要介绍瑞利衰落分布和莱斯衰落分布,二阶统计特性主要介绍一组对偶参数——时间电平交叉率和平均衰落持续时间,简要介绍其他两组对偶参数——频域电平交叉率和平均衰落持续带宽,空间电平交叉率和平均衰落持续距离;在已经介绍了多径信道的三组色散参数之后,将介绍小尺度衰落信道相对应的不同分类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值