基本上,我有最后一段代码可以从 MatLab 转换为 C++。
该函数接收一个 2D 向量,然后根据 2 个标准检查 2D 向量的元素,如果不匹配,则删除块。但我对 MatLab 中的代码想要返回的内容感到困惑,是 2D 还是 1D 向量?这是代码:
function f = strip(blocks, sumthresh, zerocrossthresh)
% This function removes leading and trailing blocks that do
% not contain sufficient energy or frequency to warrent consideration.
% Total energy is measured by summing the entire vector.
% Frequency is measured by counting the number of times 0 is crossed.
% The parameters sumthresh and zerocrossthrech are the thresholds,
% averaged across each sample, above which consideration is warrented.
% A good sumthresh would be 0.035
% A good zerocrossthresh would be 0.060
len = length(blocks);
n = sum(size(blocks)) - len;
min = n+1;
max = 0;
sumthreshtotal = len * sumthresh;
zerocrossthreshtotal = len * zerocrossthresh;
for i = 1:n
currsum = sum(abs(blocks(i,1:len)));
currzerocross = zerocross(blocks(i,1:len));
if or((currsum > sumthreshtotal),(currzerocross > zerocrossthreshtotal))
if i < min
min = i;
end
if i > max;
max = i;
end
end
end
% Uncomment these lines to see the min and max selected
% max
% min
if max > min
f = blocks(min:max,1:len);
else
f = zeros(0,0);
end
或者,与其返回另一个向量(无论是 1D 还是 2D),不如实际发送向量的内存位置并从中删除块?所以例如..
for(unsigned i=0; (i < theBlocks.size()); i++)
{
for(unsigned j=0; (j < theBlocks[i].size()); j++)
{
// handle theBlocks[i][kj] ....
}
}
另外,我不明白这一行:
currsum = sum(abs(blocks(i,1:len)));
基本上是:(i,1:len)
有任何想法吗?谢谢 :)