我有一个 2D 向量,我需要计算块内所有元素的总和(是的 - 我之前已经问过这个问题,但是,我需要进一步的帮助)..
基本上,在 MATLAB 中我得到的结果是:0.4259,而在 C++ 中我得到的结果是:1270.91。
首先,我按照以下算法(IN MATLAB)将矩阵(1D)拆分为块(600x200):
function f = block(v, N, M)
% N = 30 msec (600 samples)
% M = 10 msec (200 samples)
n = length(v);
maxblockstart = n - N + 1;
lastblockstart = maxblockstart - mod(maxblockstart-1 , M);
% Remove the semicolon to see the number of blocks
% numblocks = (lastblockstart-1)/M + 1
numblocks = (lastblockstart-1)/M + 1;
f = zeros(numblocks,N);
for i = 1:numblocks
for j = 1:N
f(i,j) = v((i-1)*M+j);
end
end
这在 C++ 中:
vector< vector<double> > Audio::something(vector<double>& theData, int N, int M)
{
int n = theData.size();
int maxblockstart = n - N;
int lastblockstart = maxblockstart - (maxblockstart % M);
int numblocks = (lastblockstart)/M + 1;
vector< vector<double> > subBlock;
vector<double> temp;
this->width = N;
this->height = numblocks;
subBlock.resize(600*187);
for(int i=0; (i < 600); i++)
{
subBlock.push_back(vector<double>());
for(int j=0; (j < 187); j++)
{
subBlock[i].push_back(theData[i*N+j]);
}
}
return subBlock;
}
这对我来说看起来非常好,我看不出它有什么问题。
现在求和,在 MATLAB 中:
len = length(blocks);
n = sum(size(blocks)) - len;
min = n+1;
max = 0;
for i = 1:n
currsum = abs(blocks(i,1:len));
end
f = currsum;
在 C++ 中:
vector<double> Audio::filter(vector<iniMatrix>&blocks, double sumThres, double ZeroThres)
{
int n = this->height;
int min = n+1;
int max = 0;
int length = blocks.size();
double currsum = 0;
for(int i=0; (i < 600); i++)
{
for(int j=0; (j < 187); j++)
{
currsum += abs(blocks[j][i]);
//currsum = currsum / 600;
//cout << abs(blocks[0][j]) << endl;
//cout << currsum << endl;
}
}
cout << currsum;
}
我似乎找不到哪里出错了。我正在按照算法精确到点,但不明白为什么数字如此之高。我在 MATLAB 中做了一些输出,发现了这个:
Columns 1 through 10
0.0013 0.0011 0.0010 0.0009 0.0012 0.0012 0.0012 0.0014 0.0016
0.0016
Columns 11 through 20
0.0017 0.0019 0.0018 0.0014 0.0011 0.0011 0.0012 0.0010 0.0010
0.0011
Columns 21 through 30
0.0011 0.0010 0.0009 0.0006 0.0005 0.0002 0.0003 0.0007 0.0008
0.0009
.. 这一直持续到 600(计数/显示 9 个值)。
这是否意味着 MATLAB 仅将这些值(每列 9 个值)求和 600 次?
我真的很困惑,希望有人可以帮助我:)!