Monday, 9 March 2015

Server Developments

Configuration over a LAN
Express Server Box

I continue to work on my remote TV system. DATV-Express and Odroid-C1 fit
nicely into a standard Hammond box (as can be seem in the bottom picture).
Above that is a Techno-Trend Connect S2-3600 DVB-S/S2 satellite receiver
which is now fully supported in the distribution of Linux that the Odroid runs.
Unfortunately the S2-3600 is no longer on sale but that is what happens in
the consumer electronics business. PC Linux tends to be behind the curve on
the devices it supports and ARM Linux is behind PC Linux.

The top picture is the configuration screen viewed on an iPhone 5. Before you
ask why the iPhone is so fat, it is because it is plugged into a FLIR IR camera body

I have yet to install a opto-isolator board into the server so I can do TX/RX and
band switching remotely. Also I have to add support for the receiver so I can
stream video across my LAN to various devices. I have some example code to
work from for the receive streaming so it shouldn't be too long before I have that
done.

I am awaiting arrival of a Black Magic HDMI capture card. I finally got around to
reading the manual for my Cannon Legria HF-S30 Camcorder so I now know how
to stop it going to sleep every few minutes.

I am hoping to get this all done so we can re-start TV activity in the Worthing area
soon. I would also like to start trialling HEVC (h.265) transmissions now that
the codec in ffmpeg has started to mature.


Tuesday, 17 February 2015

vMix

Live transmission using vMix

Transmitter graph
Windows Server Application
This picture shows DATV-Express transmitting a 4 MSymbol/sec signal all running
on Windows 8. The video mixing software is the free version of vMix  which is adding
a caption to the picture. The output is then sent via a directShow capture filter to a
filter graph which does the sound and vision encoding, it is then sent to DATV-Express
via UDP. The rather washed out picture is then being received on a Satlink receiver. It
is only washed out because of the difference in light between the two display screens
was too much for my still camera.
This example was done to show what is possible with a bit of imagination and is not
supported by the DATV-Express group.

The video capture in the picture above used a Logitech C920 webcamera.
vMix is capable of supporting many other devices and formats. The only other
input format I have tried so far is Firewire but that adds a 1/2 second delay. I am
looking at adding HDMI capture. 

The free version of vMix only supports 2 SD input capture devices but is useful for
the budget conscious Ham.

Tuesday, 10 February 2015

Gone to the dark side I have

Windows Streaming

Here is a screen shot of a Windows version of express_server. The orange and purple
window is a very basic filter graph taking input from a Logitech C920 web camera and
encoding it in MPEG2, then streaming it via UDP to DATV-Express using my new
Windows server. I am using GraphStudio rather than GraphEdit as the later is not
very stable on my PC. The Satlink receiver at the bottom right shows the received
picture. Most of the CPU load visible in the Windows task manager is down to the
MPEG2 encoding. This is mainly a proof of concept system which I only got working
this afternoon.

Thursday, 5 February 2015

Digital Pre-Distortion, express_server and the Zedboard

A number of projects are ongoing here. With the help of Rob M0DTS
I have been investigating DPD or Digital Pre-distortion.
This is a method of pre-distorting a signal to compensate for the distortion
introduced by the power amplifier and in theory can have a huge effect on
the IMD performance of an amplifier. Our initial tests involved
using a SkySpy SDR to monitor the output of the amplifier and then
pre-distorting the transmitted signal inside the DATV-Express FPGA.
We only corrected for the AM/AM distortion (no phase correction),
The best we were able to achieve was around a 10 dB improvement.
This is well short of what is possible.

Having read an appnote from the guys that gave you MATLAB it became
obvious that it would be necessary to correct for phase and for memory effects.
The approached I had used with the Express board would not have been feasible
to use anymore. The reason being a lot of information has to passed about
in hard realtime to make the corrections possible. The system needs to
continuously track the transmitted signal and make fine adjustments it also
has to remember what was previously transmitted as that too can effect the
amplifier's current transfer characteristic. For more information have a look
at these files Mathworks DPD

I have been looking for a reason to use the MyriadRF board I have and to play
with the new generation of FPGA SOCs. I have now started to move towards
Xilinx parts mainly because of the large amount of free IP available from them.
I was able to buy at a good price a Zedboard on eBay.

