倍频程(MATLAB):某些输入的函数错误
我为过滤器编写了以下函数倍频程(MATLAB):某些输入的函数错误,matlab,octave,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)
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)
它给出了一个错误
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:我正在使用倍频程打印
int
的值,在你的循环中!您将看到它不是整数,因此您使用实数而不是整数来索引矩阵 max(0,1)不是给出了1而不是0吗?我读了KudayarPirimbaev的代码,但我犯了一个错误。对不起,我没有赶时间投票否决我不是办法,先给我提建议,如果我没有表现出任何努力,那么就投票否决我吧!:)@KudayarPirimbaev您在第一个块中的代码和在线执行的代码中缺少一些括号!让我们
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