Plotting Signals
Here are a few simple utilities to convert raw datafiles into
a format you can read and plot w/ gnuplot.
raw2num.c - converts a file of 16 bit shorts into a numerical
human readable file with an index. Used for files created with
gr.file_sink (gr.sizeof_short, "datafile")
Usage $./raw2num <input_file> <output_file> <offset> <number_of_numbers>
raw2num_f.c - converts a file of 4-byte floating point numbers into
a numerical form with an index.
raw2num_fc.c - converts a file of 4-byte float complex pairs into
numerical form.
sign2unsigned.c - converts a signed short file, numbers in the range of -32768 to +32767, to unsigned 0-65535, with the former 0 at 32768+bias. For example, my ADC creates numbers from 0-4095 with signal zero at 2048. When I create a signal file with gnuradio I can convert from it's signed format to unsigned with the 0 level at 2048.
New: To view complex data in 3D form try 'splot' in gnuplot.
gnuplot>set xrange[0:50]
gnuplot>splot "complex_mag_num"
Then click and drag to rotate and look at the corkscrew from different angles.
Usage - start gnuplot. At the gnuplot> prompt type
gnuplot>plot "file"
will display the converted short or float file. Change the x-axis range
with
gnuplot>set xrange [0:512]
gnuplot>plot "file"
For example, to use gnuplot like an oscilloscope for dial_tone.py, a
version which adds both 350 & 440 hz into one channel
Briefly run $./dial_tone_2.py and hit enter to stop it. There will be
a data file "dial_tone.dat" of float data. Convert to numerical with
$./raw2num_f dial_tone.dat dial_tone.num 0 65536
then display with gnuplot.
$gnuplot
gnuplot>plot "dial_tone.num"
and get a display like this:
Finally focus on a small area of the waveform with
gnuplot>set xrange [0:2000]
gnuplot>plot "dial_tone.num"
and get a plot like this:
For complex float output your have to run gnuplot with 'using'. For
example, this program creates a complex signal
Run this briefly and get a complex float data file dial_tone_c.dat. Convert to numerical with
$./raw2num_fc dial_tone_c.dat dial_tone_c.num 0 65536
Then plot with
$gnuplot
gnuplot>set xrange [0:1000]
gnuplot>plot "dial_tone_c.num" using 1:2, "dial_tone_c.num" using 1:3
That creates one plot using columns 1 and 2, the imaginary part of the complex signal, and another plot using columns 1 and 3, the real part, so you get a plot like this:
Notice the 90 degree phase shift between the real and imaginary plots. Change the frequencies to negative in the above script, repeat and notice the change in phase to this