www.pudn.com > Eliminate-the-trend-method.zip > 最小二乘法去趋势项.m, change:2012-05-09,size:1411b


%最小二乘法消除多项式趋势项 
 clear;%清除内存中所有变量和函数 
 clc; %清除工作窗口中所显示的内容 
 close all hidden;%关闭所有隐藏的窗口 
 fni = input('消除多项式趋势项-输入数据文件名:','s');%input:提示用户进行键盘输入并获取输入内容 
 fid = fopen(fni,'r');%以只读方式打开fni文件 
 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); 
 %绘制x对于t的时程曲线图形 
 original=plot(t,x); 
 %横坐标的标签为时间t 
 xlabel('t') 
 %在图幅上添加坐标网格 
 grid on; 
 %当前轴及图形保持而不被刷新,准备接受此后将绘制 
 hold on; 
 %把去除趋势项后的时程曲线绘成红色 
 Leastsquaremethod=plot(t,y,':'); 
 %添加横坐标轴的标注 
 xlabel('时间(s)'); 
 %把纵坐标标签为位移 
 ylabel('位移(mm)') 
 %绘制曲线所用线型.色彩或数据点形图例 
 legend('输入','输出') 
 %在图幅上添加坐标网格 
 grid on; 
 %以写的方式打开文件或建立一个新文件 
 fid=fopen(fno,'w'); 
 %进行n次循环将计算结果写到输出数据文件中 
 for k = 1:n 
 %每行输出两个实型数据,t为时间,y为消除趋势项后的结果 
     fpintf(fid,'%f%f\n',t(k),y(k)); 
 %循环体结束语句 
 end 
  %关闭数据文件 
 status = fclose(fid);