数字滤波器及试验台实验.docx
- 文档编号:18409573
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:21
- 大小:622.35KB
数字滤波器及试验台实验.docx
《数字滤波器及试验台实验.docx》由会员分享,可在线阅读,更多相关《数字滤波器及试验台实验.docx(21页珍藏版)》请在冰点文库上搜索。
数字滤波器及试验台实验
简单IIR高低通数字滤波器
班级:
组员:
目录
一、简介…………………………………………………………
(2)
二、实验原理和目的……………………………………………
(2)
三、实验进程……………………………………………………(3)
(I)分组分工……………………………………………………(3)
(II)设计思路…………………………………………………(3)
四、程序…………………………………………………………(4)
(I)界面M代码…………………………………………………(4)
(II)滤波M代码…………………………………………………(6)
五、实验现象与分析……………………………………………(8)
六、实验总结与感想……………………………………………(15)
一、简介
利用matalb进行gui(GraphicalUserinterface)设计实验,编写iir高低通数字滤波器图形界面,编写滤波程序。
二、实验目的和原理
实验目的:
功能上,我们需要该数值滤波器实现:
1、显示采集信号波形和频谱,对原始信号进行滤波后显示其波形和频谱;
2、用户可对高低通滤波类型进行选择,可以对采样滤波参数(边界频率fc,fb,通带以及阻带衰减rp,rs,采样频率fs)进行设置;
3、用户如果需要可以查看到滤波器的幅频特性、相频特性。
步骤上,我们需要做:
1、编写一个能够表现以上功能并便于用户操作的界面;
2、编写能实现频谱分析,高低通滤波的、滤波器频域特性分析的处理程序;
3、界面程序和处理程序选用最优的方式搭配起来。
实验原理:
1、利用buttord函数进行滤波处理
2、利用freqz函数进行滤波器幅相频分析
3、利用讲义上的频谱分析程序画出信号频谱
2、实验进程
(I)分组分工:
xx负责编写界面程序(mytest.m)部分以及滤波器的测试实验;
xx负责编写处理程序(getdata.m)部分以及实验报告编写。
(II)设计思路:
界面部分:
界面上需要四个图形框,分别显示原始信号波形和频谱,滤波信号和频谱;需要有5个可编辑输入框,让用户设定参数,fb、fc、rs、rp、fs;利用互斥的无线电按钮可让用户选择高低通滤波类型;设置“采集”、“滤波”按钮可以对原始信号进行采集和滤波;对有需要的用户,另设置一个按钮可以调出滤波器频域性分析。
处理程序:
利用buttord函数进行滤波处理,利用freqz函数进行滤波器幅相频分析
界面程序与处理程序连接:
用global定义对象高通按钮(hr1),当处理程序判断hr1的value属性为1时,进行高通滤波;否则,进行低通滤波
用global定义对象可编辑文本框hedit1、hedit2、hedit3、hedit4、hedit5,在处理程序中取出字符窜常量,用str2num转化为变量,实现了参数的设置
用global定义对象调用按钮(hpush3),在界面程序中定义,在处理程序中实现回调功能。
三、程序(界面M代码、滤波M代码)
(I)界面M代码(mytest.m)以及注释:
clfreset;
set(gcf,'menubar','none');.%删除图形窗工具条
set(gcf,'defaultuicontrolunits','normalized');
h_axes1=axes('position',[0.050.540.270.4]);
title('原始信号');
xlabel('时间(S)');
ylabel('幅值');%定义原始信号图形框对象,设置属性
h_axes2=axes('position',[0.370.540.270.4]);
title('原始信号频谱');
xlabel('频率(HZ)');
ylabel('幅值');%定义滤波信号图形框对象,设置属性
h_axes3=axes('position',[0.050.050.270.4]);
title('滤波后信号');
xlabel('时间(S)');
ylabel('幅值');%定义原始频谱图形框对象,设置属性
h_axes4=axes('position',[0.370.050.270.4]);
title('滤波后信号频谱');
xlabel('频率(HZ)');
ylabel('幅值');%定义滤波频谱图形框对象,设置属性
globalhedit1hedit2hedit3hedit4hedit5hr1hush3%定义全局变量
uicontrol(gcf,'style','text','position',...%静态文本框”参数设置”
[0.670.850.150.1],'string','参数设置(HZ)',...
'fontname','楷体','fontsize',15);
hedit1=uicontrol(gcf,'style',...%定义五个参数可编辑文本框属性
'edit','position',[0.720.750.070.07]);
hedit2=uicontrol(gcf,'style',...
'edit','position',[0.720.60.070.07]);
hedit3=uicontrol(gcf,'style',...
'edit','position',[0.720.450.070.07]);
hedit4=uicontrol(gcf,'style',...
'edit','position',[0.720.30.070.07]);
hedit5=uicontrol(gcf,'style',...
'edit','position',[0.720.150.070.07]);
uicontrol(gcf,'style',....%定义五个参数对应静态文本框属性
'text','position',[0.660.760.060.05],'string','Fb','fontsize',15);
uicontrol(gcf,'style',...
'text','position',[0.660.610.060.05],'string','fc','fontsize',15);
uicontrol(gcf,'style',...
'text','position',[0.660.460.060.05],'string','Rp','fontsize',15);
uicontrol(gcf,'style',...
'text','position',[0.660.310.060.05],'string','Rs','fontsize',15);
uicontrol(gcf,'style',...
'text','position',[0.660.160.060.05],'string','Fs','fontsize',15);
uicontrol(gcf,'style',...%定义静态文本框“滤波选择”
'text','position',[0.850.850.150.1],...
'string','滤波选择','fontname','楷体','fontsize',15);
hr1=uicontrol(gcf,'style',...%“高通”无线电按钮属性设置
'radio','string','高通','fontsize',10,'position',[0.850.750.10.07]);
set(hr1,'value',get(hr1,'min'));%缺省为点白
set(hr1,'callback',['set(hr2,...
''value'',get(hr2,''min''))']);%将互斥项点白
hr2=uicontrol(gcf,'style','radio','string','低通','fontsize',10,'position',[0.850.60.10.07]);%“低通”无线电按钮属性设置
set(hr1,'value',get(hr1,'min'));%缺省为点白
set(hr2,'callback',['set(hr1,...
''value'',get(hr1,''min''))']);%将互斥项点白
hpush1=uicontrol(gcf,'Style','pushbutton',...%定义采集按钮
'position',[0.820.400.150.1],'string','采集','fontsize',15);
hpush2=uicontrol(gcf,'Style','pushbutton',...%定义滤波按钮
'position',[0.820.250.150.1],'string','滤波','fontsize',15);
set(hpush1,'callback',[...%运行mytemp1中start
'set_param(''mytemp1'',''SimulationCommand'',''start''),',...'t=timer(''TimerFcn'',''getdata'',...
''Period'',1,''ExecutionMode'',''fixedSpacing'',''TasksToExecute'',inf),',...
'pause
(2);start(t);',...%暂停2s并启动计时器
]);%按键引起回调
set(hpush2,'callback',...%运行mytemp1中stop
'stop(t);set_param(''mytemp1'',''SimulationCommand'',''stop'');');
hpush3=uicontrol(gcf,'style',...%定义频域分析按钮
'pushbutton','position',[0.80.050.20.1],
'string','调取频域特性','fontname','楷体','fontsize',15);
(II)处理程序(getdata.m)M代码以及注释
set_param('mytemp1','SimulationCommand','stop');%运行mytemp1中stop
y1=evalin('base','simout.signals.values');%读取保存到simout中信号
axes(h_axes1);
plot(y1);%在第一个图中画出波形
set_param('mytemp1','SimulationCommand','start');%运行mytemp1中start
globalhedit1hedit2hedit3hedit4hedit5hr1hush3%定义全局变量
%以下是滤波处理
K=get(hr1,'value');%将hr1中value赋给K
fb0=get(hedit1,'string');%取出hedit1字符窜常量
fb=str2num(fb0);%转化为变量后赋给fb
fc0=get(hedit2,'string');%取出hedit2字符窜常量
fc=str2num(fc0);%转化为变量后赋给fc
As0=get(hedit3,'string');%取出hedit3字符窜常量
As=str2num(As0);%转化为变量后赋给rs
Ap0=get(hedit4,'string');%取出hedit4字符窜常量
Ap=str2num(Ap0);%转化为变量后赋给rp
Fs0=get(hedit5,'string');%取出hedit5字符窜常
量
Fs=str2num(Fs0);%转化为变量后赋给Fs
set(hpush3,'callback',[freqz(b,a,512,Fs)]);%hpush3引起的回调
ifK==1%高通
wc=2*fc/Fs;
wb=2*fb/Fs;
[N,ws]=buttord(wc,wb,Ap,As);%计算阶数N和通带截止频率ws
[b,a]=butter(N,ws,'high');%计算系统函数系数向量B和A
y2=filter(b,a,y1);%滤波
axes(h_axes3);%在第三个图中画出滤波
后信号
plot(y2);
else%低通
wc=2*fc/Fs;
wb=2*fb/Fs;
[N,ws]=buttord(wb,wc,Ap,As);%同上
[b,a]=butter(N,ws);
y2=filter(b,a,y1);
axes(h_axes3);
plot(y2);
%以下是频谱分析
N=1024;
P=fft(y1,N);
Pyy=2*sqrt(P.*conj(P))/N;
axes(h_axes2);%在第二个图中画出原始
信号频谱波形
f=linspace(0,Fs/2,N/2);
plot(f,Pyy(1:
N/2));
N=1024;
P2=fft(y2,N);
Pyy2=2*sqrt(P2.*conj(P2))/N;
axes(h_axes4);
f=linspace(0,Fs/2,N/2);
plot(f,Pyy2(1:
N/2));%在第四个图中画出滤波
后频谱波形
四、实验现象与分析
界面:
1.用自生函数对滤波器测试
在GetData.M中将y1=evalin('base','simout.signals.values')替换为y1=8*cos(2*pi*100*t)+6*cos6(2*pi*1000t)plot(y1)改为plot(t,y1)
采样频率=5000hz
低通滤波(fb=150,fc=200,rp=1,rs=60)
低通时滤波器频域特性:
高通滤波(fb=800,fc=900,rp=1,rs=60)
高通时滤波器频域特性:
从实验中可以见到滤波器在低通取出100HZ成分和高通取出1000HZ成分时能正常工作,从频域特性可以看到,高低通滤波性能良好
2.对噪声信号滤波:
Fs=5000Hz
低通滤波(fb=100,fc=150,rp=1,rs=60)
低通滤波频域特性:
高通滤波(fb=1800,fc=1900,rp=1,rs=60)
高通滤波频域特性:
五、实验总结与感想
工作台模拟实验
班级:
组员:
目录
1、实验目的…………………………………………………
(2)
二、实验进程…………………………………………………
(2)
(I)分组分工…………………………………………………
(2)
(II)设计思路…………………………………………………
(2)
三、实验过程…………………………………………………(3)
四、实验结果…………………………………………………(8)
五、实验总结与感想…………………………………………(9)
一、实验目的
实现工作台的快进,工进,快退和停止。
二、实验进程
(I)分组分工
xx负责小部分构架设计、方案修改及实验报告编写;
xx负责整体构架设计及方案测试。
(II)设计思路
1、以前做的实验,找出实现稳定运动的原型模板;
2、根据此模板进行改写,首先实现工作台快进;
3、利用PID控制位置,在特定位置实现快进转为工进;
4、同样利用PID控制位置,在指定位置实现工进转为快退;
5、利用T的设置,让工作台停回原点。
三、实验过程
我们根据制定的设计思路,首先进入matlab,将路径设为open/实验,在此路径下运行timere,从中找出了RampIn这个原型,来实现匀速运动。
RampIn初始构架如下:
一开始,我们没任何头绪,在那里瞎做,我们最开始想的是用不同的输入信号控制,结果就开始用不同的输入信号,如Step,Ramp,SineWave,通过控制他们输入的时间来实现各个动作执行的时间,最后想了半天也没想出来该把这些信号如何结合起来实现控制,只能放弃了。
然后经黄老师提点,提示我们要用Switch开关,我们就想到了直接在此基础上,将结构进行改进补充。
为了实现行程控制,我们用PID输出控制Switch开关,Switch用法是中间为控制判断条件,如果满足条件,那么就输出上面的信号,不满足就输出下面的信号。
我们第一个想出的方案是用3个Switch开关控制速度,实现3种速度的切换及最后停止,如下页图:
其中,Switch条件为200000,实现快进切换工进动作;Switch2为400000,实现工进切换快退动作;Switch1为800000,实现回原点停止动作。
但是在模拟运行时,我们发现,工作台工进完以后不会快退,直接停在了400000位置上。
于是我们将Switch1这部分删除,相当于将停止动作删去,构架如下所示:
其中,Switch和Switch2设置条件均不变,但是我们同样发现,工作台不会快退,因此我们认为,输入常量可能不能为负数,输入常量值要为非负。
此方案以失败告终。
接着我们重新分析了遍动作要求及运行逻辑:
我们用PID输出作为判断条件,控制工作台的运行速度切换及切换位置。
规划路程:
先以100000速度运行(快进),到200000位置时,速度变为10000(工进),再到400000位置时,速度变为反向100000(快退)。
故应采用3个Switch开关,分别控制高速切低速,低速切高速,正向切反向,最终设计图如下所示:
将3个Switch开关的判断端都接PID输出,其中Switch为快进切换工进开关,判断条件参数如下图:
Switch1为正向切反向开关,判断条件参数如下图:
Switch2为低速切高速开关,判断条件参数如下:
基本要求:
Switch1和Switch2设置参数要一致,因为反转的同时,要由低速变为高速,且这两个开关的参数应大于Switch设置参数,因为要先实现工进,才能快退,否则将没有工进阶段。
最后,我们根据我们设计的参数,选择了合适的T值,实现工作台停止在原点,实验取得成功。
四、实验结果
最终设计图如下所示:
运行仿真结果:
在工作台最后端运行,工作台将先向左进行匀速快进,到轨道三分之一处时切换匀速工进,再到轨道三分之二处时,切换匀速快退,最后停在轨道最右端。
五、实验总结与感想
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字滤波器 试验台 实验