原创 基于模型设计的FPGA开发与实现:滤波器设计与实现(一

2011-9-11 08:36 1131 3 4 分类: EDA/ IP/ 设计与制造

MBD-FPGA 开发与实现

http://blog.sina.com.cn/McCrocodile

如何快速高效的设计数字滤波器时本章节的重点。

  

数字滤波器通常用于改变信号的时域或者频域的某个特性。最简单的数字滤波器时LTI先行时间不变滤波器。通常分为有限冲击相应FIR和无限冲击相应IIR。

传统的模拟滤波器是借助RLC和运算放大器实现,随着DSP和FPGA的出现,数字滤波器借助其优势在某些领域正在逐渐取代模拟滤波器。使用拉普拉斯域分析的模拟原型方法只适用于IIR设计,FIR设计需要新的计算算法。此处主要介绍基于Matlab的设计与实现,随后还探讨基于FPGA的实现和改进。

这里首先来回顾下滤波器的理论知识,

  

屏幕剪辑的捕获时间: 2011/8/22 22:09

  

  

  

  

下面主要介绍基于GUI和Fdesign的方式设计滤波器,和基本的定点化功能以及HDL代码生成功能的使用。由于介绍命令行设计滤波器的资料比较多,这里就不错介绍。

  

滤波器设计之GUI

2011年8月22日

21:32

  

使用GUI设计的方式有两种:FDATool 和filterbuilder。

  

FDATool

  

设计实例:

这儿以设计一个低通滤波器分离两个信号为例,介绍使用fdatool设计FIR滤波器。

  

要求:输入信号x1+x2,x1为100Hz正弦信号,x2为300Hz正弦信号,采样率为3KHz

期望输出为x1.

  

  

屏幕剪辑的捕获时间: 2011/8/22 22:38

  

如上图所示为使用Equiripple等纹波法设计一个直接型FIR滤波器,Fs为采样率为3KHz,Fpass通带最大频率110Hz,Fstop阻带最小频率为230Hz,Apass通带纹波0.1dB,Astop阻带衰减60dB。[通俗来讲可以认为是在0~230Hz,通带的纹波不会超过0.1dB,阻带从230Hz起最小衰减不小于60dB].下面是帮助文档中的描述,详细查阅帮助和其他参考资料了。

  

屏幕剪辑的捕获时间: 2011/8/22 22:52

  

  

观察设计的滤波器的性能:

这儿采用两种方法来测试,首先使用Matlab的脚本测试。

1)导出滤波器系数到Matlab Worksapce中,File-->Export….可以选择导出系数或者对象,此处我选择导出为对象,

fs=3e3;

t=0:1/fs:0.1;

x1=sin(100*2*pi.*t);

x2=sin(300*2*pi.*t);

x=x1+x2;%input Signal

y=filter(Hd_firlp,x);%滤波

%观察结构

figure;subplot(4,1,1);plot(t,x1);title('100 Hz')

subplot(4,1,2);plot(t,x2);title('300 Hz')

subplot(4,1,3);plot(t,x);title('Input signal')

subplot(4,1,4);plot(t,y);title('Filter output')

  

屏幕剪辑的捕获时间: 2011/8/22 23:15

  

有图可以分析FIR滤波器的性质,可以调整滤波器设计的参数观察结构的差异。

2)使用Simulink模型测试结构,有时候是非常必要的,也是MBD-FPGA数字信号处理中我所建议的。

在File-->Export to Simulink对话框中选择导出模块类型。

  

  

屏幕剪辑的捕获时间: 2011/8/22 23:25

  

  

  

屏幕剪辑的捕获时间: 2011/8/22 23:25

  

  

等纹波法经常用于设计FIR,甚至可以用来设计希尔伯特滤波器和积分器。选择窗口中左侧和上边的不同菜单,熟悉其功能,尝试修改参数,观察对滤波的影响,更多地东西你可以查阅帮助文档。

  

FilterBuilder

  

