Skip to content

Instantly share code, notes, and snippets.

@drmpeg
Last active April 26, 2022 14:33
Embed
What would you like to do?
How to create high quality gr-paint images.

High Quality Spectrum Painting

A quick tutorial on how to get high quality images from gr-paint and Gqrx.

Spectrum Example

Setup

  • Use a newer version of Gqrx with Ref. level and dB range sliders.
  • Set the FFT size in Gqrx to 32768
  • Set the waterfall rate to 50 or 60 fps

Calibration

  • Transmit the supplied ramp.bin file.
  • Adjust the Ref. level and dB range sliders so that the test pattern lowest level bar is at black or near black and the highest level bar is at bright yellow.

Calibration Example

Calibration Example

Black and white waterfall hack

Note: The black and white waterfall hack has been included in Gqrx version 2.12.1 and after as the "White Hot Compressed" Colormap option in the FFT Settings tab.

  • In the file gqrx/src/qtgui/plotter.cpp, make the following change.
    // default waterfall color scheme
#if 0
    for (int i = 0; i < 256; i++)
    {
        // level 0: black background
        if (i < 20)
            m_ColorTbl[i].setRgb(0, 0, 0);
        // level 1: black -> blue
        else if ((i >= 20) && (i < 70))
            m_ColorTbl[i].setRgb(0, 0, 140*(i-20)/50);
        // level 2: blue -> light-blue / greenish
        else if ((i >= 70) && (i < 100))
            m_ColorTbl[i].setRgb(60*(i-70)/30, 125*(i-70)/30, 115*(i-70)/30 + 140);
        // level 3: light blue -> yellow
        else if ((i >= 100) && (i < 150))
            m_ColorTbl[i].setRgb(195*(i-100)/50 + 60, 130*(i-100)/50 + 125, 255-(255*(i-100)/50));
        // level 4: yellow -> red
        else if ((i >= 150) && (i < 250))
            m_ColorTbl[i].setRgb(255, 255-255*(i-150)/100, 0);
        // level 5: red -> white
        else if (i >= 250)
            m_ColorTbl[i].setRgb(255, 255*(i-250)/5, 255*(i-250)/5);
    }
#else
    for (int i = 0; i < 256; i++)
    {
        if (i < 64)
        {
            m_ColorTbl[i].setRgb(i*4, i*4, i*4);
        }
        else
        {
            m_ColorTbl[i].setRgb(255, 255, 255);
        }
    }
#endif
  • Note that the levels will be compressed, so the waterfall will need to be re-calibrated.

Calibration Example Black and white

  • High contrast images work best, especially drawings.

High Contrast Example

High Contrast Example

High Contrast Example

High Contrast Example

High Contrast Example

High Contrast Example

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment