我为我的过滤器编写了以下函数,
function filteredX=dftFilter(X,lowerBound,upperBound)
lower=max(ceil((lowerBound/(2*pi))*length(X)), 1);
upper=floor((upperBound/(2*pi))*length(X));
filteredX=zeros(1,length(X));
for int=lower:upper
filteredX(int)=X(int);
end
endfunction
如果我将它用于以下输入,一切正常
dftFilter([3, 5, 7, 9, 11, 13, 12, 14, 16, 18, 20], (pi / 4), ((3 * pi) / 4))
dftFilter([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], ((3 * pi) / 4), (2 * pi)
但是当我在这个上使用它时(注意数组的长度现在是11而不是10)
dftFilter([2, 4, 6, 7, 2, 11, 23, 12, 34, 21, 17], 0, 2 * pi)
它出错了
subscript indices must be either positive integers or logicals.
在线
filteredX(int)=X(int);
我试图在控制台中模拟这个过程。
X = [2, 4, 6, 7, 2, 11, 23, 12, 34, 21, 17];
lower=max(ceil((0/(2*pi))*length(X)), 1);
upper=floor((2*pi/(2*pi))*length(X));
filterexX=zeros(1,length(X));
for int=lower:upper;
filteredX(int)=X(int)
end
它工作正常。
PS:我正在使用Octave
答案 0 :(得分:3)
在循环中打印int
的值!您将看到它不是整数,因此您使用实数索引矩阵,而不是整数!