MATLAB程序集.docx
- 文档编号:12277329
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:13
- 大小:18.10KB
MATLAB程序集.docx
《MATLAB程序集.docx》由会员分享,可在线阅读,更多相关《MATLAB程序集.docx(13页珍藏版)》请在冰豆网上搜索。
MATLAB程序集
1.数据预处理主程序(m文件名:
wz_main_090531.m):
%wz_main
%建立日期:
2009.05.01
%修改日期:
2009.05.31
%清除窗口及变量空间
zz
%===========参数设置区========================================
sta_K=3;%数据开始位置
end_K=7;%数据结束位置
%=============================================================
w_BT='请选择你要装载的数据文件';
[DataLoad_1WJ_Name]=wzfun_LoadFile(w_BT);
disp(['装载的文件名为:
'WJ_Name])
JiPin=input('请输入基频频率(Hz):
')
disp('幅值归一化后结果')
K=1024;
[Data_hangData_lie]=size(DataLoad_1);
DataLoad(:
1)=DataLoad_1(:
1);
DataLoad(:
2:
Data_lie)=DataLoad_1(:
2:
Data_lie)/1000;
forw1_i=2:
Data_lie
Data_Yuan=DataLoad(sta_K*K+1:
end_K*K,[1w1_i]);
Data_Lvbo=wzfun_LvBo(Data_Yuan(:
2),1024,10,400);
w_td_str=['第'num2str(w1_i-1)'通道信号'];
wzfun_Graph(Data_Yuan,5*(w1_i-2)+1,1,'原始信号时域波形图','时间(s)','振动加速度(m/s^2)','b',w_td_str)
Data_Lvbo_t=[Data_Yuan(:
1)Data_Lvbo];
wzfun_Graph(Data_Lvbo_t,5*(w1_i-2)+2,1,'滤波后信号时域波形图','时间(s)','振动加速度(m/s^2)','r',w_td_str)
[f_Yuan,Pin_A_Yuan]=wzfun_PinPu(Data_Yuan);
[f_Lvbo,Pin_A_Lvbo]=wzfun_PinPu(Data_Lvbo_t);
Data_Yuan_Pin_A=[f_Yuan,Pin_A_Yuan];
Data_Lvbo_Pin_A=[f_Lvbo,Pin_A_Lvbo];
wzfun_Graph(Data_Yuan_Pin_A,5*(w1_i-2)+3,1,'原始信号频谱(幅值谱)图','频率(Hz)','振动加速度(m/s^2)','b',w_td_str)
wzfun_Graph(Data_Lvbo_Pin_A,5*(w1_i-2)+4,1,'滤波后信号频谱(幅值谱)图','频率(Hz)','振动加速度(m/s^2)','r',w_td_str)
%求基频及前四次谐波所对应的幅值
%===============================================================
%[x1_zby1_zz]=wzfun_ZuiZhi(f_Lvbo,Pin_A_Lvbo);
f_max=max(f_Lvbo);
munm=size(f_Lvbo);
fori=1:
4
fw_min=(JiPin)*i*0.8;
fw_max=(JiPin)*i*1.2;
ni=round(fw_min*munm/f_max+1);
ifni<=1;
ni=1;
end
na=round(fw_max*munm/f_max+1);
ifna>=munm
na=munm;
end
[x_zb(i)y_zz(i)]=wzfun_ZuiZhi(f_Lvbo(ni:
na),Pin_A_Lvbo(ni:
na));
end
%[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t)%对p,t进行归一化
y_zz_guiyi=norm(y_zz);
shujubiao=[x_zb'y_zz'/y_zz_guiyi];
h=figure(5*(w1_i-2)+5);
set(h,'Color','White');
bar(shujubiao(:
2),0.5);
title(w_td_str);%标题栏
xlabel('谐波阶次');%x轴标签
ylabel('幅值归一化');%y轴标签
ylim([01]);
disp([w_td_str'谐波分量'])
sprintf('%8.1f%5.3f\n',shujubiao')
%求解振动幅值有效值
%=====================================================================
A_Rms(w1_i-1)=wzfun_RmsA([Data_Yuan(:
1)Data_Lvbo]);
disp([w_td_str'振动有效值为:
'])
RA=A_Rms(w1_i-1)
%=====================================================================
End
2.神经网络故障诊断程序(m文件名:
wz_ANN.m):
%函数名称:
wz_ANN
%函数功能:
基于神经网络的故障诊断
%备注:
脚本式M文件
%建立日期:
2009.05.18
%修改日期:
2009.05.31
%清除窗口及变量空间
zz
%===========参数设置区=======================================================
YB_TZ_n=4;%故障样本特征维数
GZ_ZhongLei=3;%故障种类
%=======================================================
w_BT_1='请选择你要装载的故障样本数据文件';
w_BT_2='请选择你要装载的待诊断数据文件';
[DataLoadWJ_Name]=wzfun_LoadFile(w_BT_1);
disp(['装载的故障训练样本文件名为:
'WJ_Name])
[Num_ln,Num_col]=size(DataLoad);
p=DataLoad(:
1:
YB_TZ_n)';
t=DataLoad(:
YB_TZ_n+1:
YB_TZ_n+GZ_ZhongLei)';
%神经网络建立与训练
%=========================================================================
%RBF神经网络
net=newrb(p,t,1e-6,0.15,300,1);
%进行故障诊断
%==========================================================================
[DataZDWJ_Name_1]=wzfun_LoadFile(w_BT_2);
disp(['装载的故障诊断样本文件名为:
'WJ_Name_1])
p_zd=DataZD(:
1:
YB_TZ_n)';
disp('故障诊断结果为:
')
P2=sim(net,p_zd)
%savenet_zdnet
3.装载数据函数(m文件名:
wzfun_LoadFile.m):
function[DataLoad,WJ_Name]=wzfun_LoadFile(BT)
%函数名称:
wzfun_LoadFile
%函数功能:
装载文件数据
%调用格式:
[DataLoadWJ_Name]=wzfun_LoadFile(BT)
%入口参数:
BT:
载入文件对话框标题
%返回值:
DataLoad:
载入的文件数据
%WJ_Name:
载入的文件名称
%备注:
无
%建立日期:
2009.05.01
%修改日期:
2009.05.31
%装载数据
FileFilter={'*.txt','TXT-files(*.txt)';'*.rtf','RTF-files(*.rtf)';'*.*','AllFiles(*.*)'};
[filename,pathname]=uigetfile(FileFilter,BT,'文件名称');
WJLoad=[pathnamefilename];
WJ_Name=filename;
if(isequal(filename,0)|isequal(pathname,0))
return;
end
%设置异常处理
try
DataLoad=load(WJLoad);
catch
disp(lasterr);
disp('数据装载失败');
return;
end
4.绘图函数(m文件名:
wzfun_Graph.m):
functionwzfun_Graph(Data,GraphNum,Grid,my_title,my_xlabel,my_ylabel,Co,BD)
%函数名称:
wzfun_Graph
%函数功能:
绘制图形
%调用格式:
wzfun_Graph(Data,GraphNum,Grid,my_title,my_xlabel,my_ylabel,Co,BD)
%入口参数:
Data:
绘图数据(m*n矩阵)
%GraphNum:
图形编号(自然数)
%Grid:
是否显示网格(取值1时显示,取值0时不显示)
%my_title:
图形标题(字符串)
%my_xlabel:
x轴标签(字符串)
%my_ylabel:
y轴标签(字符串)
%Co:
线型、颜色设置,示例:
Co=['r--';'g-x';'k-+';'m-*';'y-s';'c-o';'b-v'];
%BD:
图示标签,示例:
BD=['1号测点';'2号测点';'3号测点';'4号测点';'5号测点'];
%返回值:
无
%备注:
无
%建立日期:
2009.05.01
%修改日期:
2009.05.18
[Num_ln,Num_col]=size(Data);
x=Data(:
1);
y=Data(:
2:
Num_col);
%设置异常处理
%绘制图形
try
h=figure(GraphNum);
set(h,'Color','White');
%绘图
holdon;
fori=1:
Num_col-1
plot(x(:
1),y(:
i),Co(i,:
))%线性坐标系
end
title(my_title)%标题栏
xlabel(my_xlabel)%x轴标签
ylabel(my_ylabel)%y轴标签
ifGrid==1
gridon
end
legend(BD(1:
Num_col-1,:
));
catch
disp(lasterr);
disp('图形绘制失败,请仔细检查失败原因');
return;
end
5.滤波函数(m文件名:
wzfun_LvBo.m):
functionDataLvbo=wzfun_LvBo(Data,fs,fmin,fmax)
%函数名称:
wzfun_LvBo
%函数功能:
带通滤波
%调用格式:
DataLvbo=wzfun_LvBo(Data,fs,fmin,fmax)
%入口参数:
Data:
原始数据
%fs:
采样频率
%fmin:
最小截止频率
%fmax:
最大截止频率
%返回值:
DataLvbo:
带通滤波后数据
%备注:
无
%建立日期:
2009.05.18
%修改日期:
2009.05.25
%取信号数据长度
n=length(Data);
%取大于并接近n的2的幂次方为FFT长度
nfft=2^nextpow2(n);
%nfft=2^fix(log2(n));
%四舍五入取整求最小截止频率对应数据元素的下标
ni=round(fmin*nfft/fs+1);
%四舍五入取整求最大截止频率对应数据元素的下标
na=round(fmax*nfft/fs+1);
%进行FFT变换,结果存于y
y=fft(Data,nfft);
%建立一个长度为nfft元素全为0的向量
a=zeros(1,nfft);
%将y的正频率带通内的元素赋值给a
a(ni:
na)=y(ni:
na);
%将y的负频率带通内的元素赋值给a
a(nfft-na+1:
nfft-ni+1)=y(nfft-na+1:
nfft-ni+1);
%进行FFT逆变换,结果存于y
y=ifft(a,nfft);
%取逆变换的实部nfft个元素为滤波结果列向量
DataLvbo=(real(y(1:
n)))';
6.信号频谱程序(m文件名:
wzfun_PinPu.m):
function[f,X,Xita]=wzfun_PinPu(Data)
%函数名称:
wzfun_PinPu
%函数功能:
计算信号频谱(幅值谱、相位谱)
%调用格式:
[f,X,Xita]=wzfun_PinPu(Data)
%入口参数:
Data:
振动数据(2*n矩阵;第1列为时间信号)
%返回值:
f:
频率向量
%X:
幅值向量
%Xita:
相位向量
%备注:
%建立日期:
2009.05.01
%修改日期:
2009.05.25
[Num_ln,Num_col]=size(Data);
t=Data(:
1);
x=Data(:
2);
%取信号数据长度
n=length(x);
%取大于并接近n的2的幂次方为FFT长度
N=2^nextpow2(n);
%取小于并接近n的2的幂次方为FFT长度
%N=2^fix(log2(n));
dt=t
(2)-t
(1);%dt:
采样间隔
N0=fix(N/2);
f1=(1/dt/N)*(0:
N0-1);
A=fft(x,N);
X_tmp=abs(A);
Xita_tmp=angle(A);
f=f1';
X=X_tmp(1:
N0);
Xita=Xita_tmp(1:
N0);
7.计算有效值函数(m文件名:
wzfun_RmsA.m):
functionA_Rms=wzfun_RmsA(Data)
%函数名称:
wzfun_RmsA
%函数功能:
计算位移、速度、加速度等幅值有效值
%调用格式:
A_Rms=wzfun_RmsA(Data)
%入口参数:
Data:
原始数据(m*2矩阵)
%返回值:
A_Rms:
幅值有效值
%备注:
无
%建立日期:
2009.05.18
%修改日期:
2009.05.31
[Num_ln,Num_col]=size(Data);
%计算有效值
t=Data(:
1);
x=Data(:
2);
s=0;
fori=1:
Num_ln-1
dt=t(i+1)-t(i);
s=s+x(i)^2*dt;
end
A_Rms=sqrt(1/t(Num_ln-1)*s);
8.文件保存程序(m文件名:
wzfun_SaveFile.m):
functionwzfun_SaveFile(DataSave,DataFormat)
%函数名称:
wzfun_SaveFile
%函数功能:
保存数据文件
%调用格式:
wzfun_SaveFile(DataSave,DataFormat)
%入口参数:
DataSave:
待保存的数据(矩阵)
%DataFormat:
数据保存格式(字符串),示例:
DataFormat='%3d%5.2f%5.2f\n'
%返回值:
无
%备注:
无
%建立日期:
2009.05.01
%修改日期:
2009.05.18
FileFilter={'*.rtf','RTF-files(*.rtf)';'*.txt','TXT-files(*.txt)';'*.*','AllFiles(*.*)'};
[filename,pathname,filterindex]=uiputfile(FileFilter,'请输入你要保存的文件名:
','');
WJSave=[pathnamefilename];
%有的MATLAB版本需要如下代码
%WJSave=[pathnamefilenameFileFilter{filterindex}(2:
5)];
%设置异常处理
try
fid=fopen(WJSave,'a+');
catch
disp(lasterr);
disp('文件打开错误');
return;
end
if(isequal(filename,0)|isequal(pathname,0))
return;
end
try
fprintf(fid,DataFormat,DataSave');
catch
disp(lasterr)
disp('文件数据或数据格式输入错误')
fclose(fid);
return;
end
fclose(fid);
9.求取最大值函数(m文件名:
wzfun_ZuiZhi.m):
function[x_zby_zz]=wzfun_ZuiZhi(x,y)
%函数名称:
wzfun_ZuiZhi
%函数功能:
找出最大值
%调用格式:
[x_zby_zz]=wzfun_ZuiZhi(x,y)
%入口参数:
x:
横坐标向量
%y:
纵坐标向量
%返回值:
x_zb:
横坐标数值
%y_zz:
纵坐标数值
%备注:
%建立日期:
2009.05.05
%修改日期:
2009.05.25
[y_maxweizhi]=max(y);
x_zb=x(weizhi);
y_zz=y_max;
10.清空窗口及变量空间函数(m文件名:
zz.m):
%函数功能:
清除窗口及变量空间
clc
clear
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 程序