基于VHDL的FIR低通数字滤波器设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

合肥师范学院《EDA技术与VHDL》课程设计
系别:电子信息工程学院班级:电子信息工程1班
姓名:靳振龙
学号:0908421001
基于VHDL的FIR低通数字滤波器设计
摘要:主要利用硬件描述语言实现FIR数字滤波器的设计。

根据FIR低通数字滤波器原理与滤波特性,通过MATLAB/Simulink软件模拟一定性能的FIR
滤波器频率响应与抽头系数,用VHDL语言设计和仿真压电直线微电机控制系
统中的FIR低通数字滤波器,实现用软件描述硬件的动作及其功能。

关键词: VHDL; MATLAB; FIR数字滤波器; 仿真
Designing FIR low-pass digital filter based on VHDL
Abstract: The main advantage of the hardware description language FIR digital filter design. According to the principle and characteristic of FIR low-pass digital filter, through using MATLAB/Simulink software to simulate frequency response of some performance index and tap coefficients about FIR filter, design and simulate FIR low-pass digital filter in the control system of piezoelectric linear micro motor in VHDL language, It can be realized the filter’s action and function with software describing hardware.
Keywords: VHDL; MATLAB; FIR digital filter; simulation
1引言
随着数字信息技术的发展,数字滤波器已在许多领域得到广泛应用。

在数字
滤波器设计中,以往都是通过硬件电路来实现其功能,当今计算机软件技术不断
发展,应用软件能够实现数字滤波器的功能和时序仿真,因而直观再现滤波器性能。

本文通过VHDL和MATLABL软件仿真实现压电直线微电机控制系统中FIR
低通数字滤波器,使设计达到最优化。

2系统设计
2.1设计要求
本设计是基于VHDL语言实现压电直线微电机控制系统FIR低通数字滤波
器的设计,首先将模拟信号转化为数字信号,再将此数字信号通过一定技术指标的FIR低通滤波器滤波。

设计一个满足压电直线微电机控制系统的FIR低通数字滤
波器,其主要技术性能指标如下:(1)对模拟信号的采样频率fs为44.1KHz;(2)
带通0--20kHz;(3)信号的截止频率fc=22kHz;
(4)截止频带衰减约为60dB。

2.2 设计原理
一个FIR滤波器的输出是由其过去和现在输入值权重所决定的,且构成因果
关系的FIR滤波器对所有的离散时间k < 0,以及时间k > N(N是正整数),其
脉冲响应均为零,FIR滤波器的数学表达式可用差分方程来表示:
∑=-=
M
r r n
x r b n y 0
)
()()(
其中: r 是FIR 的滤波器的抽头数;b (r )是第r 级抽头数(单位脉冲响应);x (n-r )是延时r 个抽头的输入信号。

该方程可由图1给出的硬件电路实现,其中,D-IN 为数字信号输入;CLOCK 为时钟信号;C1—Cn 是由MATLAB 处理得到的系数;D 触发器实现数据延时与触发功能。

结构中延时支路相互串联, 延时线上有N 个抽头,分别连接乘法器, 乘法器相乘的系数就是单位脉冲响应,乘法器的输出连接到加法器上。

为使输出波形稳定,采用同步输出方式。

n
n C D C D C D OUT *+*+*= (2211)

1 n 阶FIR 滤波器硬件电路
3 数据处理与软件设计
3.1 MATLAB/Simulink 参数设置与处理
根据设计要求,通过MATLAB/Simulink 参数设置与处理,得到FIR 低通数字滤波器57个系数:
-0.000497 0.000590 -0.000921
0.001356 -0.001912 0.002603 -0.003442 0.004440
-------------------------------------------------------------------------------------------------------------------- 0.004440 -0.003442 0.002603 -0.001912 0.001356 -0.000921 0.000590 -0.000497
3.2 VHDL 系数处理
程序相关参数定义:d_in: 输入数据信号; d_out: 输出数据信号; rst: 复位信号; fsclk: 采样时钟信号。

在VHDL 代码中,滤波器的系数被设置,类似存储于程序存储器中执行。

subtype ROMbyte is signed (20 downto 0);
type ROMARRAY is array (1 to 57) of ROMbyte;
signal ROMDATA: ROMARRAY; ……………
coefficient: process(rst) begin -- process coefficient if(rst = '1') then for i in 1 to 57 loop
ROMDATA(i) <=“000000000000000000000”; end loop; else
ROMDATA(1) <=“111111111111000001111”; - - - - 0.000497 ROMDATA(2) <=“000000000001001001110”; - - - - 0.000590 ………… end if
end process coefficient;
3.3数据输入和频率控制
根据设计滤波器的参数可知,采样频率要求是44.1 kHz, 所以采样周期为Ts=22us (T=1/f)
(1)时钟频率控制程序
for j in 0 to 49 loop
FSCLK <=…1‟;
d_in <= sin v(j);
wait for 11 us; - - - - Ts=22us, fs=44.1kHz
FSCLK <=…0‟;
wait for 11 us; - - - - Ts=22us, fs=44.1kHz
end loop;
(2)将输入的数据信号写入数据存储器RAM(由D触发器组成)中
wr_data: process(rst,fsclk)
begin
if (rst =…1‟) then
for k in 1 to 57 loop
RAMDATA(k) <="000000000000000000000";
end loop;
elsif fsclk‟event and fsclk = …1‟then
for k in 1 to 56 loop
RAMDATA(k+1) <= RAMDA TA(k);
RAMDATA(1) <= D_in;
end loop;
end if;
end process wr_data;
(3)对正弦信号采样程序
正弦信号T=2*pi=360°,在整个周期上采样100次,故每3.6°采样一次。

type table is array (0 to 49) of signed(20 downto 0)
signal sinv:table:=
(“000000000000000000000”, -- sin 0; line No.1
“000000000010000000100”,-- sin(3.6︒);line No.2
… … …
“000000011111111111111”, -- sin(90︒);line No. 26
… … …
“000000000100000000101”,-- sin(180︒ - 7.2︒);line No.49
“000000000010000000100”);-- sin(180︒ - 3.6︒); line No. 50)
(4)在整个程序执行过程中,输入正弦波模拟信号分为两个过程进行采样处理,在一个周期上共采样100个点,正半周采样50个点,负半周采样50个点。

