tag 标签: fir

相关博文
  • 热度 11
    2015-3-24 13:54
    687 次阅读|
    0 个评论
       引言: 数字滤波器是语音与图像处理、模式识别、雷达信号处理、频谱分析等应用中的一种基本的处理部件,它能满足波器对幅度和相位特性的严格要求,避免模拟滤波器所无法克服的电压漂移、温度漂移和噪声等问题。有限冲激响应(FIR)滤波器能在设计任意幅频特性的同时保证严格的线性相位特性。   一、FIR数字滤波器   FIR滤波器用当前和过去输入样值的加权和来形成它的输出,如下所示的前馈差分方程所描述的。   FIR滤波器又称为移动均值滤波器,因为任何时间点的输出均依赖于包含有最新的M个输入样值的一个窗。由于它的响应只依赖于有限个输入,FIR滤波器对一个离散事件冲激有一个有限长非零响应,即一个M阶FIR滤波器对一个冲激的响应在M个时钟周期之后为零。   FIR滤波器可用图1所示的z域块图来描述。   其中每个标有z-1的方框都代表了有一个时钟周期延时的寄存器单元。这个图中标出了数据通道和必须由滤波器完成的操作。滤波器的每一级都保存了一个已延时的输入样值,各级的输入连接和输出连接被称为抽头,并且系数集合{hk}称为滤波器的抽头系数。一个M阶的滤波器有M+1个抽头。通过移位寄存器 用每个时钟边沿n(时间下标)处的数据流采样值乘以抽头,并且求和得到输出yFIR 。滤波器的加法和乘法必须足够快,在下一个时钟来到之前形成y 。并且在每一级中都必须测量它们的大小以适应他们数据通道的宽度。在要求精度的实际应用中,Lattice结构可以减少有限字长的影响,但增加了计算成本。一般的目标是尽可能快地滤波,以达到高采样率。通过组合逻辑的最长信号通路包括M级加法和一级乘法运算。FIR结构指定机器的每一个算术单元有限字长,并且管理运算过程中数据流。   二、FIR数字滤波器设计的实现   目前FIR滤波器的实现方法有三种:利用单片通用数字滤波器集成电路、DSP器件和可编程逻辑器件实现。单片通用数字滤波器使用方便,但由于字长和阶数的规格较少,不能完全满足实际需要。使用DSP器件实现虽然简单,但由于程序顺序执行,执行速度必然不快。FPGA/CPLD有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP芯片来说,其并行性和可扩展性更好。但长期以来,FPGA/CPLD一直被用于系统逻辑或时序控制上,很少有信号处理方面的应用,其原因主要是因为在FPGA/CPLD中缺乏实现乘法运算的有效结构。   现在的FPGA产品已经能够完全胜任这种任务了。其中Altera公司的Stratix系列产品采用1.5V内核,0.13um全铜工艺制造,它除了具有以前Altera FPGA芯片的所有特性外,还有如下特点:芯片内有三种RAM块,即512bit容量的小RAM(M512)、4KB容量的标准RAM(M4K) 、512KB的大容量RAM(MegaRAM)。内嵌硬件乘法器和乘加结构的DSP块,适于实现高速信号处理;采用全新的布线结构,分为三种长度的行列布线,在保证延时可预测的同时增加布线的灵活性;增加片内终端匹配电阻,提高信号完整性,简化PCB布线;同时具有时钟管理和锁相环能力。   FIR滤波器的Verilog HDL设计实例   1、设计意图   本例主要是在Stratix器件内实现基本有限脉冲响应滤波器。   FIR的基本结构包括一系列的乘法和加法。FIR的运算可用式(1)的方程描述,现重写如下:   一个L=8的FIR设计如图2,利用了输入的8个样本。因此称之为8抽头滤波器。该结构是有一个移位寄存器,乘法器和加法器组成的,可实现L=8阶的FIR。其数据通道必须足够宽,以适应乘法器和加法器的输出。这些采样值被编码为有限字长的形式,然后通过M个寄存器并行移动。可见用一个MAC级连链就可以构成这种机器。每个寄存器提供一个单位样本内延迟。这些延迟输入与各自的系数相乘,然后叠加得到输出。图2所示为基于MAC的8阶FIR数字滤波器结构   在该设计中有八个抽头,各抽头有18位输入和滤波器系数。由于一个DSP块可以支持4个18位输入的分支,所以设计需要2个DSP块。输入数据串行加载到DSP块中,DSP内部的移入/移出寄存器链用于产生延迟。滤波器系数从TriMatrix™ 的ROM存储器中加载。   2、Verilog HDL代码编写风格   HDL代码编写应该具有很好的易读性和可重用性,而自顶向下的分割方法可以帮助我们达到最佳的结果。HDL代码在达到功能的情况下要尽可能的简洁,尽量避免使用带有特殊库单元的实例,因为这样会使得整个进程变得不可靠。   在本设计中,我们将设计划分成一个顶级文件和三个次级文件,并且调用了QuartusII中的MegaFunction功能辅助完成整个设计。   图3显示FIR滤波器的顶级方块图   表1:FIR滤波器的设计范例的端口列表       3、验证仿真   完全可综合设计的一个优点就是同样的HDL代码能够用于验证和综合。在使用HDL代码之前必须要验证设计的功能,最好且最简单的方法就是利用验证工具,其次是利用仿真工具作有目的的仿真。   QuartusII内部带有仿真器,只要通过建立正确的Vector Waveform File(向量波形文件)就可以开始仿真了。图4所示为QuartusII内部仿真器得到的8阶FIR的脉冲响应波形。   五、结论   利用Verilog HDL设计数字滤波 器的最大优点就是可使设计更加灵活。比较硬件电路图设计,Verilog HDL语言设计的参数可以很容易在Verilog程序中更改,通过综合工具的简化和综合即可以得到电路图,其效率要高出利用卡诺图进行人工设计许多。而且编译过程也非常简单高效。优秀编码风格能够在综合过程中节省芯片使用的单元,从而降低设计成本。   参考文献:    . 夏宇闻。VerilogHDL数字系统设计教程,北京航空航天大学出版社,北京. 2003.    . Altera Corporation. Introduction to QuartusII. 2003    . Michael D. Ciletti. Advanced Digital Design with Verilog HDL. Prentice Hall, NJ.2005.    .彭保等.基于VerilogHDL的FPGA设计. 微计算机信息, 2004年第20卷第10期
  • 热度 3
    2014-10-6 15:42
    418 次阅读|
    0 个评论
      来源: 中关村在线       爆料人士称,LG第二款Firefox OS手机名称为LG v31,将由日本kddi定制推出。   在智能手机市场,android系统无疑是现在的大热门,该系统自从诞生以来至今始终稳坐系统占有率排行版第一的位置。小米、htc、华为、三星更是基于该系统定制开发了具有自己特色的第三方系统固件。 然而有symbian、palm、meego等经典系统的前车之鉴。很多手机厂商都在寻找android之外的备胎。比如三星与intel联合开发的tizen,魅族近来示好的ubuntu,以及meego原版人马打造的sailfishos等等。 那么老牌韩系厂商lg很早就把部分注意力转移到了其它平台,例如从惠普手里收来了webos,并且也在尝试firefoxos这个新系统。在2013年lg就推出了旗下首款firefoxos智能手机,命名为lgfireweb。 近日,twitter上一位名叫@evleaks(山寨爆料大神),真实推特帐号为evleaksjp的网友为我们带来了lg旗下第二款firefoxos手机的消息。这款机器名为lgv31,又名lgks1401,将由日本kddi定制推出。
  • 热度 12
    2013-10-18 09:51
    2457 次阅读|
    1 个评论
    基于 FPGA 的数字滤波设计— FIR 设计 1 3.1 FIR 阶数和系数的确定        按照 1.3 节给出的滤波器指标,利用 MATLAB 的 FDATOOL 工具,采用窗函数法设计出的 FIR 滤波器需要 700 多阶,如图 3.1 所示。评估 FPGA 资源,不能够完成滤波的主要原因是无法保存输入的历史数据。即使参数做微调也只能将阶数降到 300 阶。究其 FIR 阶数居高不下的原因主要在于, 60Hz-64Hz 的过渡带相对于采用频率 1KHz 来说太窄,即滤波器的滚降过快。 Fstop=64Hz 就是由此 公式计算得来。从 1024 序列中抽取出 128 的序列,那么 M=8 ,计算得 fc64Hz 。所以为了保证不出现混叠, Fstop=64Hz 。        经过多次评估得出,在 2C8 器件基础上对 72 个通道进行 FIR 滤波,最多只能运算 85 阶,为了便于计算采用 64 阶 FIR 滤波。 图 3.1 按照指标设计的 FIR 滤波器模型 考虑到脑电信号一般低于 30Hz ,那么我们将通带频率定为 20Hz 。同时我们考虑到,混叠只要对带内信号不产生影响,混叠也可以产生,那么我们可以计算出 Fstop=128-60=68 。这样优化的方向就是,使得滤波器的过渡带趋于平坦,我们知道,过渡带直接影响到 FIR 的阶数。 形成了新的指标如下:        原采样率        : Fs=1024Hz 通带               : Fpass=20Hz               保证 30Hz 衰减不低于 3dB 截止频率        : Fstop=68Hz 利用 MATLAB 的 FADTool 工具生成 FIR 模型如 3.2 图所示。 37Hz 左右才衰减 3dB ,保证率 30Hz 不衰减 3dB 。 图 3.2 设计的 64 阶 FIR 滤波器模型 具体设置参数如下: 选择:低通( lowpass )、 FIR 、基于窗口设计( window )、 kaiser 窗口设计。 设置:采样频率 Fs=1024, 通带 Fpass=20, 阻带 Fstop=68 ;               通带衰减 Apass=0.2, 阻带衰减 Astop =50dB 。 这些参数中, Fpass 、 Fstop 、 Astop 等都可以修改,主要目的就是为了使得 FIR 的阶数为 64 阶(由于 FPGA 硬件资源限制,本系统中只能设计 64 阶的 FIR )。当然在保证系统需求的前提下,可以尽量降低 FIR 的阶数。        FIR 阶数确定后,就可以生成 FIR 系数了,利用 FDATOOL 如图 3.3 的系数生成工具,可以生成各种不同类型的系数。 图 3.3 FDATOOL 系数生成工具 此系统中 FPGA 采用了 16 位有符号乘法器结构,所以在此生成了 Signed 16-bit integer 类型的系数。 3.2 基于 FPGA 的 72 通道 FIR 滤波器设计 3.2.1   FIR 参数和 FPGA 资源之间的对应关系 1、   FIR 的阶数决定了 FPGA 乘法单元使用次数,阶数的高低影响滤波的效果(频响)。 2、   FIR 计算的位宽选择: 8bits 、 16bits 、 32bits 。影响精度,即滤波效果(小信号)。 3、   运算速度,决定了 FPGA 的主时钟,即影响功耗。 4、   通道数量,每个 ADC 器件采集的 24 路信号轮流滤波,那么滤波过程中需要保存每个通道的阶数个历史数据,影响的存储单元容量的大小。 3.2.2 FIR 实现结构: 1 个 MAC 对应一个 ADC 器件 利用 Quartus II 软件中的 MegaWizard Plug-In Manager 工具生成的 MAC 单元结构如图 3.4 所示。设置 datab 为有符号输入(输入 FIR 系数), dataa 为无符号输入(输入信号序列)。 aclr0 为异步清零。 图 3.4 MAC 乘累加单元            利用此 MAC 单元设计出的 64 阶 FIR 滤波器结构如图 3.5 所示。 ADC 器件对 24 路通道进行采样,并将采集到的 16bits 位宽的数据存入 RAM 中。在 RAM 中划分 24 个通道对应的不同的地址范围。 RAM 中保存的每个通道输入的历史数据个数有 FIR 阶数决定,即为 64 个。在 ADC 完成当前通道当前采样值后, MAC 单元开始从 RAM 中调入数据、从 ROM 中调入 FIR 系数,进行 FIR 最基本的乘累加运算,运算次数由阶数决定。系数采用 16bis 无符号整型表示,所以在计算完成后需要做归一化处理。 图 3.5   64 阶 FIR 滤波器结构
  • 热度 10
    2013-10-18 09:51
    833 次阅读|
    0 个评论
    基于 FPGA 的数字滤波设计— FIR 设计 2 3.2.3 双口 RAM 容量的计算和划分(固定边界的 RAM 实现循环缓冲机制) 图 3.6   4 抽头 FIR 滤波器的数据存储器寻址 首先介绍固定边界的 RAM 实现循环缓冲机制,如图 3.6 所示。 RAM 中保存四个最新数据样本的 “ 时间历史 ” 。将新数据值写入存储器时,覆盖最旧的值,可以在 FPGA 内部的固定边界 RAM 中实现这一延迟线。为方便存储器寻址,从存储器读取旧数据值时,应从刚写入值的位置之后的一个位置开始。例如,假设将 x(4) 写入存储器位置 0 ,则随后应从位置 1 、 2 、 3 、 0 读取数据值。可以将这个例子推广以支持任意抽头数。以这种方式寻址数据存储器位置时,地址发生器只需要按顺序提供地址,而不用考虑是寄存器读操作还是寄存器写操作。到达最后一个位置时,存储器指针必须复位到缓冲器的起始位置,因此这种数据存储缓冲器是循环的。系数与数据同时取出。所选的寻址方案决定了最旧的数据样本必须最先取出。因此,最后一个系数必须最先取出。系数可以反向存储在存储器中: h(N-1) 是第一个位置, h(0) 是最后一个位置,地址发生器提供递增地址。或者,系数也可以正常方式存储,而对系数的访问则是从缓冲器的末端开始,地址发生器递减。在图 7.12 所示的例子中,系数以逆序存储。        然后我们确定本设计所需的 RAM 容量。从结构中知道 ADC 需要向 RAM 中写入数据,而 MAC 单元需要从 RAM 中读出数据,所以,设计了一个双口 RAM 。对 RAM 的读写操作拥有两个独立的地址和数据总线。在操作过程中需要注意读写冲突。 RAM 所需要的容量可以由下述公式计算得来:                      ( 3-1 )        其中 maxadd_ram 为 ram 地址最大值, chan_num 表示通道数, n 为 FIR 阶数。 那么在本设计中,计算得 maxadd_ram=1536 ,取大于 1536 最近的 2 的幂次方 2048 。这是由于 FPGA 内部定义的 RAM 容量必须为 2 的幂次方。所以双口 RAM 需要的容量为 2048*16bits=8M4K ,即需要 8 个 M4K 容量。 RAM 的需要 11bits 地址线。将 11 根地址线分成高低两个部分组成。高 5 位由通道数决定。低 6 位能够确定 64 个存储单元,和滤波阶数相对应。如图 3.7 所示。 图 3.7   TwoPort RAM 存储划分 这样为每个通道准备了 64 个存储单元。 RAM 读写操作说明: 1 、 Temp_Add 作为指针,每次 ADC 有新值采集来时, Temp_Add 自加 1 ,结合通道值,作为写入地址。 2 、在 FIR 计算时, Temp_Add 对应的存储单元为最新值, Temp_Add+1 为最旧值, Temp_Add 自加 64 次读出当前通道保存的所以值,参与 MAC 乘累加运算。 3 、必须保证读写不能冲突,所以在 ADC 模块的 data_ok 上升沿时执行写入操作,下降沿时开始运算。 3.2.4 基于 FPGA 的 FIR 滤波器的实现        分析了 MAC 单元和 RAM 单元后,就可以实现具体的 FIR 滤波器了。 从图 3.5 可知,实现 FIR 滤波器,数据经过了哪些资源模块,简单的连接这些模块可以实现数据路径的建立。建立好的数据路径就像是一条完整的生产线,但如何生产需要额外的控制单元,譬如,何时开始滤波,何时向 RAM 中写入数据,何时从 RAM 中读出数据,等等。这些关键的指令都需要控制模块在适当的时候发出。显然,现在缺少这些核心的控制模块。如 图 3. 8 所示,加入控制模块后的结构多了 RAM 的写入控制模块、 MAC 控制模块和数据输出调整模块。 图 3.8 完整的 FIR 滤波结构        其中, wr_ram_ctr 模块,在检测到 adc_data_ok 上升沿后向 ram 中写入新采集到的数据; mac_ctr 模块,作为 FIR 计算控制核心,在检测到 adc_data_ok 下降沿后开始计算 FIR ,即从 RAM 和 ROM 中读出数据,并决定何时结束 FIR 的计算; adjust_out 主要完成归一化 mac 输出的结果,并调整数据时序。        设计过程中的注意点: 1、   数据和系数送到 MAC 单元的两个输入端口需要同步; 2、   每次 FIR 计算需要 64 次乘加运算,加上数据在寄存器之间延时,实际运算需要 69 个 CLK 系统时钟周期; 3、   每次 FIR 计算完毕需要对 MAC 内部寄存器清零。
  • 热度 8
    2013-10-18 09:51
    928 次阅读|
    0 个评论
    基于 FPGA 的数字滤波设计— FIR 设计 3 .3 FIR 滤波器总结 按照上述设计最终生成的原理图顶层如图 3.9 所示。我们可以计算出 FIR 滤波所花费的时间。 图 3.9 FIR 滤波器顶层 首先介绍 adc_ctrl 模块和 fir 模块之间的关系。 adc_ctrl 模块: 输出信号 data_ok 、 first 、 last 信号,高电平有效,并且持续 1 个 clk_adc(3M) 时间。通道选择 adc_ch_sel 和数据输出 adc_ad_out 端口在 data_ok 等信号有效之前已经准备好,并且注意, adc_ch_sel 在 data_ok 有效时输出 1-12 Or2-24 。同时保证在 CS 拉低后的 6 个 clk_adc 后改变通道值。 fir 模块: 在 run 上升沿发起后,等待 ram 中存满 1536 个新数据后,检测到 adc_ctrl 模块输出的 data_ok 信号的下降沿后(保证数据完成保存后)开始计算当前通道,当前 data_ok 信号指定的输入数据的 fir 值。大约需要不大于 70 个 sys_clk 时钟周期计算结果。 Fir 模块需要的 chan_sel 信号是 0-11 or 0-24 ,所以由 adc_ctrl 模块送过来的 adc_ch_sel 需做调整。 时序对接要求: 假设 :sys_clk=100M 10ns adc_clk=6M 166ns 超频 clk_sample=10k 100us 超采 采集时间计算: adc_ctrl 模块需要 23 个 adc_clk 时钟周期输出一个采集数据,按照最大通道数 24 计算,一个采样周期 clk_sample ,采集需要的时间为: 166ns*23*24=91632ns=91.6us100us, 即需要大约 9163 个 sys_clk 周期。那么按照 8K 超采, adc_clk 最低需要多高的时钟?经计算需要 adc_clk4.3M 。注意此时间并不包括组帧等其他时间。 FIR 运算时间计算: 计算一个数据的 64 阶 fir 值,需要不大于 70 个 sys_clk 周期。同时, FIR 是在每个 data_ok 信号的下降沿后开始计算的,那么必须在下一次 data_ok 信号的下降沿来之前计算完成。知道两个 data_ok 有效信号之间的间隔为 23 个 adc_clk 周期。那么必须满足: 70sys_clk23 adc_clk 如果 30M 的 sys_clk , 3M 的 adc_clk ,那么可以计算出, FIR 最大阶数在 200 以上。 从以上结论可以看出, 利用 FPGA 设计 FIR 数字滤波器的瓶颈并不在于 FPGA 运算速度不够快,而是在计算 72 个通道 FIR 时需要保存很多的历史数据,对 FPGA 内部的存储器提出了更大的要求。 那么我们知道, 64 阶 FIR 并不能完成来时提出的指标要求,必须寻求其它更加可行的方案。
相关资源