我为我的过滤器编写了以下函数
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在循环中打印int
的值!你会看到它不是一个整数,因此你索引矩阵,用一个实数,而不是一个整数!