У меня есть программа, которая отображает аудио визуализации с использованием FFT. Данные, которые я получаю от БПФ, преобразуются в децибелы и взвешиваются.Интерполяция данных с динамическим размером
Эти данные впоследствии будут нанесены дает аналогичный результат этого:
Проблема у меня в том, что я хочу, чтобы иметь возможность выбрать, какой частотный диапазон отображения баров, а также как количество баров, отображающих данные.
Скажем, я хочу обратить 100-1500Hz и отображать эти данные на 256 баров, я получаю индексы этих частот с этой формулой:
(int)(desiredFrequency/(samplerate/FFTsize/2.0)); // samplerate usually 44100Hz, and FFTsize can vary, but in my case 2048
можно затем легко подключить значения и получить мой индекс -изменять из массива децибел.
В этом примере мой начальный индекс будет 100/(44100/2048/2)
округленным вниз, что дает мне 9. Индекс конца будет 1500/.... = 140 (я округлю здесь, так как хочу убедиться, что частота присутствует) ,
public float[] Interpolate(float[] inData)
{
int upperFrequencyIndex = 140;
int lowerFrequencyIndex = 9;
int barCount = 256;
int count = upperFrequencyIndex - lowerFrequencyIndex;
float[] data = inData.Skip(lowerFrequencyIndex).Take(count).ToArray();
// now I have the desired range in a float array. This is the decibel data which will be interpolated.
float[] outData = new float[barCount];
// and here is the array which will hold the interpolated data.
// ????
return outData;
}
Обратите внимание, что barCount > count
что означает, что больше полос на каждую точку данных и что соотношение между ними почти всегда не быть целым числом. Следует отметить, что могут быть сценарии, где barCount < count
, что только добавляет к моей уже обширной головной боли.
Как можно вычислить интерполяцию с помощью двух изменяющихся размеров-массивов (один из которых является диапазоном от данных децибела, а другой - числом баров, которые также могут меняться. Оба из них, однако, представляют собой массив с плавающей точкой)
Некоторые указатели в правильном направлении в любой форме будут действительно оценены здесь. Мой разум просто этого не понимает.
Привет @rbarryyoung, я получаю, что мне нужно взять среднее значение между двумя числами в моем децибельном массиве и подключить их к выходу. Хотя я не понимаю, как это будет работать, когда количество элементов в массиве децибел, деленное на количество баров, не является целым числом.Я уточню свой вопрос с дополнительной информацией о том, что я имею в виду. – Tokfrans