[已解决] matlab下标索引必须为正整数类型或逻辑类型问题

[复制链接]
Asensiosh 发表于 2021-10-12 04:34:14
在编写实现理想FIR滤波器的一个程序的时候,遇到报错:
“下标索引必须为正整数类型或逻辑类型问题。
出错 casetest_2_FIR_newone (line 13)    f(i) = sin(2 * pi * F * dk *  i)/ (pi * i);”但是看了看代码,还是没有发现问题究竟出在哪,还望各位大神帮忙看看。
clear all;
%理想FIR滤波器
dk = 0.0005;
n = 1:2000;
k = n * dk;
x = sin(2 * pi * 5 * k) + sin(2 * pi * 50 * k) + sin (2 * pi * 150 * k);
x1 = sin(2 * pi * 5 * k);
F = 10;
f = zeros(100*1);
f(1) = 2 * F * dk;
y(n) = zeros(1,2000);
while i<80
    f(i) = sin(2 * pi * F * dk *  i)/ (pi * i);
    i = i+1;
end
for n = 81:2000
    y(n) = 0;
    for i = 1:80
         y(n) = f(i) * x(k-i) + y(n);
    end
end
plot(k,y);




最佳答案


TouAkira 发表于 2021-10-12 06:04:42
你得在开始调用 i 之前先给 i 赋值,比如 i = 1 什么的,否则 i 会被默认为复数中的虚部单位,这也是我一直反对新手使用i作为循环中的控制变量的原因。

然后,你这个k是个复杂的浮点数值向量,后面 x(k-i) 肯定会报错的,先搞清楚你到底是要调用x向量的第 k - i 个元素,还是想把 k - i 的数值代入到自定义函数x中去做运算吧。

5 条回复


Asensiosh 发表于 2021-10-12 04:38:57
自己写的,估计还有些错误,还望大家也能指出来:'(

TouAkira 发表于 2021-10-12 06:04:42
你得在开始调用 i 之前先给 i 赋值,比如 i = 1 什么的,否则 i 会被默认为复数中的虚部单位,这也是我一直反对新手使用i作为循环中的控制变量的原因。

然后,你这个k是个复杂的浮点数值向量,后面 x(k-i) 肯定会报错的,先搞清楚你到底是要调用x向量的第 k - i 个元素,还是想把 k - i 的数值代入到自定义函数x中去做运算吧。
回复此楼

20141303 发表于 2021-10-12 09:36:45
仅供参考,除了三楼说的,还有y(n) = f(i) * x(k-i) + y(n);这句代码中的引用也有问题,k不是完全由正整数组成的向量,故k-i也不符合引用规则

Asensiosh 发表于 2021-10-12 22:36:52
TouAkira 发表于 2021-10-12 06:04
你得在开始调用 i 之前先给 i 赋值,比如 i = 1 什么的,否则 i 会被默认为复数中的虚部单位,这也是我一直 ...

太感谢了,确实有这个问题,现在已经修改好了,程序能运行了

Asensiosh 发表于 2021-10-12 22:37:24
20141303 发表于 2021-10-12 09:36
仅供参考,除了三楼说的,还有y(n) = f(i) * x(k-i) + y(n);这句代码中的引用也有问题,k不是完全由正整数 ...

是的,这个k应该是n的,我打错了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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