无线通信系统维特比译码的FPGA仿真验证_高志斌

更新时间:2023-05-23 11:40:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

无线通信系统维特比译码的FPGA仿真验证

高志斌,黄联芬

(厦门大学 福建厦门 361005)

摘 要:在设计宽带无线通信系统的基带平台中,采用一种基于FPGA仿真工具ActiveHDL和目前广泛用于数字信号处理、数值分析等的实用软件Matlab相结合的方法,通过实现(2,1,7)卷积编码的全并行维特比软判决译码的FPGA设计仿真和算法验证,提出一种利用Matlab进行测试向量的生成和验证,以简化仿真测试序列的手工输入,提高FPGA设计进程和保证代码质量的方法。

关键词:FPGA;ActiveHDL;Matlab;维特比译码

中图分类号:TN402     文献标识码:B     文章编号:1004373X(2006)1302003

FPGASimulationVerificationofViterbiDecoderinWirelessCommunicationSystem

GAOZhibin,HUANGLianfen

(XiamenUniversity,Xiamen,361005,China)

Abstract:Inthispaper,thebasebandplatformforwidebandwirelessusingFPGA.TheFPGAalgorithmsaresimulatedbyActiveHDL,asimulationtoolGA,andalsodigitalsignalpro2cessingandnumericanalysing.AfullparallelsoftdecisionViterbiof,1,7)codeissimulatedusingthesetoolsabove.Themethodproposedinthispaper,isofsimulationtestingsequence,soastopromotsthedevelopmentofFPGAdesignandcodes.

Keywords:FPGA;ActiveHDL  ,采用各种高速信号件,比如数字信号处理器

(DSP),或现场可编程逻辑门阵列(FPGA),把中频信号下

成完整的FPGA设计项目。

MathWorks公司的Matlab软件,起源于矩阵计算,有(MatrixLaboratory)之称,Matlab在科学计“矩阵实验室”

变频,进行基带信号处理,可以给通信系统带来很大的灵活性、兼容性和可重构性。基带信号处理采用FPGA实现时,有必要对各个算法模块,比如CRC编码校验、卷积编码、维特比译码、交织、解交织等,进行功能仿真,通常也称为前仿真,本文提出一种利用ActiveHDL和Matlab结合的快速设计仿真的方法,实现对宽带无线通信系统中一个

(2,1,7)卷积编码的维特比软判决译码的前仿真,以验证

算、数据分析与可视化、系统建模与仿真、实时嵌入式系统开发与设计方面,得到了越来越广泛地应用。2 维特比译码算法流程2.1 (2,1,7)维特比译码

卷积编码是现代通信系统中最为常用的信道编码方式,他可以大大提高在加性高斯白噪声情况下的抗噪声能力,被广泛用于卫星通信和空间无线通信上。维特比译码算法是一种根据最大似然译码原理在所有可能路径中求得与接收序列最为相似的一条路径,用大数判决进行卷积码译码的方法[1]。本文实现的是一种全并行三级流水的

radix2蝶型加比选的维特比译码算法模块(针对约束长

该模块的正确性。

1 ActiveHDL与Matlab简介

Aldec公司的ActiveHDL软件,属于FPGA前端设

计工具。他可以结合其他公司的各种EDA工具,从而提供从程序代码编辑输入、网表综合、布局布线、甚至程序编程下载到CPLD或FPGA芯片上的整个设计平台。他简单方便的DesignFlowManager设计,可以引导设计者完

收稿日期:20060125

基金项目:厦门大学京信公司“宽带无线系统基带信号处理

通用平台”项目

度K=7的1/2卷积码的软判决译码),他具有以下特点:

(1)3b量化软判决。采用查表获得卷积编码值,根

据文献[2]化简欧氏距离,来计算各个分支度量值(BM)。

(2)全并行加比选(ACS)。对于6个状态寄存器的64个状态的卷积编码,采用32组4分支蝶型ACS单元。

(3)幸存路径(SM)截尾译码,译码深度60b,该参数

根据文献[1]设计。

