|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
第一个问题:《MATLAB在振动信号处理中的应用》一书中有三分之一倍频程的程序(程序在下面),请高手帮我看看程序有没有问题,主要是中间求有效值那里
- %三分之一倍频程处理
- clear
- %clc
- %close all hidden
- format long
- %fni=input('三分之一倍频程处理-输入数据文件名','s');
- %fid=fopen(fni,'r')
- %sf=fscanf(fid,'%f',1); %读入采样频率值
- %fno=fscanf(fid,'%d',1); %读入输出数据文件名
- %x=fscanf(fid,'%f',[1 inf]); %读入输入数据存成列向量
- %status=fclose(fid);
- sf=200;
- %fno='out6_4.mat';
- %load y
- %x=y;
- N=20000;
- nn=1:N;
- t=nn./sf;
- x=3*sin(2*pi*2.25*t)+3*sin(2*pi*15*t)+3*sin(2*pi*23*t);
- %定义三分之一倍频程的中心频率
- f=[1.00 1.25 1.60 2.00 2.50 3.15 4.00 5.00 6.30 8.00];
- fc=[f,10*f,100*f,1000*f,10000*f];
- %中心频率与下限频率的比值
- oc6=2^(1/6);
- nc=length(fc);
- n=length(x);
- nfft=2^nextpow2(n);
- a=fft(x,nfft);
- for j=1:nc
- fl=fc(j)/oc6;
- fu=fc(j)*oc6;
- nl=round(fl*nfft/sf+1);
- nu=round(fu*nfft/sf+1);
- if fu>sf/2
- m=j-1;break
- end
- b=zeros(1,nfft);
- b(nl:nu)=a(nl:nu);
- b(nfft-nu+1:nfft-nl+1)=a(nfft-nu+1:nfft-nl+1);
- c=ifft(b,nfft);
- yc(j)=sqrt(var(real(b(1:n))));%计算每个中心频率段的有效值
- end
- figure
- subplot(2,1,1);
- t=0:1/sf:(n-1)/sf;
- plot(t,x);
- xlabel('时间(s)');
- ylabel('加速度(g)');
- grid on;
- subplot(2,1,2);
- plot(fc(1:m),yc(1:m));
- xlabel('频率(Hz)');
- ylabel('有效值');
- xlim([0 100])
- grid on;
- %fid=fopen(fno,'w');
- %for k=1:m
- % fprintf(fid,'%f%f\n',fc(k),yc(k));
- %end
- %status=fclose(fid);
复制代码
|
|