tsssnow 发表于 2009-3-23 19:57

求助一个错误,无法解决

%频域积分
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
close all hidden;
fni=input('频域积分-输入数据文件名:','s');
fid=fopen(fni,'r');
fs=44100;                   %采样频率
fmin=0;                     %最小截止频率
fmax=3000;                  %最大截止频率
c=8192;                     %单位变换系数
it=1;                     %积分次数
sx='时间';                         %横向坐标轴的标注
sy1='速度';                        %纵向坐标轴输入单位的标注
sy2='位移';                        %纵向坐标轴输出单位的标注
x=fscanf(fid,'%f',); %输入数据存成行向量
status=fclose(fid);
n=length(x);
t=0:1/fs:(n-1)/fs;          %建立时间向量
nfft=2^nextpow2(n);         %大于并最接近n的2的幂次方为FFT长度
y=fft(x,nfft);            %FFT变换
df=fs/nfft;               %计算频率间隔
ni=round(fmin/df+1);      %计算指定频带对应频率数组的下表
na=round(fmax/df+1);      
dw=2*pi*df;               %计算圆周率间隔(rad/s)
w1=0:dw:2*pi*(0.5*fs-df);   %建立正的离散圆频率向量
w2=2*pi*(0.5*fs-df):-dw:0;%建立负的离散元频率向量
w=;                  %将正负圆频率向量组成一个向量
w=w.^it;
a=zeros(1,nfft);
a(2:nfft-1)=y(2:nfft-1)./w(2:nfft-1);
if it==2
    y=-a;
else
    real (y) = imag (a);
    imag (y) = -real (a);
end
a=zeros(1,nfft);
a(ni:na)=y(ni:na);
a(nfft-na+1:nfft-ni+1)=y(nfft-na+1:nfft-ni+1);
y=ifft(a,nfft);
y=real(y(1:n))*c;
subplot(2,1,1);
plot(t,x);
xlabel(sx);
ylabel(sy1);
grid on;
subplot(2,1,2);
plot(t,y);
xlabel(sx);
ylabel(sy2);
grid on
红字处错误:说Subscript indices must either be real positive integers or logicals.
a和y均为复数且系数为浮点数。

ChaChing 发表于 2009-3-23 21:19

try
y=imag(a)-i*real(a);

ydlcsu 发表于 2009-3-23 21:35

这错误来得有点诡异。。

ChaChing 发表于 2009-3-23 21:43

real(y)在等式右边是没问题的, 但在左边代表要被赋值! 即y已经被当成index, real被当成变数而非函数!
试试
y=1:2; real(y)=, whos

songzy41 发表于 2009-3-24 08:48

主任在沙发给的答案是对的:
y=imag(a)-i*real(a);
等号左边的y不应带有函数。

tsssnow 发表于 2009-3-24 10:30

谢谢,主任的方法可以。
页: [1]
查看完整版本: 求助一个错误,无法解决