Я хочу проанализировать сигнал, который я получаю из своего порта микрофона, используя portaudio
и fftwpp
. Для этого я следовал приведенному объяснению here. Мои вопросы по этому вопросу сейчас:
Там сказано, что я должен вырезать окно из входящих данных. Мои данные уже разбиты, после того, как я записываю только на короткое время, а затем обрабатываю их. Таким образом, я предполагаю, что прямоугольное окно уже применяется к моим данным. Это верно?
Теперь я получаю 200k точек данных, я должен непосредственно поместить их в массив:Дальнейшее понимание fftw обработки сигналов portaudio
Array::array1<Complex> F(np,align);
Array::array1<double> f(n,align); // For out-of-place transforms
// array1<double> f(2*np,(double *) F()); // For in-place transforms
fftwpp::rcfft1d Forward(n,f,F);
fftwpp::crfft1d Backward(n,F,f);
qDebug() << "Putting " << numSamples << " into an array!";
for(int i = 0; i < numSamples; i++)
f[i] = this->data.recordedSamples[i];
или я должен разделить их? Если я все помещу их в один массив, какое разрешение я получу тогда? Моя частота выборки установлена равной 44,1 кГц.
Должен ли я применить окно в каждом случае, даже если я не хочу, чтобы визуализировать данные? –
Ну, это зависит от приложения. Основная причина применения окна - уменьшить (или переместить) спектральную утечку (см. Https://en.wikipedia.org/wiki/Spectral_leakage). Это полностью зависит от приложения, если это необходимо. Говорят, если вы хотите визуализировать спектр, он не нужен. Если вам нужно проверить существование 1 частотной составляющей, это сделает прямоугольное окно. Не применяя ни одного окна, вы получаете практически те же результаты (при условии соблюдения правила 2^n-fft). – Stefan
Альтернативный подход упоминается здесь: http://stackoverflow.com/questions/4082358/improving-frequency-resolution-of-fft-output-by-limiting-frequency-range/4082676 – Stefan