使用matlab仿真fir,电路设计漫谈: 使用matlab,simulink,FPGA实现FIR的设计与仿真

现在的EDA工具发展神速,好多过去写若干code才能实现的功能,EDA中有大量的library已经实现了.加上目前智 能仪器比如数字示波器的网络及数字存储功能,对信号的性能分析,数字处理,及电路设计等提供了极大的方便. 本文试图从最近遇到的一个信号噪声处理的工作,梳理一遍从测量到分析到电路设计到最后性能比较等整个流 程的EDA做法.所需要的EDA工具设计包括simulink,matlab,Xilinx ISE simulator等等.

问题的提出是电路放大器对一个微弱信号放大后,得到的A/D转换后的信号有叠加噪声.试图用FPGA/Verilog设计一个DSP数字滤 波器把这个噪声消除.

1) xls做信号抓取:

首先是用示波器获取信号波形,存储成xls表格方式signal_waveform.xls.博主是用的另外一 种方式,用xilinx的chipscope从FPGA中抓取A/D转换后的波形存储为xls格式.在xls上可用拟合功能观察数据的 波形

2) matlab做信号频谱分析:

简单的频谱分析可以在xls里做FFT运算.需要先安装data analysis toolpak.安装 方法:    excel-options-addins-manage-excel addins-analysis toolpak.  分析时选取要做FFT的列,点击 data analysis-Fourier Analysis即可. 但还是建议用simulink或者matlab做FFT,好处是自己可以写更灵活更 强的script.

用matlab的话,把xls数据文件用xlsread指令import到一个array变量,然后做FFT. 比如signal=xlsread ('signal_waveform.xls',1,'A1:A512'). 用simulink的话需要先把xls import到workspace赋予一个变量.然 后在simulink中调入From Workspace模块,把workspace的变量赋给它.如果要做分析或测量,插入scope或者 spectrum scope模块就可看到波形或者频谱. 从频谱分析的结果就可得知噪声与信号频谱的分布.从而决定DSP滤波器的特性.

3) simulink设计所需的滤波器.

使用simulink的FDATool模块,可以直接填入FIR的参数,立即得到滤波器的相应曲线.调试这些参数满意后,用 export功能提取出滤波器的coefficient得到一个数据文件.这时可以把From Workspace的信号连接到FDATool 模块,用spectrum scope观察示FIR滤波后的频谱和信号波形,从而通过模拟的结果评判滤波后的效果.不满意的 话就再调整FDATool中的参数.

当然设计什么样的滤波器,要优化和tradeoff滤波器的那些性能,不是一两篇能说明白的.幸运的是博主在这工 程中与一专门研究数字信号处理的同学不停的通email求教.其实在读研究所时学过DSP这门课,考试成绩也不错.但 除了会计算设计各种参数的滤波器外,滤波器和DSP的一些基本概念还是一脑浆糊,导致现在需要使用它时,竟搞不清楚取样周期计算点数相位特性等参数的选取,跟所要得到性能的关系等基本问题.本人带着问题从头复习了一遍,又加上同学指引,只花时间在概念和物理意义有关的东西上,略去现在EDA工具能取代的大量数学分析与计算, 最后终于理解了DSP的一些本质的意义与实际的需求对上了号.悲哀啊, 当年费劲学的东西其实是没起到什么作用, 除了自己本事不济外,那些自己可能也没弄明白的老师们也要负责:-)

4) FPGA工具设计实际的数字滤波器.

好了,coe文件是matlab与实际DSP硬件设计工具间的唯一桥梁.一旦得到这个参数文件,目前的EDA硬件设计工具可以不用你写 任何code就能生成滤波器的设计.调用xilinx ISE的coregen程序,灌入从matlab提取的coe文件.这时可以从 coregen实时计算出的频谱与Simulink仿真的结果做比较,他们的频率响应应该是相似的. 最后生成的FIR IP  库应该包含用作仿真的.v文件. 为了方便滤波后的数据处理,采用DC分量单位增益的设计, 即把coe数据做归一化处理, 使得DC相应是绝对0db:  h(0)+h(1)+......+h(N-1) = 1

5) 滤波器的仿真.

好的设计流程应该是在计算机上调试分析设计结果,而不是马上灌到硬件上做调试.接下来写个verilog仿真测 试程序,看看实际的输出是否是所期望的.

编写一个仿真程序,把1)中抓取的信号文件做激励信号源.需要把xls存成txt格式,然后用$reammemh命令导入:  initial $readmemh("signal_waveform.txt", data_mem). data_mem是仿真软件中定义的存储器数组.运行仿 真程序就可看到经过FIR后的数据.博主对输出数据做了简单的数据处理,即去掉设计FIR时规定的小数点后的数 字. 可惜ISE还没有xls的导出功能.要看输出结果的波形,可以用$monitor命令把关心的变量在仿真器的 console中打印出来,然后copy到一个xls文件.在xls文件中做波形拟合就显示出了真正DPGA滤波后的波形.这时 与1)中拟合的原始测量信号波形做比较,即看到数字滤波后的效果.

为了验证数据的绝对值是正确的,专门抓了一个只有噪声的直流信号,这样直接比较滤波前后的仿真结果,验证 DC的平均值在前后是一样的.

博主在这里介绍的是一个DSP处理的外行,为了使用这个工具解决现实的问题,临时现学现卖用的一个流程.那些 专门的图像处理RF信号处理的做法肯定比笔者讲的更准确和专业.但在使用这些工具中,感觉数据的导入导出没 有一个集中的介绍,需要一一去看manual或去网上搜索,这里把它们列出来也许有点帮助.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值