Частота — линейные ячейки в логарифмическом пространстве экрана

Я работаю над проектом, где мне нужно визуализировать спектральный анализ, чтобы установить некоторые точные параметры. Теперь я с преобразованием бинов в экранное пространство, потому что в линейном пространстве величины на более низких частотах сжимаются вместе. Вот мой код на C ++:

float windowSize = 640;
float windowHeight = 480;
for (size_t i = 0; i < bins; i++)
{
float m = audioIn.getSpectrum.at(i)*windowHeight;
float pos = i;
drawLine(vec2(pos, 0), vec2(pos, m));
}

Я пытался вычислить pos используя разные подходы, но с треском провалились. Мне не хватает важных знаний о логарифмах.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: это для личного арт-проекта, а не домашнее задание.

-1

Решение

Обычно спектрографы отображаются в логарифмическом масштабе по основанию 10.

Если предположить, bins в твоем случае иди от 0 Hz в nyquist Hz Вы можете попробовать что-то вроде этого (для звука 44,1 кГц):

float nyquist = 22050.0;
float logMax = log10(nyquist);
float log = log10((float)i * nyquist / (float)bins);
float pos = log / logMax * windowSize;
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]