采样时间的计算:由fs=44.1Hz,则Ts=1/ fs =22us,所以总时间T=22*100=2200us
采样子程序:
for k in 0 to 99 loop
for j in 0 to 49 loop
FSCLK <=…1‟;
d_in <= sinv(j);
wait for 11 us;
FSCLK <=…0‟
wait for 11 us;
end loop ; --------正半周采样
for j in 0 to 49 loop
FSCLK <=…1‟;
d_in <= -sinv(j);
wait for 11 us;
FSCLK <= …0‟;
wait for 11 us;
end loop; --------负半周采样
(5)滤波器的功能
设计的滤波器具有以下两项功能: 一是通过低频信号; 二是衰减截止高频信号达60dB,实现数据滤波和综合,下面是实现其功能代码:
A: filtering_data: process(fsclk)
begin -- process rd_data
if (rst = …1‟) then
for k in 1 to 57 loop
mulDATA(k) <= “000000000000000000000000000000000000000000”;
end loop;
elsif fsclk event and fsclk =…1‟ then
for k in 1 to 57 loop
mulDATA(k) <= RAMDA TA(k)*ROMDA TA(k);
end loop;
end if;
end process filtering_data;
B: accumulation: process(fsclk)
variable accu:signed(41 downto 0);
begin
if (rst = …1‟) then
D_OUT <=“000000000000000000000”;
accu:= “000000000000000000000000000000000000000000”;
elsif fsclk'event and fsclk = …1‟ then
for k in 1 to 57 loop
accu:= mulDATA(k) + accu;
end loop;
end if;
end process accumulation;
4 软件仿真
4.1低频仿真
1.条件:输入数据频率为455Hz(fs=1/T =1/2200us =455Hz)。

2.结论:低频仿真如图2所示,输入波形振幅A=5062, 输出为A=7813, 衰减20lg(5062/7813)=0,输入波形与输出波形相比,频率几乎无变化,达到低通功能,满足设计要求。

图2 f=455Hz时FIR滤波器输出图3 f=22 kHz时FIR滤波器输出
4.2高频仿真
1.条件:输入数据频率为截止频率22kHz。

2.结论:高频仿真如图3所示,与输入振幅16253相比,输出为18,衰减20lg (16253/18)=59.956 dB,近似60 dB。

实现了低通滤波功能,对于高频率信号则不能通过,满足设计要求。

5 结论
VHDL语言是一种功能强大的硬件描述语言,结合MATLAB软件,在规定的带通频率0--20kHz范围,截止频率fc=22kHz,截止频带衰减约为60dB,对压电直线微电机控制系统中FIR低通数字滤波器行为进行仿真描述是理想的,实现了用软件描述硬件的动作及其功能,满足设计要求,使设计达到最优化。

参考文献
[1] 林怀蔚,费旻,邢玮. 基于VHDL和MATLAB应用结合的FIR数字滤波器设计
[C]. 合肥: 中国科技大学出版社, 2007
[2] 梁二虎,刘文怡. 基于FPGA的IIR数字滤波器硬件模块设计[J]. 微计算机信息,2008,01-2:218-219
[3] Dillinger,T.E. et al. A Logic Synthesis System for VHDL Design Description[J]. IEEE ICCAD-89, Santa clara:Calif, 1989。

相关文档
最新文档