20

(4)大数判决器,判决门限为31

和ActiveHDL对(2,1,7)卷积编码的维特比软判决译码模块进行仿真与验证。

其测试台(Testbench)仿真的激励信号,需要有两个

3b量化的输入码流,这两个码流必须符合卷积编码的规

律才能送入维特比译码器进行仿真,任意随机输入序列是不能正确仿真的。以下阐述如何得到所需的测试序列,以及如何判断维特比译码是否正确。

本文采用如下的方法:

(1)编辑一个Matlab环境下的m文件生成满足要求

图1 维特比译码框图

的卷积编码测试序列,并且把原始的信息序列打印出来,作为FPGA代码运行结果的参考。

(2)将Matlab生成的测试序列在ActiveHDL环境

图1中的din0k[2:0],din1k[2:0]表示k时刻输入的两个3b软量化的编码数据序列,BM0kx0,BM0kx1分别表示由k-1时刻x0与x1状态转移到k时刻0x状态的两个分支度量值。PMk表示k时刻加比选单元获得的转移到0x

0x状态的新路径度量值。Sk是k时刻0x状态幸存路径值。

0x

下,作为维特比译码模块仿真的输入测试序列的公式(for2

mula),仿真一定时间后,将输出波形与Matlab打印出来

的原始信息序列相比较,以验证仿真结果。

以下是本文需要的Matlab代码:

trel=poly2trellis(7,[171133]);%生成多项式

msg=randint(1,66);随机序列作为原始信息code=convenc(msg,trel);%卷积编码c0=code(1:end)2);len=(c0);

(d)soft(find(c0==1))=7;d);c1soft(find(c1==1))=7;(c0soft,3);%3bit量化=dec2bin(c1soft,3);

