索引超出数组元素的数目(20000)

sf=1024;fmin=0.5;fmax=200;it=1;n=length(gz);t=0:1/sf:(n-1)/sf;nfft=2^nextpow2(n);x=gz';y=fft(x,nfft);df=sf/nfft;ni=round(fmin/df+1);na=round(fmax/df+1);dw=2*pi*df;w1=0:dw:2*pi*0.5*sf;w2=-2*pi*(0.5*sf-df):dw:-dw;w=[w1,w2];w=w.^it;a=zeros(1,nfft);a(2:nfft-1)=y(2:nfft-1)./w(2:nfft-1);al=imag(a);a2=real(a);y=al-a2*i;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))Z=abs(y);fmin=10;famx=200;df=sf/nfft;ni=round(fmin/df+1);na=round(fmax/df+1);dw=2*pi*df;w1=0:dw:2*pi*0.5*sf;w2=-2*pi*(0.5*sf-df):dw:-dw;w=[w1,w2];a=zeros(1,nfft-1);a(2:nfft-1)=y(2:nfft-1)./w(2:nfft-1);a1=imag(a);a2=real(a);y=a1-a2*i;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));G=abs(y);plot(G(1:n)); 索引超出数组元素的数目(20000)。 出错 Untitled (line 41) a(2:nfft-1)=y(2:nfft-1)./w(2:nfft-1);

应该是w的维度超过了前面定义的最大长度。

这是w的长度

w1=0:dw:2*pi*0.5*sf;
w2=-2*pi*(0.5*sf-df):dw:-dw;
w=[w1,w2];

w索引时需要的维度为:

w(2:nfft-1)

这两者的长度不匹配时就会出现这个问题。

我看你的程序是FFT求频谱是吧。可以参考我的博文:

https://blog.csdn.net/MatlabFans_Mfun/article/details/113486391

 

 

sf=1024;
fmin=0.5;
fmax=200;
it=1;
n=length(zS8);
t=0:1/sf:(n-1)/sf;
nfft=2^nextpow2(n);
x=zS8';
y=fft(x,nfft);
H=abs(y);
plot(H(1:n));
df=sf/nfft;
ni=round(fmin/df+1);
na=round(fmax/df+1);
dw=2*pi*df;
w1=0:dw:2*pi*0.5*sf;
w2=-2*pi*(0.5*sf-df):dw:-dw;
w=[w1,w2];
w=w.^it;
a=zeros(1,nfft);
a(2:nfft-1)=y(2:nfft-1)./w(2:nfft-1);
al=imag(a);
a2=real(a);
y=al-a2*i;
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));
y=fft(x,nfft);
Z=abs(y);
fmin=10;
fmax=200;
df=sf/nfft;
ni=round(fmin/df+1);
na=round(fmax/df+1);
dw=2*pi*df;
w1=0:dw:2*pi*0.5*sf;
w2=-2*pi*(0.5*sf-df):dw:-dw;
w=[w1,w2];
a=zeros(1,nfft);
a(2:nfft-1)=y(2:nfft-1)./w(2:nfft-1);
a1=imag(a);
a2=real(a);
y=a1-a2*i;
a=zeros(1,nfft);
a(ni:na)=y(ni:na);
a(nfft-na+1:nfft-ni+1)=y(nfft-na+1:nfft-ni+1);
figure
A=abs(a);
plot(A(1:n));
y=ifft(a,nfft);
y=real(y(1:n));
rm=rms(y);
figure
I=abs(y);
plot(I(1:n));

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632