VGAtoBaseband
VGAtoBaseband Release status: experimental [box doku] | |
---|---|
Description | use the VGA port to generate I/Q baseband signals |
Author(s) | siro |
Last Version | 0.1 () |
Platform | Evil Hack |
License | GPL |
Download | [1] |
Requirements
- PC with VGA adapter
- OpenGL with Direct Redering
- Vsync enabled
- Software-defined Radio Transmitter that generates I/Q Signals
- GL_ARB_fragment_program to use the low-pass filter
- GL_ARB_pixel_buffer_object for efficient CPU to GPU transfers
Linux
- Mesa 9.0 (other drivers are untested)
- X-server
Windows
- Windows XP doesnt work out of the box
- other OS are untested
- it is possible to add custom edids / modelines, but that's rather a hack
Software
This software generates analog I/Q Signals that can be feed into a rf-modulator.
The current version runs on any symbolrate, recommended are 5MSymbols/s or more.
You need to set the DAC clock to 7*desired MSymbols per second,because low pixel clocks might not work and high pixel clocks can be scaled down by using multiple pixel per Msymbol (here 7).
Every symbol is a complex number, that contains an I (real) and Q (imag) value.
By default the signal is lowpass filtered using convolutional sinc function. To edit the impulse response edit the file fragment.glsl.
The I/Q values are feed using a unix fifo / a file. 8 byte form two 32bit floats, the first float maps to I, the second to Q.
The values have to be between 0.0f and 1.0f.
The real part (I) is assigned to the RED and the imag part (Q) to the GREEN channel, while the BLUE channel is set to 0.5f.
8bit and 10bit VGA Graphic cards are supported.
xrandr
To do so use xrandr:
xrandr --newmode "MODE1" 64.00 1400 1400 1401 1401 700 700 702 702 -hsync -vsync xrandr --addmode VGA-0 "MODE1" xrandr --output VGA-0 --mode "MODE1" xrandr --output VGA-0 --right-of LVDS
note: VGA-0 may not apply, it could be VGA1 or VGA too, depending on the driver.
note: the last command assumes LVDS to be your primary active connector, change depending on your system.
Xorg.conf
Add a ModeLine to your Xorg.conf.
Section "Monitor" Identifier "SyncMaster" Option "VGA-0" HorizSync 30-96 VertRefresh 50-160 ModeLine "MODE1" 64.00 1400 1400 1401 1401 700 700 702 702 EndSection
EDID
You may use a custom edid, see here for more details HackingVGAforFun.
TODO
Linux: add support for xrandr auto mode setting.
Bandwidth
OFDM useful carriers to total carriers ratio: 1705 / 2048 = 0.832
DAC clock [Mhz] | Msymbols/s | carrier ratio | Bandwidth |
---|---|---|---|
64 | 9.14285 | 0.832 | 7.61 |
56 | 8.000 | 0.832 | 6.66 |
48 | 6.8571 | 0.832 | 5.71 |
Arguments
./vgatoiqbaseband inputfile [OPTIONS]
OPTIONS can be:
-nofilter disable fragmentshader -v be verbose -verbose be verbose -cutofright <n> cutof n rightmost pixels (hsync) default: 1 -cutofbottom <m> cutof m bottommost pixels (vsync) default: 2 -display DISPLAY Specify the X server to connect to. If not specified, the value of the DISPLAY environment variable is used. -geometry W x H + X + Y -direct force direct rendering
Libraries
- freeglut3-dev
- libglu1-mesa-dev
- libgl1-mesa-dev
- libxrandr-dev