数字信号的基带传输系统VHDL+FPGA实现.doc_第1页
数字信号的基带传输系统VHDL+FPGA实现.doc_第2页
数字信号的基带传输系统VHDL+FPGA实现.doc_第3页
数字信号的基带传输系统VHDL+FPGA实现.doc_第4页
数字信号的基带传输系统VHDL+FPGA实现.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2011年小学期电路综合实验数字基带传输系统学院: 信息与通信工程学院 班级: 2009211109班 学号: 09210272序号: 29 姓名: 方芳 负责: 滤波器+系统级联一实验目的:(1)理解数字语音传输系统的原理和构成,以及各个功能模块的功能和实现原理。(2)掌握FPGA的设计流程和设计方法,熟练掌握应用软件Quartus II和Modelsim的使用。(3)学习并掌握FPGA的自顶向下的设计思想,并熟练使用VHDL语言编程设计芯片。(4)学会借助Matlab仿真系统进行系统各项性能的验证。(5)锻炼自身调试硬件电路板的能力,培养独立解决问题的能力。二实验内容:在给定的FPGA开发板上完成数字信号的基带传输系统,独立设计并开发系统的每个功能模块,实现输入信号的编码,滤波,传输(加性高斯白噪声),取样判决,最后验证传输质量。本实验以硬件设计为主,仿真软件为辅的原则,使用硬件来实现系统的功能,同时借助Matlab仿真软件完成滤波器系数的产生,通过绘制输出结果的波形,分析输出的结果的正确性。(1) 分析数字基带传输系统的构成,每个功能模块实现的功能。(2) 借助Modelsim仿真数字基带传输系统,并计算误码率,比较升余弦滚降滤波器的滚降系数不同时的抗干扰的性能。(3) 仿真无误后,在QuartusII中编译,并生成可下载的.sof文件,最后下载到FPGA开发板上实现其功能。(4) 调试硬件电路板,出现问题时,分析解决问题,最终实现功能。三 实验原理:1.、整个系统设计原理数字基带传输系统的原理框图如图1-1所示:图1-1上图是最佳基带系统的模型。对于理想信道,可假设C(f)=1。图中加性高斯白噪声(AWGN)是双边带功率谱密度为No/2的白噪声。为了达到最佳接收目的,总体传输特性设计为升余滚降滤波器Hr(f)=Gt(f)*C(f)*Gr(f),由于C(f)=1,只要Gt(f)*Gr(f)要满足升余弦的特性就可以实现最佳接收。这里在发送端设计一个根升余弦滚降滤波器作为发送滤波器,在接收端设计一个完全相同的根升余弦滤波器作为接收滤波器,这样Gt(f)*Gr(f)就满足了升余弦的特性。根据此模型我们可以用Matlab仿真的方法来测量该系统的误码率,比较滚降系数不同时系统的性能。基于图1-1所示的原理图,可以将系统分为七个模块,每个模块的功能如下,均用VHDL进行编程来实现。(1) 输入数字信号生成器,首先使用小m序列生成器,生成随机的数字信号;为了滤波的需要,还需将单极性的0,1码变成+1,-1的双极性码。(2) 发送端的根升余弦滤波器采用数字FIR滤波器来实现。借助Matlab中仿真根升余弦滤波器,并编程产生滤波器的抽头系数,然后将系数读入VHDL程序中,并完成输入信号和抽头系数的卷积。最后,将卷积后的结果读回到Matlab中,绘制波形图和眼图,分析结果正确与否。(3) 加性高斯白噪声(AWGN)的设计:按照给定算法实现随机的高斯白噪声。(4) 理想信道C(f)=1:实现信号和噪声的相加。(5) 接收端的根升余弦滤波器同样采用数字FIR滤波器来实现,设计方法和发送滤波器相同。(6) 取样判决,按照接收准则对取样信号进行判决。(7) 比较输入和输出信号,统计错误码元数目和总码元数目。2、滤波器设计原理 1)、根升余弦滚降滤波器的设计 为了实现最佳传输,我们知道,只要发送滤波器、信道和接收滤波器三者的传输函数的乘积,即Hr(f)=Gt(f)*C(f)*Gr(f),是升余弦滚降,此时可以满足奈奎斯特准则,就可以实现最佳接收,如图2-2所示是理论的升余弦滚降的频谱和时域冲激响应。为了实现确定信号在加性高斯白噪声干扰下的最佳接收,在设计中采用匹配滤波的方法,即Gs(f)和Gr(f)的频谱特性相同,均设计为根升余弦滤波器,将升余弦开方即可。 图2-2由图2-2可知,当滚降系数取不同的值时(例如=1,0.5或0.001),升余弦滚降滤波器的时域响应的最大值和过零点要保证相同,频域响应的截止频率应符合W=(1+) Ws(其中的Ws为=0时的截止频率,即Ws=1/2Ts,Ts为单位码元传输时间)。为了实现滤波,在VHDL程序中最重要的参数就是滤波器的抽头系数。在本设计中,抽头系数的产生借助Matlab来完成,实验中给出的抽头系数,它们分别是当滚降系数分别为=0.05,=0.5,=1的17阶(即N=17)的FIR滤波器的抽头系数h(n):h(0)h(16),这里抽头系数量化为16bit。编写Matlab程序来仿真滤波器并产生抽头系数,同时可以参考图2-3中用Matlab仿真出的频谱和时域冲激响应,左上为根升余弦的时域冲激响应,左下为升余弦的时域冲激响应。图2-3 实现滤波的算法在本次FPGA的硬件设计中,根升余弦滚降滤波器由FIR数字滤波器实现。我们知道滤波器是通过卷积计算来实现滤波的,即,展开为:用硬件实现FIR滤波器可采用多种结构,如直接型结构、级联型结构、频率采样型结构等,本设计采用17阶FIR滤波器的直接型设计方案,如图2-4所示,要实现卷积,通过移位、相乘、相加这三步即可实现。 结构图如图2-4所示: h(0) h(1) h(2) h(n-2) h(n-1)图2-4为了输入信号能完整地表现出成型滤波器的特性,在输入信号移位的同时要进行插零,由于设计的滤波器的抽头系数个数为17,在峰值和第一个过零点间的系数为4个,因此,在前后两个码元之间插入四个零就可以实现无码间干扰,同时最大程度地利用了带宽。下面说明了插零对输入信号的影响,结合本设计的实际情况,同学们就可以理解为什么要在卷积之前对输入信号进行插零的操作。 首先在x(n)每相邻两个点之间填充L-1个零,如图2-5所示,然后再对该序列作低通滤波处理。即令:图2-5 记x(n),w(n)的DTFT分别为X(ejx),W(ejy),由于 y=2f/fsy=2f/(Lfsy)=x/L 所以 若令z=ejy,则W(z)=X(zL)。因为x的周期为2,所以y的周期为2/L。上式说明,插零后信号的频谱W(ej)在(-/L/L)内等于X(ej),相当于将X(ejx)作了周期压缩。如图2-6所示。图2-6信号插值后频谱的变化为了完成对输入信号进行插零,即两个码元中插入4组零,由于码元是用2bit表示的,插入的零也要用2bit表述,例如,输入序列为:“01 11 11 01”,则插零后为“01 00 00 00 00 11 00 00 00 00 01 00 00 00 00”,需要注意的是插入的“00”也占一个周期,这时码元速率降低为原来的五分之一,因此,为了和系统的时序能够对应上,插零时的基准时钟要是系统时钟频率的五倍。同学们要特别注意,此处容易出错。图2-7是用Modelsim仿真插零和移位操作的时序图,由图可以看出,插零也可以和移位同时完成。需要注意的是,图中的数字是用十进制表示的,用二进制表示时要用2bit来表示,如上文所述。图2-7由于输入信号是2bit,抽头系数是16bit,经过发送滤波器后卷积运算的结果是18bit。 在FPGA的硬件实现中,做卷积运算时,让抽头系数保持不动,而输入信号不断地移位,和h(n)相乘再相加,如公式所示。为了实现移位,在硬件上采用移位寄存器来保存输入信号的值,由于滤波器是17阶的,即N=17,输入信号是用2位表示的,所以采用17个D触发器组成,每个D触发器保存2位数据。2)、接收滤波器的设计接收端的接收滤波器也是一个根升余弦滚降滤波器,其特性和参数和发送滤波器完全相同,仿真并产生抽头系数的方法也完全相同。不同的是,在做卷积运算时,不要对信号进行插零的处理,直接移位,相乘,相加就完成了卷积运算。需要注意的是,由于经过发送滤波器的信号是18位的,接收滤波器的抽头系数是16位的,因此,经过接收滤波器后的结果应该是34位的二进制数。四 实验设计流程图及流程叙述:1、 滤波器设计流程图:1)、发送滤波器: 输出count +1,If(count=1)= count =0ProcessAsel开关有效上升沿触发确定抽头系数Xn_in输入有效值 yes插零 count=0 与抽头系数相乘、迭加yesno存储输入数据寄存器移位,输入数据存入tmp(0) Asel作为进程中的一个敏感信号,当它有输入时,首先由此确定抽头系数,从而实现滚降系数可调。之后每当一个时钟的上升沿来的时候,首先判断输入Xn_in是否为有效值,这一步很重要,可消去输出结果仿真波形最开始的一段红线,尽可能的减少信号延迟。接着判断计数器count的值是否为零。如果为零,把输入的数据存为xx(xx是为计算而设置的一个临时变量);如果不为零,把“00” 存为xx。在此实现输入序列的插零运算。令抽头系数hn(0)始终与xx相乘,再将寄存器中的数据跟设定的抽头系数(hn(1)hn(16))依次相乘、迭加,此时将寄存器移位,把xx存入tmp(0),并将最后的结果作为滤波器的输出。整个发送滤波器输入数据为2bit,滤波器的抽头系数为16bit,输出为18bit。2)、接收滤波器:ProcessAsel开关有效上升沿触发确定抽头系数input输入有效值 yes输出与抽头系数相乘、迭加寄存器移位,输入数据存入tmp(0)Asel作为进程中的一个敏感信号,当它有输入时,首先由此确定抽头系数,从而实现滚降系数可调。之后每当一个时钟的上升沿来的时候,首先判断输入input是否为有效值,若有效,进行下面运算。令抽头系数hn(0)始终与input相乘,再将寄存器中的数据跟设定的抽头系数(hn(1)hn(16))依次相乘、迭加,此时将寄存器移位,把input存入tmp(0),并将最后的结果作为滤波器的输出。整个接收滤波器输入数据为18bit,滤波器的抽头系数为16bit,输出为34bit。2、 抽头系数的确定在刚开始设计滤波器时为了方便直接使用了附录所给出的抽头系数,但在级联协调时发现附录中的抽头系数是以13位小数实现的,但是高斯白噪声的设计是12位小数,为了能和白噪声在信道中实现正确加法运算,需要利用matlab产生抽头系数。 利用matlab中方便快捷的fdatool工具栏可实现不同滚降系数的根升余弦滤波器:以=0.01为例,下图分别为该滤波器的幅频响应,相频响应,冲击响应,以及十进制表示的抽头系数。 将十进制表示的抽头系数转换 为二进制补码形式,字长16bit, 小数点后12位: 图1 滤波器的matlab实现 3、 滚降系数的选择对于升余弦滚带滤波器的滚降系数a,它的范围是0a -以asel=”00”为例,此时a=1, write(buf,CONV_INTEGER(yout); -以整型数据形式写入一行 writeline(out1,buf); -以行的形式写入指定文件 end process; end;2)读入数据并绘制波形(matlab中) a=load(F:studyVHDLhn1.txt); %读入十进制仿真数据 plot(a); %绘制波形图4 matlab处理仿真数据波形五 实验仿真结果及分析:1、 发送滤波器的验证发送滤波器设计好后,需要对其正确性进行验证。为了使结果直观,给滤波器一个冲激信号,看他的冲激响应是不是为它的抽头系数。如果是的话,证明滤波器的设计是正确的。通过moldelsim仿真生成数据导入matlab生成图形的过程如下图5:输入信号为Xn_in,输出信号为Yn_out,输入一个冲击信号“01”,通过发送滤波器后的输出是17阶滤波器的抽头系数。下图6左边是a=0.01时通过matlab产生的抽头系数绘制的波形图右边通过modelsim导出的a=0.01的滤波器输出结果。下图7左边是matlab产生a=0.01的系数十进制表示,右边是经过冲激信号得到的卷积值进行进制转换后的数值图6 滤波器冲激相应波形图与抽头系数波形比较图7 冲激响应卷积值与滤波器抽头系数值比较2、 接收滤波器的验证(眼图)接收滤波器的作用除去信号传输中的噪声,最大限度地还原原始信号。由于modelsim的仿真结果不是很清楚,此处用matlab的眼图来解释。所有的图形都是modelsim仿真的数据导出后由matlab进行绘图的。图8 不加高斯白噪声时接收滤波器输出结果的波形图和眼图图9 信道中加入高斯白噪声后的波形图及眼图图10 经过接收滤波器之后的输出波形和眼图 对比上述三组图可知,在没有加入高斯白噪声时接收滤波器输出波形稳定,眼图清晰,而加入高斯白噪声后再次经过接收滤波器,虽然波形产生一定干扰,但仍能基本体现输入序列的波形,再经过采样判决后即可还原原始信号。3、 讨论噪声大小对误码率的影响 在高斯白噪声的顶层设计文件中实现方差可调,利用m序列产生伪随机信号作为信源,输入发送滤波器,在信道上加入高斯白噪声并送入接收滤波器,经过采样判决及误码统计,对比在相同总码数时不同噪声方差下的误码数,为减小干扰,其中滚降系数a始终为1.(总码数为count_all,误码数为count_wrong) 当噪声方差较大时: 当噪声方差减小时: 当噪声方差基本为0(但仍有噪声)时: 对比上图可知,对于同一个滤波器,随着噪声方差逐渐变大系统采样判决后的误码率随之增大,即对系统的干扰也越明显。4、 讨论滚降系数对误码率的影响 当滚降系数a=0.4时接受滤波器输出波形图和眼图如下:(不加高斯白噪声) 对比图8可知,对于不同的滚降系数,接收滤波器输出波形振幅不同,眼图清晰程度也有明显差别,说明随着滚降系数的减小滤波器性能逐渐变差,对于整个系统而言,误码率会提高,不利于采样判决还原原始信号。5、 整个系统误码率分析1)、a=0.01时的总发送码元和错误码元。(此时asel为“10”)2)、a=0.4的总发送码元和错误码元(此时asel为“11”)3)、a=0.8发送码元和错误码元(此时asel为“01”)4、a=1时的总发送码元和错误码元(此时asel为“00”)4)、对系统相同噪声,不同滤波器抽头系数的误码率统计如下:滚降系数1码元数:648989881148813988误码数:113152191234误码率:1.74%1.69%1.66%1.67%平均误码率:1.69%滚降系数0.8码元数:520298131448819488误码数:82173253352误码率:1.58%1.76%1.75%1.80%平均误码率:1.72%滚降系数0.4码元数:448989881348717988误码数122270398553误码率:2.71%3.00%2.95%3.07%平均误码率:2.93%滚降系数0.01码元数:49897488998912488误码数:153228300370误码率:3.06%3.04%3.00%2.96%平均误码率:3.015%通过统计可以看出,滚降系数a越大,系统的误码率越小,滤波性能越好。但是a越大,所占用的带宽就越大。所以在实际运用中,要综合考虑这两个方面,根据需要选择合适的滚降系数。六 实验中遇到的问题及解决方法:1)数据类型转换问题为了验证滤波器设计正确与否需要将滤波器输出结果导出至txt文本中再读入matlab中,其中就涉及到数据类型的转换:卷积结果是signed(33 downto 0)即34位有符号数,而文件的读写只支持整型(integer)比特型(bit)和bit_vector,刚开始进行仿真测试时程序一直报错,本来以为是算法问题,后来发现需要对输出结果进行类型转换,使用CONV_INTEGER转换才能正确写入文件。2)滤波器算法实现问题 刚开始在做个人模块时对系统级联的概念并不清楚,为了使滤波器结构更加清楚,将插零算法单独作为一个模块,并用一个小top文件实现由m序列到插零m序列的转换,并将其输出为发送滤波器输入,二者再用一个top文件整合,作为滤波器的独立部分这样做并没有什么不妥,然而当各个部分进行级联后发现这样嵌套top文件会给接收信号造成很大的延迟(长达十几个周期的无输出信号),影响采样判决的正确性。 因此将滤波器算法改为在其内部实现插零运算,这样一来将不仅能和系统的时钟相统一还能尽可能的减少信号延迟,从modelsim仿真结果上也能看出,滤波器输出最初阶段没有了红线,且延迟仅为几个周期。3)modelsim仿真正确但quartus仿真错误 当在modelsim里得到正确仿真结果时本来以为胜利在望不久就可以下载到实验板上了,可是当在quartus建立工程进行仿真时会发现本来在modelsim里误码率不足百分之二的算法在这里误码率却接近百分之五十,本来自己对这两个软件了解的就不是很深入,遇到这样功能性的问题后更是觉得棘手。经过上网查询,咨询学姐学长后得知,modelsim仅仅是功能仿真,若modelsim仿真结果无误,仅仅是说明算法能够实现所需的功能,而quartus是时序仿真,在这其中已经考虑到系统时序统一,管脚锁定等问题,因此只有当quartus里能够得到正确的仿真波形才能说明是真正完成了系统的设计。 而在quartus中最常见的问题是延迟,因此解决的方法是在quartus里的仿真波形中仔细观察每一级输出经历了多少个时钟周期的延迟,并在各级算法中考虑到延迟。(如在误码统计时应设计足够长的寄存器以等待第一个正确采样得到的m序列)4)modelsim中输出波形最开始总是出现红线在做个人部分的时候对这个情况并不重视,认为信号延时是不可避免的,只要能保证滤波器的正确即可实现滤波,然而在系统级联时才发现信号最初的红线部分对采样判决中能否采到正确的点上至关重要,因为第一个时钟上升沿之前,各部分的输出都是未知的。比如发送滤波器在第一个上升沿接到数据unknown,导致接受滤波器在第一个上升沿接到的数据也为unknown。或者发送滤波器和接受滤波器都开始运作了,但m序列发生器还没有开始工作,没有信号输出,那么经过滤波器之后的输出为U。解决的办法是在发送和接收滤波器的进程最开始都先对输入值有效值进行判断,只有当输入为有效的数值时再进行下面的运算,这样一来即可消除红线。5)在系统级联时发现误码率总是很大在做个人模块时最后输出为接受滤波器的34位卷积值,导入matlab绘制波形图和眼图都完全正确,可是当加入采样判决和误码统计后就会发现误码率大得惊人,同学说基本都可以说是“错误率”,根据采样判决的数据也发现它所采样的每个点基本都是错的,都不能还原为最初的m序列。可按照原理滤波器的设计应该已经没有问题,实在是无可奈何后向学姐请教,她仔细研究了我们算法后给出解答:对于17阶滤波器的抽头系数而言,前8个系数基本都很小,再经过量化编码卷积后很可能出现误码,对于接收滤波器的输出而言,若从第一个非零数就开始采样显然是不明智的,应等待至第一个能量最大值作为第一个采样点即(第9个点开始)此外考虑到滤波器算法中的插零部分,应每两个系统时钟采样一次,由此才能得到正确的滤波器产生的m序列。当采样正确时发现即使没有加高斯白噪声仍然有误码,这就说明误码统计部分有问题。通过modelsim仿真波形可以发现,接收滤波器输出的第一个非零值是在慢时钟的下降沿产生的(慢时钟作为误码统计的输入时钟)因此在误码统计中应采用下降沿触发才能对两个输入的序列(一个是原始m序列一个是经滤波器输出采样判决后得到的序列)进行正确比较。6)下载到电路板后发现四个数码显示管亮度总是不一样 由于这次使用的电路板我们都是第一次接触,怎样操作如何充分利用都是从零学起,在这其中最困难的要数怎样才能正确分频。由于板子上的固定时钟为50Mhz,而我们系统中所需要的频率只需几赫兹,这就需要分频器来解决时钟协调的问题。而且对于数码显示管而言,怎样利用人眼视觉暂留效应保证我们在看到的时候感觉是四个灯同时在亮,都是我们刚开始无法解决甚至无法理解的问题。经过不断地尝试改进后终于能够保证系统时钟为10赫兹时四个数码显示管能够“同时”点亮,说明分频基本能够达到要求。7) quartus仿真的时候出现Logic cell 不足报错根据讲义,我们这次试验采用的芯片是红色飓风二代,在刚开始测试时发现编译是通过的,可是当在管脚对应时会报错,原因是该芯片一共有36个9位乘法器但整个工程用了37个乘法器,发生溢出无法继续编译。由于乘法器主要运用在卷积运算,此时又不得不回过头来更改算法尽可能的减少乘法器的使用。后来一个偶然的机会发现同样的程序若在更高版本上的quartus编译则能通过,而并不用改变算法。不得不承认,若早些时候能够解决该问题会给之后的级联及拓展提供更多的时间,也应该可以做的更好。七 实验总结 为刚刚进入大三阶段的学生,这次电路综合实验对我而言无疑是时间最长,难度最大,责任最重,学到的知识最多的一次实验。既要求有整个数字基带通信系统的理论知识,又需要熟练使用VHDL语言编程设计芯片,掌握EDA的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论