使用命令行:filterbuilder 启动GUI,如下图,之后选择需要设计的滤波器类型。

  

  

  

屏幕剪辑的捕获时间: 2011/8/28 20:45

  

  

同样以上面的例子为例,设计一个滤波器,下面的图可以看出来,里面的选项大同小异,所以使用也是大致差不多,喜欢用哪个就用哪个就用那个了。

  

屏幕剪辑的捕获时间: 2011/8/28 20:47

  

 

同样的方式也可以用于设计IIR滤波器,总结下这种滤波器的设计方法基本步骤为:

A、选择一个设计方法

B、尝试(猜测)参数,然后设计滤波器

C、观察滤波器的响应是否符合要求

D、测试知道满足要求

  

你尝试过上面所有的方法的吗?如果还没有抓紧,只有尝试你才会真正的明白。

  

滤波器设计之Fdesign

2011年8月22日

21:33

  

首先说说Matlab字r2008a之后面向对象的功能变得越来越强大,尤其是在R2011a中的DSP System ToolBox ,Communication system Toolbox等系统级的工具箱的整合和出现,面向对象编程方式变得更重要了。如设计DUC和DDC等都可以使用,也是MBD相System Design发展的一个重要体现吧。

fdesign是一个filter design object 滤波器设计对象,使用fdesign作为一种比较新的设计滤波方法。滤波器实现的对象主要有三种:

dfilt:单速滤波器(本小节主要涉及到的)

mfilt:多速率滤波器(后面会介绍到)

adaptfilt:自适应滤波器(后面会介绍到)

  

上一小节最后部分总结了基于GUI的设计方法的基本步骤,这些步骤对于基于传统的命令行方式设计的同样也使用。那么问题就出来了:对设计的权衡是低效的。Not efficient for assessing design trade-offs效率就是基于fdesign设计方法的优势。

 

面向对象的滤波器设计方法的基本步骤:

1、创建fdesign对象,设置设计的需求

2、找出满足需求的设计方法

3、使用各种可能的方法设计滤波器,并比较选择。

4、分析权衡各设计之间的性能资源:滤波器阶数与阻带衰减和通带波纹,滤波器阶数与过渡带宽度,算法延时和计算复杂度。

  

下面还是以一个例子简要说明基于fdesign的单速滤波器设计,完成目标还是分离上一节中的两个信号:

%使用fdesign方式设计简单单速滤波器

d = fdesign.lowpass %创建一个低通滤波器对象

%% 设置设计要求

d.Fpass=100/3e3;

d.Fstop=250/3e3;

d.Apass=1;

d.Astop=60

% d= fdesign.lowpass('Fp,Fst,Ap,Ast',100,250,1,60,3e3);%另外的方式1

% d = fdesign.lowpass(0.0333,0.0833,1,60);%另外的方式2

%% 查找满足要求的方法

designmethods(d)

% designmethods(d,'fir')

%% 设计滤波器

hd = design(d,'equiripple');

  

%% 分析滤波器

fvtool(hd);

cost(hd)% 计算开销

info(hd)

cost(hd)

 

ans =

 

Number of Multipliers : 86

Number of Adders : 85

Number of States : 85

Multiplications per Input Sample : 86

Additions per Input Sample : 85

上面采用了等纹波法设计了滤波器,还以采用其他的方式设计并比较观察。

  

%% 仿真测试

fs=3e3;

t=0:1/fs:0.1;

x1=sin(100*2*pi.*t);

x2=sin(300*2*pi.*t);

x=x1+x2;%input Signal

y=filter(hd,x);%滤波

plot(t,y);title('Filter output')

  

%% 生成Simulink 模块

realizemdl(hd)

同样生成Simulik模块可以加入Simulink模型中仿真测试。具体的用法请查阅帮助文档。

  

  

  

屏幕剪辑的捕获时间: 2011/8/25 23:48

  

  

这儿由于还没有定点化,所以给HDL代码生成的部分放到后面一小节介绍。下面是Mathworks给出的资料图。

  

  

