我已經給出了一個MATLAB函數,它接受一維矢量和兩種尺寸,然後該函數將數據拆分成塊並最終將它們存儲在二維矢量中。我一直在編寫這個函數的C++版本,但是我的C++函數的結果(不正確)與MATLAB函數的(正確)結果不匹配。將矢量拆分成塊 - 奇怪的結果
Matlab的功能:
function f = block(v, N, M)
% This function separates the vector
% into blocks. Each block has size N.
% and consecutive blocks differ in
% their starting positions by M
%
% Typically
% 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) = ((i-1)*M+j);
end
end
對於這個例子的目的,我只是輸出的((I-1)* M + j)的結果及其在Matlab中我得到這些結果(例如) :
1 201 401 601 .. 1001 1201 1401 .. .. .. 1601 1801
這是我的C++函數:
vector<iniMatrix> Audio::subBlocks(vector<float>& theData, int N, int M)
{
// This method splits the vector into blocks
// Each block has size N.
// and consecutive blocks differ
int n = theData.size();
int maxblockstart = n - N+1;
int lastblockstart = maxblockstart - mod(maxblockstart-1, M);
int numblocks = (lastblockstart-1)/M + 1;
vector<float> subBlock;
vector<iniMatrix> block;
for(int i=1; (i < numblocks); i++)
{
for(int j=1; (j < N); j++)
{
cout << ((i-1)*M+j);
}
}
return block;
}
結果予從該得到:
1 2 3 4 .. 7 8 9 .. 13 14 15等。
P.S.
iniMatrix僅僅是浮動的載體的typdef ..
另注,變量:
ň
maxblockstart
lastblockstart
numblocks
所有在MATLAB程序和相同的值C++,所以我覺得它的東西做的for循環..
任何人有什麼建議?
只是一個想法:在MATLAB中的向量的第一個元素的索引爲 '1',但在C++中的第一個元素,例如數組的索引爲'0'。所以也許你可以嘗試開始for循環爲零。 –
@ S.C.Madsen嘿,我試過了,沒有運氣!這是奇怪的,一切都有相同的價值,除了我真的需要大聲笑我* M + j :(! – Phorce
「*我** **字面**嘗試了一切。*」 - 我不認爲這意味着你我認爲它的意思 –