求助一个错误,无法解决
%频域积分%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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均为复数且系数为浮点数。 try
y=imag(a)-i*real(a); 这错误来得有点诡异。。 real(y)在等式右边是没问题的, 但在左边代表要被赋值! 即y已经被当成index, real被当成变数而非函数!
试试
y=1:2; real(y)=, whos 主任在沙发给的答案是对的:
y=imag(a)-i*real(a);
等号左边的y不应带有函数。 谢谢,主任的方法可以。
页:
[1]