[未答复] 位置2处报错 Index in position 2 exceeds array bounds. Index must not exceed 89

[复制链接]
星弦 发表于 2022-5-10 21:21:01
[color=rgba(0, 0, 0, 0.75)]

clear;clc;
fid=fopen('female.dat');
x1=fread(fid,16000,'short');
figure;plot(x1);title('读信号');
grid

%分帧
wlen=80002010.^(-3); inc=160; % 给出帧长和帧移
win=rectwin(wlen); % 给出矩形窗
N=length(x1); % 信号长度
time=(0:N-1)/8000; % 计算出信号的时间刻度
X=enframe(x1,win,inc); % 分帧
X=X';
fn=size(X,2); % 求出帧数

%去均值
for p=1:89
ave=mean(X(:,p));
X(:,p)=X(:,p)-ave;
for o=1:160
XX((p-1)*160+o)=X(o,p);
end
end
figure;plot(1:14240,XX,'k'); axis([5000 5400 ,-inf,inf]);xlabel('时间(s)');ylabel('时间波形');title('展开信号');
hold on;

b1=[0.008233 -0.004879 0.007632 -0.004879 0.008233];
a1=[1 -3.6868 5.8926 -5.0085 2.2518 -0.4271];
[H,w]=freqz(b1,a1,512);
for r=1:89
sf_1(:,r)=filter(b1,a1,X(:,r));
end
plot(sf_1(1:14240),'b');xlabel('时间(s)');ylabel('幅值');title('椭圆滤波');axis([5000 5400 ,-inf,inf]) %改变横轴范围
hold on;

b2=[1 1 1 1 1 1 1 1 1];
a2=[9 0 0 0 0 0 0 0 0];
[H,w]=freqz(b2,a2,512);
for r=1:89
sf_2(:,r)=filter(b2,a2,sf_1(:,r));
end
plot(sf_2(1:14240),'r');xlabel('时间(s)');ylabel('幅值');title('数值滤波');axis([5000 5400 ,-inf,inf]) %改变横轴范围
legend('去均值','低通滤波','数值滤波');

for i=1 : fn
for z=2:wlen
S_LPN(1,1)=sf_2(1,(1+(i-1)*inc))*sf_2(1,(1+(i-1)*inc));
S_LPN(1,z)=S_LPN(1,(z-1))+sf_2(1,(z+(i-1)*inc))*sf_2(1,(z+(i-1)inc));
end
En(i)=10
log10(S_LPN(1,160)/160+0.0000000001);
end

倒数第4行的S_LPN(1,z)报错





  • 写回答
  • 好问题
    提建议
  • 追加酬金
  • 分享

  • 邀请回答

  • 收起



您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表