marvelous111 发表于 2010-5-8 19:49

matlab处理振动的加速度信号

我在做毕业设计,最后一个数据处理模块。我用了王济的程序clear
clc
close all hidden
format long
%s=load('D:\MATLAB7\work\9118\数据文件.txt');
%fni=input('随机信号谱分析-输入数据文件','s');
fid=fopen('D:\data.txt','r');
%分析内容(1=自谱,2=互谱,3=频响函数,4=相干函数)
fun=fscanf(fid,'%d',1);
sf=fscanf(fid,'%f',1);%采样频率
nfft=fscanf(fid,'%d',1);%FFT长度
win=fscanf(fid,'%d',1);
%窗函数(1=矩形,2='%d',1);
fno=fscanf(fid,'%s',1);%输出数据文件名
%按行读入数据,第一行激励,第二行相应
a=fscanf(fid,'%f',);
status=fclose(fid);
%取激励信号向量
x=a(1,:);
%取相对的响应信号向量
y=a(2,:)-a(1,:);
%建立频率向量
f=0:sf/nfft:sf/2-sf/nfft;
%加窗处理
switch win
    case 1 %矩形窗
w=boxcar(nfft);
    case 2 %汉宁窗
w=hanning(nfft);
    case 3%海明窗
w=hamming(nfft);
    case 4%布莱克曼窗
w=blackman(nfft);
    case 5 %三角窗
w=triang(nfft);
otherwise
w=boxcar(nfft);
end
switch fun
case 1 %计算自谱频率
z=psd(y,nfft,sf,w,nfft/2);
case 2 %计算互谱函数
z=csd(x,y,nfft,sf,w,nfft/2);
case 3 %计算频响函数
z=tfe(x,y,nfft,sf,w,nfft/2);
case 4 %计算相干函数
z=cohere(x,y,nfft,sf,w,nfft/2);
    otherwise;
end
nn=1:nfft/4;
subplot(2,1,1);
plot(f(nn),abs(z(nn)));
xlabel('频率(Hz)');
ylabel('幅值');
grid on;
if fun>1&fun<4
%绘制相频曲线图
subplot(2,1,2);
plot(f(nn),angle(z(nn)));
xlabel('频率(Hz)');
ylabel('相位');
grid on;
end
%以写的方式打开文件或建立一个新的文件
fid=fopen(fno,'w');
%输出自谱和相干函数数据
if fun>1&fun<4
for k=1:nfft/2
%每行输出2个实型数据,f为频率,z为幅值
fprintf(fid,'%f%f\n',f(k),abs(z(k)));
end
%输出互谱和频响函数数据
else
for k=1:nfft/2
%每行输出3个实型数据,f为频率,z实部,虚
fprintf(fid,'%f%f%f\n',f(k),real(z(k),imag(z(k))));
end
end
status=fclose(fid);
我的数据是单列的数据,显示的是Error in ==> Untitled2 at 25
switch win
不知道是什么问题,是我数据格式的问题还是王老师的程序哪有问题

hitbjut 发表于 2010-12-29 23:52

这个问题 是你的问题看看a=fscanf(fid,'%f',);你输入有问题啊

sunsun1212 发表于 2011-7-7 11:26

王济的数据输入代码有问题
页: [1]
查看完整版本: matlab处理振动的加速度信号