htext1=uicontrol(gcf,'style','text','position',[0.3,0.92,0.4,0.07],'fontname','隶书','fontsize',32,'string','机械振动测量'); %创建“机械振动测量”静态文本框 htext2=uicontrol(gcf,'style','text','position',[0.72,0.17,0.11,0.048],'string','振动频率=','fontweight','bold'); %创建“振动频率=”静态文本框 htext3=uicontrol(gcf,'style','text','position',[0.69,0.1,0.14,0.048],'string','振动加速度=','fontweight','bold'); %创建“振动加速度=”静态文本框 htext4=uicontrol(gcf,'style','text','position',[0.93,0.17,0.035,0.048],'string','Hz','fontweight','bold'); %创建“Hz”静态文本框
htext5=uicontrol(gcf,'style','text','position',[0.93,0.1,0.068,0.048],'string','mm/s2','fontweight','bold'); %创建“mm/s2”静态文本框
%在“开始”按钮中设置回调属性
set(hpush1,'callback',[...
'set_param(''shilei1'',''SimulationCommand'',''start''),',...
%让shilei1.mdl文件运行
't=timer(''TimerFcn'',''getdata'',''Period'',1,''ExecutionMode'',''fixedSpacing'',''TasksToExecute'',inf),',... %设置定时器,运行getdata.m文件 'pause(2);start(t);',... %暂停2秒并启动定时器 ]);
%在“停止”按钮中设置回调属性
set(hpush2,'callback','stop(t);set_param(''shilei1'',''SimulationCommand'',''stop'');'); %mdl文件停止运行
set(hr1,'value',get(hr1,'Max')); %默认条件下“原始信号”被选中 set(hr1,'callback',[... %“原始信号”单选按钮引起的回调 'set(hr1,''value'',get(hr1,''max'')),',... %选中将小圆圈点黑 'set(hr2,''value'',get(hr2,''min'')),',... %将“互斥”选项点白
't=timer(''TimerFcn'',''callradio1'',''Period'',1,''ExecutionMode'',''fixedSpacing'',''TasksToExecute'',inf),',... %设置定时器,运行callradio1.m文件 'pause(2);start(t);',... %暂停2秒并启动定时器 ]);
set(hr2,'callback',[... %“低通滤波”单选按钮引起的回调 'set(hr1,''value'',get(hr1,''min'')),',... %将“互斥”选项点白 'set(hr2,''value'',get(hr2,''max'')),',... %选中将小圆圈点黑
't=timer(''TimerFcn'',''callradio2'',''Period'',1,''ExecutionMode'',''fixedSpacing'',''TasksToExecute'',inf),',... %设置定时器,运行callradio2.m文件 'pause(2);start(t);',... %暂停2秒并启动定时器
]);
(2)getdata.m文件代码及注释
13
该文件是“机械振动测量”界面中的“开始”按钮回调时所运行的文件,即点击“开始”后,定时器开始计时,同时运行getdata.m文件。
该文件代码主要包括三部分,第一部分是实现对工作空间信号simout的读取和图形绘制,第二部分是对该信号进行频谱分析,第三部分是计算机械振动频率和振动加速度,并输出到界面中。
下图为点击“开始”,运行getdata.m文件后的结果。
以下是getdata.m文件的代码及注释
set_param('shilei1','SimulationCommand','stop'); %mdl文件停止运行
y1=evalin('base','simout.signals.values'); %读取保存到工作空间的信号simout axes(h_axes1); %设置当前坐标轴为“传感器输出波形” y2=y1(1:1000); %设置信号显示的x轴范围,便于观察 plot(y2); %在“传感器输出波形”坐标轴中绘制振动信号波形
%以下是对机械振动信号进行频谱分析
N=1024; %定义采样数据点数
P=fft(y1,N); %对信号进行快速傅里叶变换 Pyy=2*sqrt(P.*conj(P))/N; %计算信号频谱幅值
axes(h_axes2); %设置当前坐标轴为“频谱分析图谱” Fs=5000; %定义采样频率
14
f=linspace(0,Fs/2,N/2); %在0-Fs/2之间加入N/2个频率点
plot(f,Pyy(1:N/2)); %在“频谱分析图谱”坐标轴中绘制频谱波形
%以下是机械振动频率和振动加速度的计算
[ym,km]=max(Pyy); %求频谱波形的幅值最高点
xm=(km-1)*(Fs/N); %求幅值最高点对应的频率,即振动频率 strc=num2str(xm); %将振动频率从数值转换为字符串
set(hedit1,'string',strc); %将振动频率从“振动频率”编辑框中输出 strc1=num2str(ym/6080); %将幅值最高点的电压转换为振动加速度,并转换为字符串类型 set(hedit2,'string',strc1); %将振动加速度从“振动加速度”编辑框中输出
set_param('shilei1','SimulationCommand','start'); %mdl文件运行
(3)callradio1.m文件代码及注释
该文件是“机械振动测量”界面中的“原始信号”单选按钮回调时所运行的文件,即选择“原始信号”后,定时器开始计时,同时运行callradio1.m文件。
该文件代码基本与getdata.m文件相似,主要包括三部分,第一部分是实现对工作空间信号simout,即原始机械振动信号的读取,并把原始信号绘制到“传感器输出波形”的坐标轴中,第二部分是对该原始信号进行频谱分析,第三部分是计算原始信号的机械振动频率和振动加速度,并输出到界面中。
下图为选择“原始信号”单选按钮后,运行callradio1.m文件后的结果。
15
以下是callradio1.m文件的代码及注释
y1=evalin('base','simout.signals.values'); %读取保存到工作空间的信号simout axes(h_axes1); %设置当前坐标轴为“传感器输出波形” y2=y1(1:1000); %设置信号显示的x轴范围,便于观察 plot(y2); %在“传感器输出波形”坐标轴中绘制振动原始信号波形
%以下是对机械振动原始信号进行频谱分析
N=1024; %定义采样数据点数
P=fft(y1,N); %对信号进行快速傅里叶变换 Pyy=2*sqrt(P.*conj(P))/N; %计算信号频谱幅值
axes(h_axes2); %设置当前坐标轴为“频谱分析图谱” Fs=5000; %定义采样频率
f=linspace(0,Fs/2,N/2); %在0-Fs/2之间加入N/2个频率点
plot(f,Pyy(1:N/2)); %在“频谱分析图谱”坐标轴中绘制原始信号频谱波形
%以下是原始信号的机械振动频率和振动加速度的计算
[ym,km]=max(Pyy); %求频谱波形的幅值最高点
xm=(km-1)*(Fs/N); %求幅值最高点对应的频率,即振动频率 strc=num2str(xm); %将振动频率从数值转换为字符串
set(hedit1,'string',strc); %将动频率从“振动频率”编辑框中输出 strc1=num2str(ym/6080); %将幅值最高点的电压转换为振动加速度,并转换为字符串类型 set(hedit2,'string',strc1); %将振动加速度从“振动加速度”编辑框中输出
set_param('shilei1','SimulationCommand','start'); %mdl文件运行
(4)callradio2.m文件代码及注释
该文件是“机械振动测量”界面中的“低通滤波”单选按钮回调时所运行的文件,即选择“原始信号”后,定时器开始计时,同时运行callradio2.m文件。
该文件代码主要包括四部分,其中前三部分与callradio1.m文件相同,分别实现信号读取、频谱分析和振动频率、振动加速度两个参数的计算和输出。
该文件的最重要的一个部分就是IIR低通数字滤波器的设计。由于在该“机械振动测量”系统中,并不要求滤波器具有严格的线性相位,所以选择计算相对比较简单的IIR滤波器。通过该IIR低通数字滤波器的设计,实现对机械振动信号的低通滤波,滤掉高频噪声成分,只留下低频有用的成分。
下图为选择“低通滤波”单选按钮后,运行callradio2.m文件后的结果。
16