VGAtoBaseband: Unterschied zwischen den Versionen
Siro (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
Siro (Diskussion | Beiträge) K (clarify libs to use, added debian packages, added description field) |
||
Zeile 12: | Zeile 12: | ||
|download = [https://www.das-labor.org/trac/browser/host-apps/VGAtoIQBaseband] | |download = [https://www.das-labor.org/trac/browser/host-apps/VGAtoIQBaseband] | ||
}} __NOTOC__ | }} __NOTOC__ | ||
== Description == | |||
This software generates analog I/Q Signals that can be feed into a rf-modulator. | |||
This software is intended to be used with [[SDRT]]. | |||
== Requirements == | == Requirements == | ||
Zeile 34: | Zeile 38: | ||
== Software == | == Software == | ||
The current version runs on any symbolrate, recommended are 5MSymbols/s or more.<br> | The current version runs on any symbolrate, recommended are 5MSymbols/s or more.<br> | ||
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 symbol (here 7). | 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 symbol (here 7). | ||
Zeile 97: | Zeile 100: | ||
== Libraries == | == Libraries == | ||
* libglut | |||
* libglu | |||
* libgl | |||
* libxrandr | |||
''You may also use'' | |||
* libX11 | |||
'''Debian packages:''' | |||
* freeglut3-dev | * freeglut3-dev | ||
* libglu1-mesa-dev | * libglu1-mesa-dev |
Version vom 9. März 2013, 16:29 Uhr
VGAtoIQBaseband Release status: experimental [box doku] | |
---|---|
Description | use the VGA port to generate I/Q baseband signals |
Author(s) | siro (siro) |
Last Version | 0.1 () |
Platform | Linux |
License | GPL |
Download | [1] |
Description
This software generates analog I/Q Signals that can be feed into a rf-modulator. This software is intended to be used with SDRT.
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
What it does
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
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 symbol (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.
vgatobaseband uses the first VGA output found. If none is found it terminates.
The VGA output has to be configured first using xrandr, arandr, ....
The coordinates are saved, a new modeline is added and set. On termination the modeline is removed and the initial mode is restored.
No need to do any modesetting by hand !!!
Make sure you copy fragment.glsl into the same directory as the compiled binary.
All baseband signals contains positive as well as negative numbers. If your signal range covers -1.0f to 1.0f you have to convert them.
newval = (float2)(oldval.i/2 + 0.5f, oldval.q/2 + 0.5f)
The newval is now in range 0.0f to 1.0f and can be used with this programm.
Due to most GPU only having 8bit DACs the floats are converted into a range from -127 to 127 (using the blue channel as differential reference).
A hardware low-pass filter is required.
Examples
./vgatoiqbaseband /tmp/myfifo -v -msps 56 -cutofright 0 -cutofbottom 0
This will read from the file /tmp/myfifo, pixelclk is 56Mhz, it will output 56/7 = 8 MSPS, set HSYNC to 0 and VSYNC to 0.
0 VSYNC might only work on Intel GPU.
./vgatoiqbaseband -v -t
This will generate test paterns, pixelclk is 64Mhz, it will output 64/7 = 9.142 MSPS, set HSYNC to 1 and VSYNC to 2.
It might work on all GPUs.
You should set the VGA position first ! otherwise it will overlay your default output (clone mode).
xrandr --output VGA-0 --right-of LVDS --auto
adjust VGA-0 and LVDS according to your system.
Arguments
./vgatoiqbaseband inputfile [ARGS]
if inputfile isn't specified, use -t argument
ARGS could 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. -direct force direct rendering -t generates test patterns -pclk <x> use a pixelclock of x Mhz default: 64
Libraries
- libglut
- libglu
- libgl
- libxrandr
You may also use
- libX11
Debian packages:
- freeglut3-dev
- libglu1-mesa-dev
- libgl1-mesa-dev
- libxrandr-dev
OFDM 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 |
TODO
- Windows modesetting support
- You may use a custom edid, see here for more details HackingVGAforFun.