基于ALTER EPM7128S的简易数字信号传输性能分析仪
- UID
- 824598
|
基于ALTER EPM7128S的简易数字信号传输性能分析仪
本作品设计一个简易数字信号传输性能分析仪,通过对个个方案的论证,最终选择两片CPLD做为核心器件。首先通过单片机控制时钟的分频,使用可编程逻辑器件CPLD以方便的产生不同数据率的伪随机信号,同时用12864液晶显示数据率及峰峰值。为了滤去整流输出电压中的纹波。通过二阶巴特沃斯滤波器滤波同时产生高增益的滤波信号。然后叠加伪随机信号用示波器显示眼图。对于产生的m序列是否采用曼彻斯特编码,则使用开关控制单片机来选择。通过数字分析电路与CPLD提取同步信号,再次用示波器显示眼图。本系统结构清晰,经过测试基本完成题目要求。采用CPLD产生。采用行为描述方式用VHDL语言对该逻辑进行硬件描述。设计的系统具有体积小、重量轻、功耗小、速度快、价格低、可靠性高、设计周期短等优点。为产生信号的m序列,我们采用Altera公司的Quartus ║软件,使用硬件描述语言VHDL对CPLD进行编程。采用CPLD快速提取位同步信号。利用CPLD内部丰富的资源来提取同步为信号。眼图显示方式的论证与选择
采用外触发方式显示。将时钟信号接入外触发端,调节示波器触发模式即可。
低通滤波电路的分析与计算
2.1.1 滤波分析
经典滤波的概念,是根据富立叶分析和变换提出的一个工程概念。根据高等数学理论,任何一个满足一定条件的信号,都可以被看成是由无限个正弦波叠加而成。换句话说,就是工程信号是不同频率的正弦波线性叠加而成的,组成信号的不同频率的正弦波叫做信号的频率成分或叫做谐波成分。只允许一定频率范围内的信号成分正常通过,而阻止另一部分频率成分通过的电路,叫做经典滤波器。2.1.2 低通滤波电路的计算在分析有源滤波电路时,一般都通过”拉氏变换”,将电压与电流变换成“象函数“U(s)和I(s),因而电阻的R(s)=R,电容的(s)=1/sC,电感的(s)=sL,输出量与输入量之比称为传递函数,即
对于同相输入二阶低通滤波电路
将电压电阻值代入公式f=1/2,根据频率100K,200K,500K算出相应的电阻和电容值。
2.2 m序列产生的分析 2.2.1 m序列由线性反馈移位寄存器产生的周期最长的二进制数字序列称为最大长度反馈移位寄存器序列,通常称为m序列。
2.2.2 m序列产生原理移位寄存器是由n个串接的双态存储器(寄存器)和一个移位时钟发生器以及一个由模2加法器组成的反馈逻辑线路组成,每个双态存储器称为移存器的级,每一级只能有两种不同状态分别用0和1表示。移位时钟到来时使每一级的存数(即状态)向下一级移动,成为下一级的新存数。
图2 线性反馈移位寄存器原理方框图
2.3 伪随机序列产生的分析
2.3.1 伪随机信号伪随机序列发生器的VHDL实现。CLK为时钟脉冲,RESET为清零信号,OE为输出使能端,当RESET和OE都为高电平时,序列跟随着CLK的节拍一位一位的从DOUT端输出。除此之外,该伪随机序列发生器最大的特点在于,他能根据SEL端的选择信号产生不同长度的m序列。基本能够满足各种情况对不同长度伪随机信号的需要。 根据伪随机序列产生的原理,采用行为描述方式用VHDL语言对该逻辑进行硬件描述。
2.3.2 伪随机信号产生原理
图3 伪随机信号产生原理方框图
2.4 曼彻斯特编码的分析
曼彻斯特编码(Manchester Encoding),也叫做相位编码(PE),是一个同步时钟编码技术,曼彻斯特编码的解释为:从低电平到高电平的转换表示 1,从高电平到低电平的转换表示0。原理图4所示。
图4 曼彻斯特编码原理图
2.5 同步信号提取的分析 2.5.1 同步信号提取方框图 图5 同步信号提取方框图
2.5.2 同步信号提取原理分析
从异步串行码流中提取位同步时钟信号,设计思想的基本出发点是在外部数据流(code_in)的上升沿和本地时钟(clk)上跳沿相比较无非是超前和滞后两种情况,如图5、6所示,从数据流上跳沿的角度来看,若将数据流code_in与本地时钟clk进行逻辑相与,若相与结果为“1”则说明数据流滞后于本地时钟,若为“0”则说明数据流超前于本地时钟。
图6 数据流滞后于本地时钟△T
图7 数据流超前于本地时钟△T
根据以上原理,本设计中的鉴相器作用是鉴别出数据流和本地时钟的相位超前滞后关系,控制计数器采用双向计数器,鉴相器输出q作为控制计数器的计数方向输入,q为1则向上计数,q为0则向下计数。控制计数器的计数输出用来控制相位调整选择模块的选择端。 相位调整选择模块由相位调整和相位选择功能。
2.6 眼图显示的分析2.6.1 眼图 眼图的成因:由于示波器的余辉作用,扫描所得的每一个码元波形将重叠在一起,从而形成眼图。
眼图是指利用实验的方法估计和改善(通过调整)传输系统性能时在示波器上观察到的一种图形。观察眼图的方法是:用一个示波器跨接在接收滤波器的输出端,然后调整示波器扫描周期,使示波器水平扫描周期与接收码元的周期同步,这时示波器屏幕上看到的图形像人的眼睛,故称为眼图。
2.6.2 眼图的分析从眼图上可以观察出码间串扰和噪声的影响,从而估计系统优劣程度。另外也可以用此图形对接收滤波器的特性加以调整,以减小码间串扰和改善系统的传输性能
接收信号的最佳取样时间是纵向眼开度最大的时刻t1。理想情况下V2- V1=0,纵向眼开度为1。由横向眼开度确定的时间宽度定义了不会由于码间干扰产生误码的时间范围Δt。眼开度受噪声和码间干扰的影响,从眼图的张开度可以估计出码间干扰的大小,判决时刻过门限失真量的大小以及定时抖动等。
图8 3比特非归零码的8种组合
图9 8种组合同时叠加形成的眼图
图10 简化的眼图
数字信号系统的幅度噪声会使眼开度减小,纵向眼开度的高度Ymax与最大信号电平V2定义了最大的幅度畸变。眼闭合度越大(纵向眼开度越小),说明正确判断信号中“1”与“0”越困难。在最佳取样时间t1处的眼开度的大小定义了系统的噪声容限。
噪声容限= (2-1)
取样时间改变时,眼图边线的斜率定义了系统时间误差的灵敏度:当斜率较小时,时间误差的概率增加。在光纤系统中由于接收机噪声和光纤的脉冲畸变,会产生时间抖动。如果取样时间正好在信号电平与判断阈值水平相交的时刻的中点,则判断阈值电平处失真量ΔT表示了时间抖动大小,用百分率表示为:
定时抖动= (2-2)
式中Tb是一个比特的时间间隔。
用示波器对伪随机数字序列进行观察时,示波器的扫描周期应取为Tb或Tb的整数倍,即扫描频率取为1/Tb或1/NTb 。当示波器扫描频率和信号速率的比改变时,并列的眼睛可以多些或少些。当扫描周期为Tb时,示波器的扫描图形与一只人眼相似,当扫描周期取为NTb时,并列的眼睛为N个。
。
3电路与程序设计3.1电路的设计3.1.1系统总体框图系统总体框图如图5所示
图11 系统总体框图
3.1.2 m序列产生子系统框图与电路原理图 1、m序列产生子系统框图
图12 m序列产生子系统框图
图10
3.1.3 滤波子系统框图与电路原理图
1、3路滤波子系统电路
图11 滤波子系统电路
3.1.4 幅值调节子系统电路
图9 100mV幅值调节子系统电路
3.1.5 加法器子系统电路
111
图10 加法器子系统电路
3.1.6 滤噪子系统电路
图11 滤噪子系统电路
3.2程序的设计3.2.1程序功能描述与设计思路1、程序功能描述
根据题目要求软件部分主要实现产生步进可调的m序列(包括采用曼彻斯特编码)。
2、程序设计思路
1)通过开关控制单片机选择是否采用曼彻斯特编码。
2)通过按钮控制单片机产生不同波特率的m序列,并用12864同步显示。
3.2.2程序流程图1、主程序流程图
图12 主程序流程
2、数字分析电路流程图
图13 数字分析电路流程图
4测试方案与测试结果4.1测试方案1、软件仿真测试
3、硬件软件联调
经检查测试硬件电路完整,联调成功。
附录1:电路原理图
附录2:源程序 1. . 数字信号产生程序
//mcu_interface//
library IEEE;
use IEEE.Std_logic_1164.all;
entity mcu_interface is
port(mcu_data : in std_logic_vector(7 downto 0);
wr : in std_logic;
count : out integer range 0 to 511);
end mcu_interface ;
architecture mcu_interface_arch of mcu_interface is
begin
with mcu_data select
count <= 500 when "00000001", --1 10k
250 when "00000010", --2 20k
167 when "00000011", --3 30k
125 when "00000100", --4 40k
100 when "00000101", --5 50k
83 when "00000110", --6 60k
71 when "00000111", --7 70k
62 when "00001000", --8 80k
56 when "00001001", --9 90k
50 when "00001010", --10 100k
500 when others;
end mcu_interface_arch ;
//f_freq//
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity f_freq is
port( count : in std_logic_vector(8 downto 0);
f_in : in std_logic;
f_out : out std_logic);
end f_freq;
architecture behav of f_freq is
signal f : std_logic;
signal count1 : std_logic_vector(8 downto 0);
--signal count1 : integer range 0 to 4294967295;
begin
process(f_in)
begin
if f_in='1' and f_in'event then
if count1<(count-1) then
count1<=count1+1;
else count1<="000000000";
f<=not f;
end if;
end if;
f_out<=f;
end process;
end behav; |
|
|
|
|
|