屏幕剪辑的捕获时间: 2011/8/30 21:08

  

  

  

如果你想深入了解基于fdesign的滤波器设计,建议你深入阅读帮助文档,并尝试里面提供的Demo,这儿仅仅作为简单的入门介绍。尝试之后你才会理解到功能的强大和高效省事。

  

 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户225005 2011-9-22 23:09

去这儿看看http://blog.sina.com.cn/McCrocodile~~~~

用户206587 2009-12-15 16:27

稳压器 不错的

dongbei06_409353400 2009-12-14 22:09

而且平均值很害人,什么人均存款,人均GDP,看似人人都有存款,人人都有钱,于是粉饰太平,说我们过上了小康生活。背后却是大大掩盖了两级分化,富人和穷人都太多太多

dongbei06_409353400 2009-12-14 22:07

我觉得什么时候,中国经济有创新,有自己的核心技术才能真正说我们富强了。现在房地产、股市等投资热,没人踏踏实实练内功。

朱玉龙 2009-12-14 21:20

其实啊,面对目前这种以房产和财富转移的发展方式,我觉得工程师就是被遗忘和牺牲的人啊

用户1275742 2009-12-14 17:36

呵呵,就像一滴墨水滴到了一缸水里,有稀释扩散作用的。同一个产品在不同地域报价也类似这样,很多厂家和经销商做窜货。

tengjingshu_112148725 2009-12-14 09:19

国内氛围不好,这个不是谁能改变的.

tengjingshu_112148725 2009-12-14 09:05

国内氛围不好,这个不是谁能改变的

用户235812 2009-12-14 08:05

本土元器件厂商本身的问题,第二呢?

dongbei06_409353400 2009-12-13 22:56

我觉得也是,虽然汽车电子在国内如火如荼,很多企业都热衷于技术研发,但是终究除了PCB可以国产,其余大量的元器件还都是国外的
相关推荐阅读
用户225005 2011-10-12 06:27
写在前面的话~~~~~MBD-FPGA开发与实现
本博客作为我学习和使用MBD-FPGA的记录和总结,最重要的是和网友交流分享,并给MBD入门者,提供一点中文资料参考。由于个人阅历以及对MBD理解有限,如有问题还请指正。每篇博客的源程序和PDF文档,...
用户225005 2011-10-12 06:23
基于模型设计的FPGA开发与实现:基本流程(一)之入门小例子(二):秒表
这个例子是演示在Simulink环境下借助Stateflow设计一个FSM是多简单的事情,即使生成HDL代码也轻而易举。同事还将Matlab Function如何用在Simulink中生成HDL代码做...
用户225005 2011-10-08 06:44
基于模型设计的FPGA开发与实现:基本流程(一)之入门小例子(一):跑马灯
MBD-FPGA 开发与实现 http://blog.sina.com.cn/McCrocodile 这个简单的例子主要说明使用Simulink的MBD-FPGA基本开发流程。你将体会到这种开发解决方...
用户225005 2011-09-23 07:30
基于模型设计的FPGA开发与实现:基本流程(一)概述
MBD-FPGA 开发与实现   http://blog.sina.com.cn/McCrocodile 很多人怀疑或者直接自动代码生成的效率问题,我要说的是MBD也只是一种解决问题方案和一序列的工具...
用户225005 2011-09-15 11:29
如何在Windows Xp或 Windosw 7下硬盘安装Windows 8
昨天下了个Windows 8预览版下来,今天安装试了试,想了半天,后来觉得Windows8和Windows7应该很类似。所以就想使用试试。我的Windows7是32bit安装的是64bit windo...
用户225005 2011-09-13 22:45
基于模型设计的FPGA开发与实现:滤波器设计与实现(四
MBD-FPGA 开发与实现 http://blog.sina.com.cn/McCrocodile   先来看看前面章节设计的滤波器对于实际应用是个多糟糕的设计!!! 上面一节中我们使用分离两个信...
EE直播间
更多
我要评论
1
3
关闭 站长推荐上一条 /3 下一条