www.pudn.com > Eliminate-the-trend-method.zip > matlab程序.txt, change:2012-05-16,size:2566b


C:\Users\geshubiao\Desktop\MATLAB程序\data.txt 
振动信号消除趋势项matlab程序 
%用最小二乘法消除振动信号的趋势项 
 clear; 
 clc; 
 fni=input('数据文件名:','s'); 
 fid=fopen(fni,'r'); 
 fs=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/fs:(n-1)/fs); 
 a=polyfit(t,x,m);     %计算多项式待定系数向量a 
 y=x-polyval(a,t);     %用x减去多项式系数a生成的趋势项 
 subplot(2,1,1); 
 plot(t,x); 
 title('original signal'); 
 grid on; 
 subplot(2,1,2); 
 plot(t,y); 
 title('redifined signal'); 
 grid on; 
 fno=input('输出数据的文件名:','s'); 
 save(fno,'t','y'); 
  
 
%最小二乘法消除多项式趋势项 
 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 = polyfit(t,x,m);%计算趋势项的多项式待定系数向量a 
 y = x-polyval(a,t);%用x减去多项式系数a生成的趋势项 
 subplot(2,1,1); 
 plot(t,x); 
 grid on; 
 subplot(2,1,2); 
 plot(t,y); 
 grid on; 
 fid=fopen(fno,'w'); 
 for k = 1:n 
     fpintf(fid,'%f%f\n',t(k),y(k)); 
 end 
 status = fclose(fid); 
 
C:\Users\geshubiao\Desktop\data1.txt 
%滑动平均法消除振动信号的趋势项 
 clear;  
 clc;  
 close all hidden; 
 fni = input('消除多项式趋势项-输入数据文件名:','s');%input:提示用户进行键盘输入并获取输入内容 
 fid = fopen(fni,'r');%以只读方式打开fni文件 
 sf = fscanf(fid,'%f',1);%读入采样频率值 
 l = fscanf(fid,'%d',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)';%建立离散时间列向量 
 b=ones(1,l); 
 a=[b*x(1),x,b*x(n)]; 
 b=a; 
 for k=1:m 
    for j=l+1:n-1 
     b(j)=mean(a(j-1:j+1)); 
  end 
  a=b; 
 end 
 y=x(1:n)-a(l+1:n+1); 
 plot(t,x,':',t,y,t,a(l+1:n+1),'-.'); 
 xlabel('时间(s)'); 
 ylabel('位移  mm'); 
 legend('输入',‘输出','趋势’); 
 grid on; 
 fid=fopen(fno,'w'); 
 for k=1:n 
 fprintf(fid,'%f%f\n',t(k),y(k)); 
 end 
status=fclose(fid); 
C:\Users\geshubiao\Desktop\MATLAB程序\最小二乘法数据.txt 
C:\Users\geshubiao\Desktop\MATLAB程序\平滑数据.txt