DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1573|回复: 0
打印 上一主题 下一主题

[待整理] 《玩转IP core》之十三:简直的层层叠,FIR滤波器的串联实现

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-12 16:22:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
“咳咳”,诸位,诸位,安静了,老衲已经在台上等了很久了(今天忘了带惊堂木,汗)。今天我们继续信号处理的行程,给大家介绍FIR滤波的串行实现。
         
        却说“请介绍FIR滤波器和IIR滤波器的差别”,这可是一道非常典型的面试题。这道题目类似于《哈利波特》里面那个“分院帽”的作用,当然这个题目里面没有宝剑。
       
        你回答“有限带宽和无限带宽…”,学信号处理的,该去做算法。
       
        假设,答案全是“面积、速度…”,是数字逻辑设计的人士。
       
        再者,你给我讲“循环、CPU周期…”, DSP程序员一定适合。
       
        …“微带线,阻容网络…”…射频部门。
       
        全部都说了,就去受夹板气的系统部。
       
        什么都不懂?也好办,当领导啊。(四周看看,我们方丈不在吧?病从口入,祸从口出…南无阿弥陀佛!)
       
        不多说面试了,大伙儿关心的是数字逻辑设计。这一讲里面,主要介绍的是FIR滤波的串行实现。随便提一下,什么“根升余弦”啊、“椭圆”啊、带宽啊、过渡带啊、串行、并行啊…这些不用我们数字逻辑设计工程师操心,是算法工程师的一亩三分地。你要是愿意狗拿耗子,万一挨打,我这里不报销医疗费。这些概念,某家也不详谈,都是数字信号处理里面的内容,不是一句两句讲的清楚的。做算法的人自然明白,这是基本功。搞数字逻辑的不清楚不影响工作,如果想做到“知其然,也知其所以然”,可以参考《国外电子与通信教材系列•数字信号处理(第4版)》(电子工业出版社)这本经典教材。能不能看得懂,我不保证啊。似乎很多工程师和数学有仇的。
       
        我们需要的是滤波器的阶数、各个步骤是否截尾(如何截取我们都不要操心,自然有人告知)、各个系数的值(如果是固定系数的滤波器。实际上,这个固定的可能极少。一般要求都是可编程“programmable”的。为什么呢?因为做算法的也怕自己设计错了,不好修改。)。好了,不失一般化(贫僧特别喜欢数学里面的这个说法),大伙儿遇到的设计要求是:设计N阶、参数可编程的、串行FIR滤波器。
       
        突出重点,后面不介绍参数配置、启动等等一般性功能的设计。大伙儿集中火力,研究N阶串行FIR滤波器。大家都同意吧?(不同意的也必须同意,键盘在寡人的手里,由不得他人指手画脚。这就是所谓话语权的问题。)
       
        按照“层层叠”的规则,我们先把“大厦”搭起来。然后,再看哪里可以拆掉并且可以保持“大厦”不倒。
       
        READY? GO… (背景Music!“…陪你一起游戏人生, 世上有许多痴情人…”)
        还有,值得提一句的是,以后图里面的运算符我们都认为可以满足系统的时钟频率要求。如果不能满足,前面的讲座里面已经介绍对策了,在这里不重复。
       
        串行FIR滤波器的基本公式是:
        y(n) = aN × x(n) + aN-1× x(n) + …… +a0× x(n-N)
        照公式画图,这可是基本功。滤波器的基本理论结构如下。唯一需要注意的是结构图里面的数据从左到右的顺序,和公式里面的顺序正好相反。
       

         
        这个结构在算法层面没有问题,前仿真也能够通过。但是,在数字逻辑上是有问题的,不只列位看官知晓不?如果没有看出来,那么建议大家再去看看某家的“菜谱”一讲。关键点就在这个结构图的下方,这么多的组合逻辑,需要在一个时钟周期内完成。我们算一算:N个乘法还有一个N个数的加法。这个时钟得多慢,才能保证出出现冲突和竞争啊。这个成蜗牛滤波器了,估计是没人要的。
       
        理论和实现之间的道路,需要广大工程师来铺。
        下面是一个真正可以实现的结构。奇数阶的滤波器需要特殊处理,在此不详细描述。其中,假设乘法器恰恰满足系统时钟要求,两个数值相加恰恰满足系统时钟要求。一般情况下,图里的“两个数值相加”的速度远远大于“乘法”的速度,所以可以考虑三个数值、四个数值……相加的结构。这个是进一步地改进。
       
        一般原则是,相加的数值的数量越多,那么需要的D触发器越少,系统越经济。
         
       

       
        好了,FIR滤波器的大厦建好了。下来,我们要开始抽“层层叠”里面的木条了。请目不转睛地看着老夫的这个大厦何时倒塌,等着吧…
       
        话说,按照一般信号处理的理论,为了滤波器的稳定以及滤波的平稳,一般滤波器的系数是对称的。也就是说,假设N是偶数:
       
        至于N是奇数的情况,也是类似,只是有一个独立的系数。
       
        这是个好消息,可以帮助咱们去掉很多木条。(您不知道这个?正常啊,谁叫您没好好学些《数字信号处理》呢?这就是理论指导实践的一个典型例子。子曾经曰过:科学技术是第一生产力。)
       
        下面是,根据新的信息,优化的结果,节约了一半的乘法器。串行FIR滤波器的基本公式可以等效为:
        y(n) = a0 × ( x(n) + x(n-N) )+ a1× ( x(n-1) + x(n-N-1) ) + ……
        先加法后乘法,结合律永远放光辉。知道为什么初中的时候,我们玩命做合并同类型的题目了吧?对于工程师,数学绝对有用。
       
        第一层加法和乘法之间的D寄存器是否必须,需要根据系统的时钟频率要求仔细评估。这个不想多说,点到为止。
       
        如果必须保证FIR滤波器里面的运算器的绝对精度,就是说每次运算都要升位的话,这个结构能够节约的面积的确有限。但是,一般而言,数字信号处理是允许一定误差的,也即每次运算允许截尾。这个时候,下面的简化的节约可就大了去了。现在至少去掉了三分之一的木条了,胜造七级浮屠的感觉。(这个又是先验知识了,不一定每个数字逻辑工程师都知道。话说回来了,恐怖电影里面观众总比主角多知道一点点信息,评书里面说书的也应该比诸位多知道一点点信息,这也是天经地义的了。知道的一样多,那叫交流不叫说书了。)
         
       

       
        当然,这两个结构都是可以时分复用实现的,贫僧就不多啰嗦了。(已经象《大话西游》里面的唐僧了,再多说要被拉去戒律堂掌嘴----“何止掌嘴,剐了的心都有了。叫你不知死活,说真话。”,方丈心里想。)
       
        按照篇幅,现在该是说打油诗,洗脚睡觉的时间了。但是,FIR滤波器的内容实在太多,大家再忍耐一下,容吾再多唠叨一个例子。即使这样,也是挂一漏万,不少东西需要在座的各位自己私下慢慢思量。
       
        我们略略领略一下系统设计与单元设计的不同,看一个降采样的例子。这里面设计的原理有“邻道选择”、“抗混叠”和“采样定理”等等一堆,还是依循前例不介绍。这个小小系统的结构如下,FIR滤波器后面接了一个“M选一”的单元。
         
       

       
        加入只看FIR滤波器,那么估计也没什么好优化的。但是,把FIR滤波器和“M选一”放在一起考虑,那花招就有了。观察“M选一”单元的输出,实际上FIR滤波器的输出里面,真正有用的就是M个里面的一个,其他输出会被无情地抛弃掉。那么,我们只计算这一个有用的数据可以不?当然可以了。这样我们又去掉了不少木条。
        y(Mk) = a0 × ( x(Mk) + x(Mk -N) )+ a1× ( x(Mk -1) + x(Mk -N-1) ) + ……
         
       

       
        这里用多个“M选一”单元换一组低速运算器单元,值了。后面“系统篇”里面,可以看到我们还要时分复用上面的结构。那就是“锦上添花”,优化无极限的代表了。(这里可以老王卖卖瓜。)
       
        现在是打油诗时间:“信号处理渊源久,F滤波器把水流。对称折叠面积优,引入选择智商秀。”
       
        下一次,老朽和大伙儿唠扯唠扯时钟调整的事情,周三不见不散啊。
        ---------
        《玩转IP core》之一:我们的目标是ASIC
        摘要:具体到一个产品里面,到底是采用FPGA还是ASIC,这个问题是多方面确定的。简单说,如果产品出货量小、时间紧、生命周期短,那么FPGA比较适合;反之就建议ASIC。但是,也不是完全绝对的,就像很难说少林和武当那个更牛一样。
         
        《玩转IP core》之二:所见非所得
        摘要:Verilog语言是由Gateway设计自动化公司的工程师于1983年末创立的;VHDL语言诞生于1983年,1987年被美国国防部和IEEE确定为标准的硬件描述语言。这个古人也“古”不到哪里去。上板砖!
         
        《玩转IP core》之三::统一行动听指挥
        摘 要:现在我们正沿着PCB数据大道,走向芯片大厦----就是大家眼前的巨大的、银色的大厦。我是本次旅行的导游,敝姓十,大叫可以叫我十导。路途之中, 为了大家不感到无聊,本人先给大家略略介绍一下,什么是数字电路的时钟。数字电路中,时钟是整个电路最重要、最特殊的信号。
         
        《玩转IP core》之四:踏雪寻熊---面积与速度的协调
        摘 要:具体到我们的FPGA/ASIC设计,这个“鱼”就是面积,而“熊掌”时钟频率(速度)。能不能很好的协调面积与速度的关系,是衡量一个数字逻辑设计 工程师能力的一个重要标准。在本讲座的第二篇里面,会说明各种单元模块的不同面积和速度的基本解构;在第三篇中,则会通过例子,介绍如何在系统中很好综合 考虑两者的关系,选择比较合适的实现解构。
         
        《玩转IP core》之五:测试向量生成
        摘要:在不考虑电源输入的前提下,在我们系统/板子上,能够不依靠其他外界输入而产生输出信号的器件有木有呢?当然有,而且必须有,那就是大名鼎鼎的晶振了,用来产生我们说过的、对以系统极端重要的系统时钟信号。
         
        《玩转IP core》之六:程咬金的三板斧--系统基本结构
       
        摘要:今天我们开始进入本讲座的第二部分:单元篇。大家将会发现,我们在基本单元设计里面,也就是三板斧:查找表、时分复用和流水线。但是,我们比程大将军稍稍高一点,我们会把这三招糅合,能产生变招。
         
        《玩转IP core》之七:一个计数器引起的思考
        摘 要:设问句:在进行一个计数器单元设计之前,我们需要什么前提条件呢?首先,需要功能描述(一个计数器嘛,不就是在不是复位“RST”的状态,每来一个时 钟内部/输出加一吗?还描述什么啊?磨洋工吧?----“非也,非也”,这个还是要描述一下。至少我们需要知道一下计数器的内部位数吧?也就是,计数器加 到多大回到0。)另外,就象我们在前面“菜谱”那一讲里面说过的,需要了解系统需要的时钟频率。
         
        《玩转IP core》之八:小学一年级水平,加法器的结构
        摘要:工程设计里面有一个原则:从简单做起。这里面还有一个小故事,今天就不讲了。现在,我们先瞧瞧最简单的一个比特位宽的加法器:半/全加器。全加器的输入为三个一比特的信号a0、a1,还有低位的进位c0;输出也是两个一比特的信号:结果s和进位位c1。
         
        《玩转IP core》之九:小学二年级水平,乘法器的结构
        摘要:大伙儿已经通过两次讲座,了解了计数器和加法器大体结构。大家不难发 现,同样的一种功能,可能由于需要、工作频率和代价的不同要求,存在若干种不同的结 构。这些结构如何选择,实际上是一个艰难的选择。这些选择,很多时候都是靠一个工程师的经验(我们老年人也就靠这个混口饭吃了。要不就被“长江后浪推前 浪,前浪死在沙滩上”了)。
         
        《玩转IP core》之十:除法器的结构
        摘要:如果各位在加法器和乘法器里面可以欣赏到了变化多端的话,那么在下不得不很遗憾的通知诸位:除法器里面大家只能看到“自古华山一条路”。不是 我保守,是除法这个东西的本性。用《数学分析》里的说法,加法和乘法都是线性运算满足交换律的,除法是非线性运算不满足交换律的。这是数学上的根子,可以 用来唬人。
         
        《玩转IP core》之十一:非线性求值的孤独九剑,CORDIC方法
       
        摘要:现在来个“师夷长技以制夷”,给大家画画CORDIC的流水线(因为是小数运算,假设实数“1”为十六进制的全1,实数值就可以折算了。这是普遍的技巧,不详述。)。还有一个小技巧就是由于每步的放大作用,公式里预先收缩了一把。
         
        《玩转IP core》之十二:电路串串香,D触发器链  
        摘要:今个儿寡人给大家讲点有“理论”的:CRC校验(循环冗余校验 码,Cyclic Redundancy Check)和编码器。CRC校验的目的就是看接收的一串比特和原来发射的是不是一致,有没有接收误码。CRC在编码界的春典,就是“gCRC16(D) = [D16 + D12 + D5 + 1]”和“1 0001 0000 0001 0001”。给大家一个口诀:“延时触发串一串,遇到一字砍一段。输入牵来异或算,输出导出入口看。”
         
        《玩转IP core》之十三:简直的层层叠,FIR滤波器的串联实现
       
        摘要:今天我们继续信号处理的行程,给大家介绍FIR滤波的串行实现。却说“请介绍FIR滤波器和IIR滤波器的差别”,这可是一道非常典型的面试题。这道题目类似于《哈利波特》里面那个“分院帽”的作用,当然这个题目里面没有宝剑。
         
        《玩转IP core》之十四:我的地盘我做主,锁相与分频
        摘要:在做设计的时候,谁都希望片子的输入时钟是稳定的、可靠 的,并且和我们系统的采样频率是一致的。这是最理想状态。可惜啊,希望是丰满的,现实是骨感的。很 多时候,情况并没有这么理想。这种时候,就需要我们自己调节系统时钟,达到系统工作的目的了。不是大伙儿“无知者无畏”,是不得不为啊。实际上,在很多通 讯系统中,对于系统时钟的调节都是不可避免的。
         
        《玩转IP core》之十五:国球与其它,输入输出介绍
        摘要:我们现在正式为《第三篇:系统篇》剪彩(哗哗哗,掌声响起来,我心更明白…)。在这一部分里面,会在更高的层次上,分析设计问题。大伙儿不仅 仅能看到《单元篇》里面的各个部件的应用,而且会发现系统绝对不是单元的简单的搭积木。在整个讲座里面,“变化”是永远的主题。
         
        《玩转IP core》之十六:来个批发价,多路数字中频系统设计
        摘要:数字中频主要分两种类型:数字上变频(DUC)和数字下变频(DDC),它们的主要功能是相反,但原理和实现的方法是十分相似。由于FIR滤波器里面讲的是下采样的例子,这里也就以数字下变频作为例子,这样匹配。
         
        《玩转IP core》之十七:看客做饭,CDMA接收机的同步
        摘要:这一讲里面会介绍CDMA系统的同步部分,这不是重点。关键是,大伙儿会看到同样的算法,在终端和基站侧由于系统用户数目不同,会有不同实现。这是给大家的一个启示:不能因循守旧,要与时俱进。
         
        《玩转IP core》之十八:磨刀不误砍柴工,程序的风格
        摘要:“代码风格和规则”这个问题,很多人看来不是十分重要。但是,我问问大伙儿几个现象,看看是否遇到过?过了三个 月,读不懂自己的程序的,有木有?看别人代 码,赶脚不如自己重写的,有木有?做C代码的,竟然能看懂你的程序的,有木有?调试的时候,感觉是老虎吃天----无从下口,有木有?如果有,以老衲的经 验,多多少少和“代码风格和规则”有些瓜葛。
        ------------------=--------
        如果你从事FPGA研发,或者你对IP core设计感兴趣,欢迎关注《玩转IP core》系列技术讲座,每周三加菲博士与你不见不散,如果针对本讲座有任何技术问题欢迎与加菲进行技术互动可以加入QQ群(FPGA交流圈:23294742),或者去交流区提问:《玩转IP core》交流区
       
        关注与非网官方微博:http://e.weibo.com/eefocus 我们的讲座内容将在微博同步更新。
       
        加菲独家供稿与非网,谢绝任何形式的转载,与非网做你技术生涯中最有价值的电子网站。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-8-2 23:01 , 耗时 0.096645 秒, 22 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表