Octave(MATLAB):在某些输入上的函数错误



我为我的过滤器编写了以下函数

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的值!你会看到它不是一个整数,因此你索引矩阵,用一个实数,而不是一个整数!

最新更新