Я должен сказать, что нашел ваш вопрос очень загадочным. Я думаю, что вы должны посмотреть на кратковременное преобразование Фурье. Причина, по которой я это говорю, заключается в том, что вы смотрите на довольно большое количество выборок, если используете частоту дискретизации 44,1 кГц в течение 2 минут с 2 каналами. Один FFT на всю сумму действительно займет довольно много времени, не говоря уже о том, что оценка будет смещена, так как среднее значение сигналов и дисперсия будут сильно меняться в течение всей продолжительности. Чтобы избежать этого, сначала необходимо сформировать сигнал во временной области, эти кадры могут быть размером от 20 мс до 40 мс (обычно используется для речи) и часто перекрываются ( Уэлч-метод спектральной оценки ). Затем вы применяете оконную функцию, такую как окно Хэмминга или Хеннинга, чтобы уменьшить спектральную утечку и вычислять N-точечное fft для каждого кадра. Где N - следующая степень двух выше числа выборок в этом кадре.
Например:
- Fs = 8 кГц, одноканальный;
- время = 120 с;
- no_samples = time * Fs = 960000;
- длина кадра T_length = 20 мс;
- длина кадра в выборках N_length = 160;
- перекрытие кадра T_overlap = 10 мс;
- перекрытие кадров в выборках N_overlap = 80;
- Num кадров N_frames = (no_samples - (N_length-N_overlap)) / N_overlap = 11999;
- длина БПФ = 256;
Таким образом, вы будете обрабатывать в общей сложности 11999 кадров, но длина вашего БПФ будет небольшой. Вам понадобится только БПФ длиной 256 (следующая степень двух выше длины кадра 160). Большинство алгоритмов, которые реализуют БПФ, требуют, чтобы длина сигнала и длина БПФ были одинаковыми. Все, что вам нужно сделать, это добавить нули к вашему кадрированному сигналу до 256. Поэтому дополняйте каждый кадр x количеством нулей, где x = FFT_length-N_length. Мое последнее приложение для Android делает это на записанной речи и использует краткосрочные данные БПФ для отображения спектрограммы речи, а также выполняет различные спектральные модификации и фильтрацию, которая называется Улучшение речи для Android