# HG changeset patch # User Chris Cannam # Date 1383562489 0 # Node ID 3973be8293526bf343549508ba9d108f9aa10e43 # Parent 4f2f28d5df5883e66c5d3fd884ba2b411033affc Keep the kernel dense for the moment, and use std::complex diff -r 4f2f28d5df58 -r 3973be829352 cpp-qm-dsp/CQKernel.cpp --- a/cpp-qm-dsp/CQKernel.cpp Fri Nov 01 17:58:39 2013 +0000 +++ b/cpp-qm-dsp/CQKernel.cpp Mon Nov 04 10:54:49 2013 +0000 @@ -11,6 +11,7 @@ #include using std::vector; +using std::complex; using std::cerr; using std::endl; @@ -107,44 +108,28 @@ int firstNZ = -1, lastNZ = -1; + vector > row; + for (int j = 0; j < m_p.fftSize; ++j) { - if (sqrt(rout[j] * rout[j] + iout[j] * iout[j]) >= thresh) { - lastNZ = j; - if (firstNZ < 0) firstNZ = j; + if (sqrt(rout[j] * rout[j] + iout[j] * iout[j]) < thresh) { + row.push_back(complex(0, 0)); } else { - rout[j] = iout[j] = 0; + row.push_back(complex(rout[j], iout[j])); } } - vector rnz, inz; - - if (firstNZ >= 0) { - for (int j = firstNZ; j <= lastNZ; ++j) { - rnz.push_back(rout[j] / m_p.fftSize); - inz.push_back(iout[j] / m_p.fftSize); - } - m_kernel.offsets.push_back(firstNZ); - } else { - m_kernel.offsets.push_back(0); - } - - m_kernel.real.push_back(rnz); - m_kernel.imag.push_back(inz); + m_kernel.row.push_back(row); } } - assert((int)m_kernel.offsets.size() == m_p.binsPerOctave * m_p.atomsPerFrame); - assert((int)m_kernel.real.size() == m_p.binsPerOctave * m_p.atomsPerFrame); - assert((int)m_kernel.imag.size() == m_p.binsPerOctave * m_p.atomsPerFrame); + assert((int)m_kernel.row.size() == m_p.binsPerOctave * m_p.atomsPerFrame); // print density as diagnostic int nnz = 0; - for (int i = 0; i < m_kernel.offsets.size(); ++i) { - assert(m_kernel.real[i].size() == m_kernel.imag[i].size()); - for (int j = 0; j < m_kernel.real[i].size(); ++j) { - if (m_kernel.real[i][j] != 0.0 || - m_kernel.imag[i][j] != 0.0) { + for (int i = 0; i < m_kernel.row.size(); ++i) { + for (int j = 0; j < m_kernel.row[i].size(); ++j) { + if (m_kernel.row[i][j] != complex(0, 0)) { ++nnz; } } diff -r 4f2f28d5df58 -r 3973be829352 cpp-qm-dsp/CQKernel.h --- a/cpp-qm-dsp/CQKernel.h Fri Nov 01 17:58:39 2013 +0000 +++ b/cpp-qm-dsp/CQKernel.h Mon Nov 04 10:54:49 2013 +0000 @@ -3,6 +3,7 @@ #define CQ_KERNEL_H #include +#include class FFT; @@ -32,9 +33,7 @@ FFT *m_fft; struct KernelMatrix { - std::vector offsets; - std::vector > real; - std::vector > imag; + std::vector > > row; }; KernelMatrix m_kernel;