用matlab进行频谱分析索引超过数组元素数目?

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);
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));

 

t = linspace(0,10,1024);
gz = sin(t);
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);
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));

结果:

注意两点:

1. 信号gz的长度需要与nfft的点数匹配;

2. a(2:nfft-1)=y(2:nfft-1)./w(2:nfft-1)'; 这里右端加个转置。