滤波器的设计实现分析Word下载.docx
《滤波器的设计实现分析Word下载.docx》由会员分享,可在线阅读,更多相关《滤波器的设计实现分析Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
方案论证:
阶数高些滤波效果好些。
3.数字滤波器设计
采用FPGA设计采用各种函数来逼近理想滤波器的频率特性。
利用Matlab和QuartusII软件设计电路。
采用单片机设计,采用各种函数来逼近理想滤波器的频率特性。
利用Matlab设计出归一化的抽头系数,利用c语言写出程序,在单片机stc89c52rc完成数字低通滤波器设计。
采用单片机设计的简单,容易实现。
函数逼近值更准确。
二、系统设计
1.1总方案框图
、
1.2子框图的作用
RC网络的作用
在电路中RC网络起着滤波的作用,滤掉不需要的信号,这样在对波形的选取上起着至关重要的作用,通常主要由电阻和电容组成。
放大器的作用
电路中运用了同相输入运放,其闭环增益RVF=1+R4/R3同相放大器具有输入阻抗非常高,输出阻抗很低的特点,广泛用于前置放大级。
反馈网络的作用
将输出信号的一部分或全部通过牧电路印象输入端,称为反馈,其中的电路称为反馈网络,反馈网络分为正、负反馈。
1.3原理图设计
1.4RC调整后的电路图和确定阻值
1.5调整后的幅频特性曲线的数字仿真图
2.1设计框图
2.2原理框图
2.3LC调整后的电路图和值
2.4LC调整后的幅频特性曲线的数字仿真图
3.数字低通滤波器设计
3.1利用Matlab设计的数字滤波器的抽头系数值
FIR的值
-0.04226,-0.03047,0.0,0.0457,0.0986,0.1479,0.1828,0.1954,0.0986,0.0457,0,-0.03047,-0.04226
IIR的值
A:
-0.01096,0.169,-1.196,5.143,-14.93,30.75,-45.93,49.83,-38.57,20.33,-6.589
B:
0.0000004462,0.000004908,0.000002454,0.000007362,0.00001472,0.00002061,0.00001472,0.000007362,0.000002454,0.000004908,0.0000004462
3.2单片机模块
采用STC89C52RC单片机实现控制功能是其关键,采用单片机不但方便监控,并且大大减少硬件设计。
单片机控制部分
三、软件设计
设计思路
四、系统测试
1.测试方法
●电路测试。
用万用表检测整机电路是否存在短路或者断路,经检测后再接上电源,用万用表测量电源部分的各个输出电压值,经调试正常后方接到各部分电路。
●接入RC测试板,数字信号函数发生器,稳压源,示波器,输入不同频率值测试输入电压值和输出电压值。
●接入LC滤波器输入不同频率值测试输出值。
2.测试结果
RC带通滤波器数据
输入频率(Hz)
输入电压峰峰值(mV)
输出频率(Hz)
输出电压峰峰值(mV)
增益
200
268
60
-13.00
250
106
-8.06
280
280.9
144
-5.40
300
176
-3.65
310
308
184
-3.27
330
331
208
-2.20
350
352
228
-1.40
400
394.52
260
-0.26
500
496.62
0.38
550
555.6
284
0.50
580
581
600
594.53
700
694.4
276
0.26
800
793.7
272
0.13
900
892.9
0.00
1000
1100
1111
1200
1190
1300
1316
1400
1397
264
-0.13
1500
1515
256
-0.40
1600
1603
2000
248
-0.67
2200
2193
244
-0.81
2400
2404
232
-1.25
2500
216
-1.87
2700
-2.54
2800
2778
188
-3.08
2900
2907
172
-3.85
3000
3030
148
-5.16
3500
3571
92
-9.29
4000
68
-11.91
RC幅频特性曲线图
数字滤波器数据
利用Matlab设计的数字滤波器的抽头系数值
3.结果分析
虽然在电路的仿真过程中已经达到了设计要求,但是在实际的电路制作过程中会有不可避免的误差。
主要因素有:
(1)电子元件的参数不能完全达到标准,如电路中要求的7.4kΩ、4.95kΩ、2.74kΩ、876Ω电阻分别要用6.8kΩ、5.1kΩ、2.7kΩ、680Ω电阻代替,电路中要求的电容值没有,要求几个电容并联代替。
(2)在电路板的制作过程中电路板的焊接部良等。
(3)在实际的测试中仪器会带来不可避免的误差。
五、结论
虽然由集成运放和R、C组成的有源滤波电路,具有不用电感、体积小、重量轻,集成运放的开环电压增益和输入阻抗均很高,输出阻抗又低,构成有源滤波电路后还具有一定的电压放大和缓冲作用等优点。
但是因其品质因素Q值无法做的很大,也就导致其通频带宽度无法做的很窄,造成了该滤波器对频率的选择性不是很好,对干扰信号的抑制能力也不是很强,所以在设计滤波器方案的同时,要注意结合实际情况,根据具体设计要求来选择不同的设计方案。
参考文献
[1]王新贤,通用集成电路速查手册[M].XX科学技术,2004
[2]赖麒文,8051C语言彻底应用,科学,2002
[3]谢自美,电子线路设计.实验.测试第三版,华中科技大学,2010
[4]程昱X建伟,ProtelDXP电路设计白金教学,科学,2004
[5]李华军,杨将新,X东俊.单片机程序设计及应用[M].电子工业,2006
[6]X毅坤,陈善久,裘雪红.单片微型计算机及其应用[M].XX电子科技大学,2005]
[7]谭浩强,C语言设计第三版,清华大学,2008
[8]康光华,陈大钦,X林,电子技术基础,2005
[9]X金,电子设计与制作100例,电子工业,2009
[10]麦文,蒋涛,梁文海,X莉,数字系统设计实践-MCS51单片机系统
[11]程佩青,数字信号处理教程,清华大学,2010
附录
附1:
元器件明细表
ment
Designator
Quantity
Value
CapPol1
C1,C3
2
10nF
Cap
C2,C4,C5,C7,C8,C9,C10,C11,C12,C13
10
47nF
C6
1
33nF
Inductor
L1,L2,L3,L4,L5
5
100nH
Header2H
P1,P2,P3,P4,P5,P6
6
Res2
R2,R4,R6,R8,R9,R10,
10k
op07
U1,U2,U3,U4
4
R1
6.8k
R3
5.1k
R5
2.7k
R7
680
R11,R12
附2:
仪器设备清单
1、数字信号发生器
2、数字万用表
3、模拟示波器
4、示波器
5、MCU学习板
附3:
电路图图纸
附4:
实物图
RC
LC
附5:
程序清单
FIR程序:
#include<
reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
/******************/
sbitrd=P3^7;
sbitwr=P3^6;
sbitdula=P2^6;
sbitwela=P2^7;
sbitadcs=P2^4;
sbitcsda=P2^0;
uintadvalue;
floatcodeH[15]={-0.04226,-0.03047,0.0,0.0457,0.0986,0.1479,0.1828,0.1954,0.0986,0.0457,0,-0.03047,-0.04226};
intstates[15];
floatsum;
intout;
voiddelay(uchari)
{ucharj,k;
for(j=i;
j>
0;
j--)
for(k=125;
k>
k--);
}
voidDA()
{
wela=0;
dula=0;
csda=0;
wr=0;
P0=out;
delay
(1);
csda=1;
voidAD()
adcs=0;
//选通AD转换器片选
//AD写入(主要是为了启动AD转换)
wr=1;
delay(10);
P1=0xff;
//读取P1口之前先给其写全1
rd=0;
//AD读使能
advalue=P1;
rd=1;
adcs=1;
voidFIR()
uchari;
sum=0;
for(i=14;
i>
i--)
{states[i]=states[i-1];
states[0]=advalue;
for(i=0;
i<
15;
i++)
{sum=sum+states[i]*H[14-i];
out=(int)(sum);
voidtimer1()interrupt3
{TH1=0xD8;
//定时器初值,定时10ms,100Hz
TL1=0xF0;
AD();
}
/*******主程序********/
voidmain()
{
ET1=0;
TR1=0;
TMOD=0x10;
TR1=1;
ET1=1;
EA=1;
while
(1)
{
FIR();
DA();
IIR程序:
ucharadvalue;
floatcodeA[11]={-0.01096,0.169,-1.196,5.143,-14.93,30.75,-45.93,49.83,-38.57,20.33,-6.589};
floatcodeB1[11]={0.0000004462,0.000004908,0.000002454,0.000007362,0.00001472,0.00002061,0.00001472,0.000007362,0.000002454,0.000004908,0.0000004462};
intinput[11];
intoutput[11];
for(k=25;
delay(50);
ucharadvalue;
P0=0xff;
rd=0;
voidIIR()
uchari;
11;
{sum=sum+input[i]*B1[10-i]+output[i]*A[10-i];
for(i=10;
{input[i]=input[i-1];
output[i]=output[i-1];
input[0]=advalue;
output[0]=sum;
out=(int)(sum);
TL1=0xF0;
ET1=0;
TR1=0;
TMOD=0x10;
TR1=1;
ET1=1;
while
(1)
{IIR();