%生成simulator语句t0=200;clock=100;

);fprintf(′din0:′

form=1:lend-1 fprintf(′%s%dns,′,din0(m,:),t0+clock3(m-1));end

fprintf(′%s%dnsdin1:′,din0(lend),t0+clock3(lend-1));

form=1:lend-1 fprintf(′%s%dns,′,din1(m,:),t0+clock3(m-1)); end fprintf(′%s%dns′,din1(lend),t0+clock3(lend-1));

) disp(′正确译码序列:′

 disp(msg)

其他分支和状态类推。2.2 维特比译码主要模块

将译码过程分为求分支度量、加比选、

大数译码3种相对独立的操作,采用三级流水线来实现。

分支度量模块,对每个状态的k时刻BM的计算,可以采用如下公式[2]:

din0+din1,     卷积码为00时not(din0)+not(din1), not(din0)+din1din0+(  BM=

其中not(x)表示对x每个ACS单元如图图2 一个ACS单元

大数译码:幸存路径寄存器是一个60×64的移位寄存器。由帧同步启动计数控制器,对输入时钟计数,一旦计数到60,启动大数判决器。将移出的64b各状态译码值传递给大数判决器;大数判决器对数据进行判0或者判

1输出,判据是:输入的数大部分是0,输出0;输入的数大

运行上述代码,在Matlab的命令窗口下,打印出两个

3b测试序列:

din0:

111200ns,000300ns,000400ns,000500ns,111600ns,……(后续序列省略)din1:

111200ns,111300ns,111400ns,000500ns,111600ns,……(后续序列省略)

部分是1,输出1。设计成一个计算“1”个数的累加器,以

31为门限,累加结果大于31就输出1,否则输出0。具体

的维特比译码算法参考文献[1,2]。3 仿真流程

根据维特比译码算法设计的FPGA代码,编译生成顶层模块之后,提出一种便捷的仿真设计方法,利用Matlab

同时打印出原始序列作为译码结果的参照:

 Columns1through24

1100010011……(后续序列省略)

在ActiveHDL中建立一个含有维特比软判决译码器的design之后,对源代码进行编译,然后在DesignFlow

21

level

Manager的options中设置要进行仿真的top列,在ActiveHDL下多次进行仿真,可以进一步验证算法结果。还可以在Matlab中进行编程,对测试序列引入一定干扰,使之在“000”“,111”的允许范围内有一定的抖动,进行误码率测试仿真等。完成了算法仿真之后,在此基础上进行代码的优化,再利用ActiveHDL与Matlab,或者其他工具,进行后仿真,编程下载,完成模块的最终实现。5 结 语

利用ActiveHDL在FPGA系统功能的设计和仿真上具有简单易用的特点,但是对于算法结构比较复杂的,需要严格的Testbench仿真序列的情况,仅仅使用手工规定测试序列或者定义宏,都显得比较麻烦,本文提出利用

Matlab进行测试向量的生成和验证,简化了仿真测试序

unit(s),在DesignFlowManager中点击functionalsimu2lation,就可以生成一个waveform,在这个波形图上对每个

输入信号配置“Stimulators”选项,设置时钟为100ns,对于

din0和din1,直接复制Matlab打印出来的测试序列作为formula,如图3。仿真一定时间,

就可以得到仿真波形。

图3 配置输入信号Stimulators的formula

列的手工输入,而且对验证结果正确性方面也有一定的借鉴。同时Matlab在通信系统模块和滤波器设计等等方面具有丰富的工具箱,对于FPGA算法设计人员而言,如果能充分利用这些资源,,加速设计进程,具有重要意义。

,.FPGA设计中参数确定

[J,2003,28(2):44

46.

]孙猛.VB高速译码算法及其FPGA实现[J].中国有线电

4 验证结果

图4是在ActiveHDL中得到的(2,1,7)卷积编码的维特比软判决译码仿真波形。din0和din1是输入的3b软量化的测试序列,dout0是输出的译码结果,和Matlab下卷积码的输入序列进行比较,从而判断FPGA算法仿真

结果正确与否。

视,2004(3):1318.

[3]刘虹.ActiveHDL612使用技巧小谈[J].鹭江职业大学学

报,2005,13(3):6366.

[4]程耀林.FPGA的系统设计方法解析[J].现代电子技术,

2005,28(19):90

93.

图4 维特比译码器仿真波形图[5]张志涌.精通Matlab615版[M].北京:北京航空航天大学

可以看出,在算法仿真下,维特比译码得到的译码序列和Matlab打印的原始信息序列一致。多次运行上述

matlab代码,生成随机的原始信息序列和两个输入测试序

出版社,2003.

[6]张俊.卷积码维特比译码算法最佳反馈深度研究[J].现代

电子技术,2006,29(3):4546,50.

作者简介 高志斌 男,1979年出生,研究生。主要从事无线通信基带信号处理与中频调制解调软硬件系统的研究。

(上接第19页)

智能、虚拟仪器、智能并口扩展、软件模块设计、多口RAM及直接数据写入等多种技术,实现了各种雷达分机的检测诊断及故障定位。系统采用USB总线实现了雷达分机脱机测试诊断的通用化和自动化,极大地提高了雷达装备维修的现代化水平。

参 考 文 献

[1]蒋旭,王志云,周静,等.USB在雷达功率中的测试研究[J].

[2]张爱国,肖文书,张兴敢.雷达接收机综合测试系统研究

[J].电子产品世界,2003(21):67

69.

[3]夏明飞,都学新,田冬,等.用VXI仪器组建通用雷达装备自

动测试系统[J].飞行器测控学报,2003,22(2).

[4]巩春源.CAT在雷达自动化测试系统中的应用[J].航天制

造技术,2003(6):2226.

[5]张红斌,马维华.基于VXI总线的某型雷达电路故障诊断系

统[J].兵工自动化,2004,23(1):46.

[6]蒋旭,黄允华,王洪锋.雷达故障的集成诊断应用研究[J].

飞行器测控学报,2003,22(1):7780.

电光与控制,2004,11(4):5052.

作者简介 薛兰柱 1964年出生,高级工程师,硕士研究生。主要从事雷达装备测试诊断研究。

22

本文来源:https://www.bwwdw.com/article/mdd4.html

Top