Визуализация данных

Views: 1399


Частенько приходиться на дисплей выводить данные в виде графиков, так более наглядно можно проследить за процессом и проанализировать его. Для этого разберем простую функцию на Си для реализации такой визуализации.

Данные полученные при измерениях должны быть помещены в буфер CaptBuf[N] где N – размер буфера. предварительно надо указать размер дисплея для вывода данных и координаты нижнего левого угла расположения дисплея. Данные в буфере должны иметь формат signed int (16 бит -32768 … 32767 со знаком).

#define dispoX 60 // ширина окна
#define dispoY 32 // высота окна
#define startX 0 // координата X левый нижний угол окна
#define startY 0 // координата Y левый нижний угол окна

При вызове функции она извлекает количество данных (равных размеру дисплея dispoX) и преобразовывает их (если это необходимо) в одно полярное, а затем к диапазону 0-31, по высоте дисплея dispoY (в этом месте нет оптимизации, для других размеров придется подбирать значения деления и вводить постоянную смешения нуля). Преобразованные данные помещаем в массив BflyBuf[].

    for(a=0;a<dispoX;a++)
    {
         pr=CaptBuf[a]+32768;  // преобразование signed int -> unsigned int
         BflyBuf[a]= (pr>>11);  // перевести в однополярное значение в диапазоне 
    }

После это используя функции построение точки и линии на дисплее строим график из обработанных данных помещенных в массив BflyBuf[].

    // рисование графика
    for(a=0;a<dispoX-1;a++)
    {
        line(1, startX+a+1, startY, startX+a+1, startY+dispoY);// очистка следующего столбца дисплея
        if(abs(BflyBuf[a]-BflyBuf[a+1])>1)// если разность больше по модулю 1
        {
            if((a+1)<dispoX-1)line(0, startX+a, startY+BflyBuf[a], startX+a+1, startY+BflyBuf[a+1]);// рисовать линию
        }
        else
        {
            point(0, startX+a, startY+BflyBuf[a]); // рисовать точку
        }
    }

Пример работы функции для реализации визуализации аудио-данных в реальном времени.

 


Полный текст функции.

void oscilloscope (void)//Осцилограф
{
/*область индикации
 * dispX dispY
 * диапазон входного значения signed int -32768 … 32767
 * преобразовывается в значение 0-32
 * данные выводятся с позиции 0/0
 */
#define dispoX 60 // ширина окна
#define dispoY 32 // высота окна
#define startX 0 // координата X левый нижний угол окна
#define startY 40 // координата Y левый нижний угол окна
    unsigned int a,pr;
    for(a=0;a<dispoX;a++)
    {
         pr=CaptBuf[a]+32768;  // преобразование signed int -> unsigned int
         BflyBuf[a]= (pr>>11);  // перевести в однополярное значение в диапазоне 
    }
    line(1, startX, startY, startX, startY+dispoY);// очистка первого столбца дисплея
    // рисование графика
    for(a=0;a<dispoX-1;a++)
    {
        line(1, startX+a+1, startY, startX+a+1, startY+dispoY);// очистка следующего столбца дисплея
        if(abs(BflyBuf[a]-BflyBuf[a+1])>1)// если разность больше по модулю 1
        {
            if((a+1)<dispoX-1)line(0, startX+a, startY+BflyBuf[a], startX+a+1, startY+BflyBuf[a+1]);// рисовать линию
        }
        else
        {
            point(0, startX+a, startY+BflyBuf[a]); // рисовать точку
        }
    }
}


Это может быть интересно


  • Проект с использованием MCC часть 08Проект с использованием MCC часть 08
    Views: 1312 И так создадим проект в котором при помощи двух кнопок мы сможем управлять яркостью светодиодов. При использовании МСС у нас лафа полная, добрые дяди с Microchipa подготовили функции, …
  • Простой цифровой регулятор мощностиПростой цифровой регулятор мощности
    Views: 7830 Простой регулятор мощности с цифровой индикацией. Этот проект создан как обучающий, для ознакомления с основами построения сетевых регуляторов мощности. Устройства подобного типа можно использовать для управления освещением, скоростью …
  • Мультизоновый индикатор-терморегулятор ch-c3010Мультизоновый индикатор-терморегулятор ch-c3010
    Views: 1384 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре,  температуру на улице, а в погребе (или на балконе) …
  • Проблемы классической светомузыкиПроблемы классической светомузыки
    Views: 2200 Светомузыка – что это такое? Определение: Светомузыка  (жаргонное: цветомузыка)  — вид искусства, основанный на способности человека ассоциировать звуковые ощущения со световыми восприятиями. Такое явление в неврологии получило название …
  • Тестирование модуля генератораТестирование модуля генератора
    Views: 1001  Тестирование модуля генератора Настройка, запуск и проверка рабочей частоты на примере PIC18F26K40. PIC18F26K40 Чтобы понять из-за чего зависит производительность микроконтроллера просто надо понять как работает его задающий тактовый …
  • Стабилизатор тока для светодиодов SN3350Стабилизатор тока для светодиодов SN3350
    Views: 2799 SN3350 ближайший аналог ZXLD1350 Как собрать готовый вариант, читайте во второй части – http://catcatcat.d-lan.dp.ua/stabilizator-toka-na-sn3350-chast-2/ 40V  драйвер светодиодов с внутренним ключом  SN3350 – импульсный понижающий преобразователь, разработанный для того, чтобы эффективно управлять одним или …
  • ESP32-первое знакомствоESP32-первое знакомство
    Views: 7275 Музыкальная тема к статье, слушаем: Настало время познакомиться c ESP32 и для меня, для этого я приобрел в ГАММЕ отладочную плату с модулем ESP-WROOM-32 (ESP32-DevKitC). Первая задача, как …
  • Ссылки на интересные источникиСсылки на интересные источники
    Views: 991 Сбор 3D моделей от André L’Hérault конденсаторы, резисторы, индуктивности dropbox IPC-SM-782 Surface Mount Design and Land Pattern Standard Видео уроки по Altium designer Alexey Sabunin https://www.youtube.com/channel/UCG7N5CqXpyK8nQjr1EmMgng Сергей Булавинов https://www.youtube.com/channel/UCISAMXRnN_Qw9UTjUwZI1Jw Robert Feranec https://www.youtube.com/user/matarofe …
  • HVLD модуль на примере PIC24FJ128GA204HVLD модуль на примере PIC24FJ128GA204
    Views: 865 HVLD модуль представляет собой простое устройство, для контроля напряжения питания микроконтроллера или внешнего напряжения (через делитель). Его задача при “выходе” напряжения за заданные пределы сформировать сообщение микроконтроллеру, что …
  • Мультимедийная сеть – AVC-LAN TOYOTAМультимедийная сеть – AVC-LAN TOYOTA
    Views: 5924 AVC LAN – протокол обмена данными мультимедийных систем автомобиля. Кодирование данных. При кодировании различаться три типа данных : преамбула – её назначение, это сообщение устройствам на шине, что начинается передача данных. …



 

Поделись этим!