|
|
|
@ -62,11 +62,6 @@ void ChannelBuffer::initBuffers(unsigned int blockSize, unsigned int overlapSize
|
|
|
|
|
cBInput.resize(mBlockSize * CIRCULAR_BUFFER_UPSAMPLE);
|
|
|
|
|
cBOutput.resize(mBlockSize * CIRCULAR_BUFFER_UPSAMPLE);
|
|
|
|
|
|
|
|
|
|
//fill input with half block size...
|
|
|
|
|
for (unsigned int k = 0; k < mBlockSize/2; k++) {
|
|
|
|
|
cBInput.write(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//temp vectors
|
|
|
|
|
input.resize(mBlockSize);
|
|
|
|
|
output.resize(mBlockSize);
|
|
|
|
@ -170,6 +165,11 @@ void DPFrequency::configure(size_t blockSize, size_t overlapSize,
|
|
|
|
|
|
|
|
|
|
fill_window(mVWindow, RDSP_WINDOW_HANNING_FLAT_TOP, mBlockSize, mOverlapSize);
|
|
|
|
|
|
|
|
|
|
//split window into analysis and synthesis. Both are the sqrt() of original
|
|
|
|
|
//window
|
|
|
|
|
Eigen::Map<Eigen::VectorXf> eWindow(&mVWindow[0], mVWindow.size());
|
|
|
|
|
eWindow = eWindow.array().sqrt();
|
|
|
|
|
|
|
|
|
|
//compute window rms for energy compensation
|
|
|
|
|
mWindowRms = 0;
|
|
|
|
|
for (size_t i = 0; i < mVWindow.size(); i++) {
|
|
|
|
@ -666,6 +666,11 @@ size_t DPFrequency::processLastStages(ChannelBuffer &cb) {
|
|
|
|
|
//##ifft directly to output.
|
|
|
|
|
Eigen::Map<Eigen::VectorXf> eOutput(&cb.output[0], cb.output.size());
|
|
|
|
|
mFftServer.inv(eOutput, cb.complexTemp);
|
|
|
|
|
|
|
|
|
|
//apply rest of window for resynthesis
|
|
|
|
|
Eigen::Map<Eigen::VectorXf> eWindow(&mVWindow[0], mVWindow.size());
|
|
|
|
|
eOutput = eOutput.cwiseProduct(eWindow);
|
|
|
|
|
|
|
|
|
|
return mBlockSize;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|