王济-matlab在振动信号处理中的应用代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序4-1
%最小二乘法消除多项式趋势项%%%%%%%%%%%%%%%%%%%%%%%%
clear % 清除内存中所有变量和函数
clc % 清除工作窗口中所显示的内容close all hidden % 关闭所有隐藏的窗口%%%%%%%%%%%%%%%%%%%%%%%%
%提示用键盘输入输入数据文件名
fni=input('消除多项式趋势项-输入数据文件名:','s');
%以只读方式打开数据文件
fid=fopen(fni,'r');
sf = fscanf(fid,'%f',1); %读入采样频率值
m = fscanf(fid,'%d',1); %读入拟合多项式阶数
fno = fscanf(fid,'%s',1);%读入输出数据文件名
x = fscanf(fid,'%f',inf);%读入时程数据存成列向量
%关闭数据文件
status=fclose(fid);
%取信号数据长度
n=length(x);
%建立离散时间列向量
t=(0:1/sf:(n-1)/sf)';
%计算趋势项的多项式待定系数向量a
a=polyfit(t,x,m);
%用x减去多项式系数a生成的趋势项
y=x-polyval(a,t);
%将分成2行1列的图形窗口的第1列设为当前绘图区域subplot(2,1,1);
%绘制x对于t的时程曲线图形
plot(t,x);
%在图幅上添加坐标网格
grid on;
%将分成2行1列的图形窗口的第2列设为当前绘图区域subplot(2,1,2);
%绘制y对于t的时程曲线图形
plot(t,y);
%在图幅上添加坐标网格
grid on;
%以写的方式打开文件或建立一个新文件
fid=fopen(fno,'w');
%进行n次循环将计算结果写到输出数据文件中
for k=1:n
%每行输出两个实型数据,t为时间,y为消除趋势项后的结果fprintf(fid,'%f %f\n',t(k),y(k));
%循环体结束语句
end
%关闭数据文件
status=fclose(fid);
程序4-2
%五点滑动平均法平滑处理%%%%%%%%%%%%%%%%%%%%%%
clear
clc
close all hidden %%%%%%%%%%%%%%%%%%%%%%
fni=input('五点滑动平均法平滑处理-输入数据文件名:','s'); fid=fopen(fni,'r');
sf = fscanf(fid,'%f',1); %采样频率
m = fscanf(fid,'%d',1); %平滑次数
fno = fscanf(fid,'%s',1);%输出数据文件名
x = fscanf(fid,'%f',inf);%输入数据存成列向量
status=fclose(fid);
%取信号数据长度
n=length(x);
%建立离散时间列向量
t=(0:1/sf:(n-1)/sf)';
%将x赋值给a
a=x;
%循环m次进行平滑处理计算
for k=1:m
b(1)=(3*a(1)+2*a(2)+a(3)-a(4))/5;
b(2)=(4*a(1)+3*a(2)+2*a(3)+a(4))/10;
for j=3:n-2
b(j)=(a(j-2)+a(j-1)+a(j)+a(j+1)+a(j+2))/5;
end
b(n-1)=(a(n-3)+2*a(n-2)+3*a(n-1)+4*a(n))/10;
b(n)=(-a(n-3)+a(n-2)+2*a(n-1)+3*a(n))/5;
a=b;
end
%将a赋值给y
y=a;
%将分成2行1列的图形窗口的第1列设为当前绘图区域subplot(2,1,1);
%绘制平滑前的时程曲线图形
plot(t,x);
%添加横向坐标轴的标注
xlabel('时间(s)');
%添加纵向坐标轴的标注
ylabel('加速度(g)');
%在图幅上添加坐标网格
grid on;
%将分成2行1列的图形窗口的第2列设为当前绘图区域subplot(2,1,2);
%绘制平滑后的时程曲线图形
plot(t,y);
%添加横向坐标轴的标注
xlabel('时间(s)');
%添加纵向坐标轴的标注
ylabel('加速度(g)');
%在图幅上添加坐标网格
grid on;
%打开文件输出平滑后的数据
fid=fopen(fno,'w');
for k=1:n
%每行写两个实型数据,t为时间,y为平滑后的数据fprintf(fid,'%f %f\n',t(k),y(k));
end
status=fclose(fid);
程序4-2
%五点滑动平均法平滑处理%%%%%%%%%%%%%%%%%%%%%%
clear
clc
close all hidden %%%%%%%%%%%%%%%%%%%%%%
fni=input('五点滑动平均法平滑处理-输入数据文件名:','s'); fid=fopen(fni,'r');
sf = fscanf(fid,'%f',1); %采样频率
m = fscanf(fid,'%d',1); %平滑次数
fno = fscanf(fid,'%s',1);%输出数据文件名
x = fscanf(fid,'%f',inf);%输入数据存成列向量
status=fclose(fid);
%取信号数据长度
n=length(x);
%建立离散时间列向量
t=(0:1/sf:(n-1)/sf)';
%将x赋值给a
a=x;