Octave(MATLAB):某些输入的功能出错

时间:2014-05-16 23:00:49

标签: matlab octave

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

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

1 个答案:

答案 0 :(得分:3)

在循环中打印int的值!您将看到它不是整数,因此您使用实数索引矩阵,而不是整数!