190 #ifdef EIGEN_FFTW_DEFAULT
191 fftw_make_planner_thread_safe();
194 bool FirstStart =
true;
197 while(m_bIsRunning) {
198 if(m_pCircularBuffer) {
199 if(m_pCircularBuffer->pop(block)) {
202 if(m_dataLength < 0) m_dataLength = 10;
226 MatrixXd sum_psdx = MatrixXd::Zero(
m_iSensors,m_iFftLength/2+1);
232 for (
int n = 0; n<nb; n++){
237 for(qint32 jj=0; jj<m_iFftLength; jj++)
247 for(qint32 jj=0; jj<m_iFftLength; jj++)
252 for(qint32 i = 0; i < t_mat.rows(); i++){
258 RowVectorXd vecDataZeroPad = RowVectorXd::Zero(m_iFftLength);
259 vecDataZeroPad.head(data.cols()) = data;
261 for (qint32 lk = 0; lk<m_iFftLength; lk++)
262 vecDataZeroPad[lk] = vecDataZeroPad[lk]*m_fWin[lk];
265 Eigen::FFT<double> fft;
266 fft.SetFlag(fft.HalfSpectrum);
269 RowVectorXcd vecFreqData(m_iFftLength/2+1);
270 fft.fwd(vecFreqData,vecDataZeroPad);
273 for(qint32 j=0; j<m_iFftLength/2+1;j++)
275 double mag_abs = sqrt(vecFreqData(j).real()* vecFreqData(j).real() + vecFreqData(j).imag()*vecFreqData(j).imag());
276 double spower = (1.0/(m_Fs*m_iFftLength))* mag_abs;
277 if (j>0&&j<m_iFftLength/2) spower = 2.0*spower;
278 sum_psdx(i,j) = sum_psdx(i,j) + spower;
285 for(qint32 jj=0; jj<m_iFftLength/2+1; jj++)
286 t_psdx(ii,jj) = 10.0*log10(sum_psdx(ii,jj)/nb);
288 qDebug()<<
"Send spectrum to Noise Estimator";