77范文网 - 专业文章范例文档资料分享平台

OFDM调制及解调系统的设计 - 图文(2)

来源:网络收集 时间:2019-05-18 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

具体包括了发送端的串并转换、训练序列的插入、过采样的IFFT变换及加入循环前缀和接收端的循环前缀的去除、FFT变换、去除虚子载波、训练序列的接收以及并串转换。继续将系统框图细化: 信道估计仿真模型:

为了研究信道和噪声对OFDM传输系统的影响,采用加性高斯白噪声信道(AWGN)和多径瑞利衰落信道(MuhipathReyleighFading)模块进行仿真。 具体实现如下: 1. 信道编码

信道编码采用卷积码和交织编码进行信道级联编码。卷积码码率为1/2,仿真时设置k=1,G=[1 0 1 1 0 1 1;1 1 1 1 0 0 1],将输入的90个0、1二进制数经过卷积编码后可得到192个0、1二进制数。交织编码采用24行8列的矩阵,按行写入,按列读出,交织编码可以有效的抗突发干扰。 卷积实现如下:

%************************beginning of file*****************************

%cnv_encd.m

%卷积码编码程序

function output=cnv_encd(G,k0,input)

% cnv_encd(G,k0,input),k0 是每一时钟周期输入编码器的 bit 数,

% G 是决定输入序列的生成矩阵,它有 n0 行 L*k0 列 n0 是输出 bit 数, % 参数 n0 和 L 由生成矩阵 G 导出,L 是约束长度。L 之所以叫约束长度 % 是因为编码器在每一时刻里输出序列不但与当前输入序列有关, % 而且还与编码器的状态有关,这个状态是由编码器的前(L-1)k0。 % 个输入决定的,通常卷积码表示为(n0,k0,m),m=(L-1)*k0 是编码 % 器中的编码存贮个数,也就是分为 L-1 段,每段 k0 个

% 有些人将 m=L*k0 定义为约束长度,有的人定义为 m=(L-1)*k0 % 查看是否需要补 0,输入 input 必须是 k0 的整数部

%+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % G 决定输入序列的生成矩阵

% k0 每一时钟周期输入编码器的 bit 数 % input 输入数据 % output 输入数据

%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

if rem(length(input),k0)>0

input=[input,zeros(size(1:k0-rem(length(input),k0)))]; end

n=length(input)/k0;

% 检查生成矩阵 G 的维数是否和 k0 一致 if rem(size(G,2),k0)>0

error('Error,G is not of the right size.') end

% 得到约束长度 L 和输出比特数 n0 L=size(G,2)/k0; n0=size(G,1);

% 在信息前后加 0,使存贮器归 0,加 0 个数为(L-1)*k0 个 u=[zeros(size(1:(L-1)*k0)),input,zeros(size(1:(L-1)*k0))];

% 得到 uu 矩阵,它的各列是编码器各个存贮器在各时钟周期的内容 u1=u(L*k0:-1:1);

%将加 0 后的输入序列按每组 L*k0 个分组,分组是按 k0 比特增加 %从 1 到 L*k0 比特为第一组,从 1+k0 到 L*k0+k0 为第二组,。。。。, %并将分组按倒序排列。 for i=1:n+L-2

u1=[u1,u((i+L)*k0:-1:i*k0+1)]; end

uu=reshape(u1,L*k0,n+L-1);

% 得到输出,输出由生成矩阵 G*uu 得到 output=reshape(rem(G*uu,2),1,n0*(L+n-1));

% ************************end of file***********************************

交织实现如下:

%************************beginning of file***************************** %interlacecode.m

function dout=interlacecode(din,m,n) %实现信道的交织编码

%din为输入交织编码器的数据,m,n分别为交织器的行列值

%+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % din 输入数据

% m 交织器的行值 % n 交织器的列值 % dout 输出数据

%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

for j=1:m

temp(j,:)=din(j*n-(n-1):j*n); end

dout_temp=reshape(temp,1,length(din)); dout=dout_temp(1:end);

%************************end of file**********************************

%************************beginning of file***************************** %qpsk.m

%QPSK调制映射

function dout=qpsk(din)

%+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % din 输入数据 % dout 输出数据

%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

din2=1-2*din;

din_temp=reshape(din2,2,length(din)/2); for i=1:length(din)/2,

dout(i)=din_temp(1,i)+j*din_temp(2,i); end

% ************************end of file***********************************

2. QPSK调制

在数字信号的调制方式中,使用了QPSK,这种调制方法具有较高的频谱利用率以及抗干扰性。实现代码见附件。 3. 插导频、矩阵变换

导频数据是在进行矩阵变换之前插入有效数据的,在系统设计中我们每8个有效数据插入一个导频,但是数据中间位置不插入导频。96个复数据插入10个导频后,一帧数据长度为106。

矩阵变换是为了降低系统的PAPR,采用方法的是改进Nyquist脉冲调整法(PS)。这里矩阵大小为106*128,滚将系数a=0.22。 具体实现如下:

%************************beginning of file***************************** %seq_train.m

%生成用于同步的训练符号 function dout=seq_train()

%第一帧产生短训练序列,第二帧产生长训练序列 %每个短训练符号由16个子载波组成,短训练序列 %是由伪随机序列经过数字调制后插0后,再经过 %IFFT之后得到的。具体过程如下:首先采用抽头 %系数为[1 0 0 1 ]的4级移位寄存器产生长度为

的伪随机序列之后末尾补0,经过QPSK调制之 %后的伪随机序列只在16的整数倍位置上出现,其 %余的位置补0,产生长度为128的序列,此序列再 %补128个0经过数据搬移后做256点的IFFT变换就 %得到16个以16为循环的训练序列,经过加循环前 %后缀就会产生20个相同的短训练序列。长训练序 %列的产生同短训练序列。

global seq_num

if seq_num==1

fbconnection=[1 0 0 1];

QPSKdata_pn=[m_sequence(fbconnection),0]; QPSKdata_pn=qpsk(QPSKdata_pn); elseif seq_num==2

fbconnection=[1 0 0 0 0 0 1];

QPSKdata_pn=[m_sequence(fbconnection),0];

QPSKdata_pn=qpsk(QPSKdata_pn); end

countmod=0; for k=1:128

if seq_num==1

if mod(k-1,16)==0 %生成16位循环的短训练符号 countmod=countmod+1;

trainsp_temp(k)=QPSKdata_pn(countmod); else

trainsp_temp(k)=0; end

elseif seq_num==2 if mod(k-1,2)==0

countmod=countmod+1;

trainsp_temp(k)=QPSKdata_pn(countmod); else

trainsp_temp(k)=0; end end end

dout=trainsp_temp;

% ************************end of file***********************************

4. IFFT变换

经过矩阵乘模块后,一帧数据长度为128,由于子载波个数为256,所以需要在数据后面补128个零。 具体实现如下:

%************************beginning of file***************************** ?t_my.m

%实现N点FFT运算

function dout=fft_my(din)

%本程序对输入序列din实现DIT——FFT基2算法,点数取大于等于din长度的2的幂次

%+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % din 输入数据 % dout 输出数据

%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

m=nextpow2(din) ;

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库OFDM调制及解调系统的设计 - 图文(2)在线全文阅读。

OFDM调制及解调系统的设计 - 图文(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/631113.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: