cammer534 发表于 2008-10-21 17:04

王济——随机信号谱分析

老师们,这段程序不知道怎么改下。现有'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',);
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);

civil1314 发表于 2008-11-2 20:25

同样的问题!

最近也在看王济的书,头疼啊。
希望有个达人帮忙看下怎么改哦。
给个回复啊

byj 发表于 2010-6-7 20:24

我对这个程序有些东西也是不理解,希望高手指点指点。

gaixn 发表于 2012-11-3 14:31

我也正在看,最近要做随机信号的谱分析,这个程序写的有点晦涩,看不明白
页: [1]
查看完整版本: 王济——随机信号谱分析