So far I have done a bare metal tutorial on the Zedboard (flashing some LEDs
under control of an ARM core). I have installed FreeRTOS on the board and
more recently PetaLinux (Xilinx's own version of Linux).

I am now working on a BSP (Board Support Package) customised for use with
the MyriadRF/Clipper board. The idea is to produce a proof of concept system
for investigating what if anything will replace DATV-Express.

I was dreading having to write a load of code to program the hundreds of registers
in the Lime Microsystems devices but I see there is now an open source project
up and running to provide libraries to do just that. The libraries are aimed at the
LMS7002M chip rather than the 6002 I have but they are very similar.

If this ever went into production it would probably use the MicroZed SOM
and a bespoke carrier board.

Going back to DATV-Express a number of people have been able to use the
DATV-Express server code project I placed on Github. This is just a basic
DVB-S transmitter that accepts a transport stream either via stdin or UDP.
The feedback I have received form various people has been of great help in fixing
bugs and making improvements. I am also pleased to see that a number of people
plan to publish what  they have done. Amateur radio is about self learning so it
makes my efforts seem worthwhile when other use or improve on what I have done.
  

Friday, 26 December 2014

Playing with GPIB

Currently I am trying EZGPIB to do automated measurements, above is my
first attempt at measuring the output vs input in 1 dB steps of a 2m RF
brick RA06H1317M, the y axis is power in dBm. The yellow line is what it
should be and the blue line is what the amplifier actually produces.

Saturday, 20 December 2014

Initial 146.5 MHz DVB-S exciter tests

333KS/s 10 MHz BW
333KS/s 2 MHz BW
333KS/s 1 MHz BW

I thought I would share with you some initial tests of DATV-Express operating
at 146.5 Mhz. This is the exciter only, I will post some results of it combined
with a G.H Engineering brick based PA in a few days. These were taken with a
Rigol spectrum analyser. There was no additional filtering on the output.

The new FPGA code uses a x64 interpolater, it will only operate between about
100K and 400KS/s but this should be fine for the 2m DATV tests.

I was able to lock to the signal with an MER of around 28 using Tutioune with a
TT-Budget S2-1600 card. Work progresses on developing a matching
Software Receiver.  

Monday, 1 December 2014

CUDA + SDR





Not having blogged for a while I thought I better do an update.
I have a number of projects on the go, one of the latest is using
NVIDIA's CUDA to do Software Defined Radio (SDR). I know
there is nothing too original about this but I wanted to learn how to
use CUDA and I thought SDR would be a place to start.

In the first picture you can see a waterfall of the 2 m band in a
Qt application,  it uses OpenGL and CUDA.
There is not much to see, just some APRS. I am currently working
on the software digital down converters. Using the various memory
resources on the NVIDIA card needs careful planning to obtain
maximum acceleration. I am expecting to be able to have at
least 10 receiver channels running on the card. I have some other ideas
for this Parallel computer like PAPR reduction in DVB-T2.

The SDR I am using is an Ettus research B200 which has a USB3
interface between itself and the P.C. The B200 operates from about
50 MHz to 6 GHz. With about a 32 MHz BW. I put mine in a
Hammond 1455L1601 box as it comes without a case.

The Graphics card I am using is a GTX 680 with 1536 CUDA cores. I am
planning to upgrade that to a GTX 690 which has twice as many cores.
The 690 is actually 2 GTX 680s on one card and appears as two
compute devices. Fortunately as these cards are aimed at the Gamer market
and high end Gamers like to have the best gear so the price of last generation
cards on the used markets is very reasonable. I found Gum Tree to be
a better place to buy them rather than eBay.

NVIDIA have just announced their Pascal chips with NVLINK which
will provide a quantum leap in performance. Those cards will be available
in 2016. They stack memory and CPU wafers on top of one another and
interconnect using Silicon vias. They will also allow much faster
communication with the host CPU through a shared memory interface.
Even with PCIe v 3 the global memory interface between the motherboard
and the GPU is the main bottle neck.

NVIDIA and partners like IBM are working hard to bring this technology
to other programming environments like Java and Python. They are also
providing application specific libraries for things like Deep Learning
Neural Networks. Maybe one day I will have a Neural Network to work
DX for me while I code.

Well that is it for now, back to my CUDA 6.5 programming / learning.