|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
老师们,这段程序不知道怎么改下。现有'data0.mat'为5096*4矩阵的实验数据,第一列输入,后面三列输出,想参考下面程序编写,但是这里面的fun,win,fno,a,不知道怎么赋值替换,不想用王济写的fscanf等等命令。
其中sf=160;nfft=5096;望各位老师指点下,谢谢了。
%随机信号谱分析
clear all;
close all;
clc;
fni=input('data0.mat','s');
fid=fopen(fni,'r');
%分析内容(1=自谱,2=互谱,3=频响函数,4=相干函数)
fun=fscanf(fid,'%d',1);
sf=fscanf(fid,'%f',1);%采样频率
nfft=fscanf(fid,'%d',1);%fft长度
%窗函数(1=矩形,2=haning,3=海明,4=布莱克慢,5=三角)
win=fscanf(fid,'%d',1);
fno=fscanf(fid,'%s',1);%输出数据文件名
%按行读入数据,第一行激励,第二行响应
a=fscanf(fid,'%f',[2,inf]);
status=flose(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(211);plot(f(nn),abs(z(nn)));
xlabel('HZ');ylabel('相位');grid on;
if fun>1&fun<4%相位图
subplot(212);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\n',f(k),real(z(k)),imag(z(k)));
end
status=flose(fid); |
|