DSP stuff
I am working on DSP (Digital Signal Processing).
As a proof of concept, I generated a number of trivial but interesting
data sets and plotted them with gnuplut as 640x480 PNG files.
Then I generated some impulse charts for various
filter functions, and plotted them in gnuplot as PNG files.
Then I convolved the data sets with the filter functions
and plotted the results in gnuplot.
The point is, this worked, and I put it here mostly when I
was asking for advice. At some point, I'll do something interesting
with this.
Lately I've been decoding sub-audible tones and paging tones used
to control 2-way radio equipment. My friends own a radio shop and
sometimes need to know what control tones are being used by various
systems. I'll post the PERL code later. I have code to rip wav
files apart, to renormalize the data with a lower sampling rate,
to generate tones for test purposes and to analyze the frequencies
present in the data with a variety of transforms. It turns out the
de-rigeur FFT is a poor choice for this particular task. I ended
up using a "goertzal transform" which worked nicely. A FFT can
take a chunk of N samples, determine the average energy of log2(N)
equally spaced tones within the data, in Nlog2(N)units of time.
A goertzal transform can take N samples, and look for the average
energy of one tone, in N units of time. If you are looking for less
than log2(N) tones, or if those tones are not equally spaced, you
are going to save time and have a more precise result with a goertzal
transform. A goertzal transform is simply a function to determine the
correlation between a data set representing a sampled tone, and a
data set containing a sine wave of a single tone.
- sin2 - A "high frequency" sin wave superimposed over a "low frequency" sin wave.
The point of this example was to "filter" out the "high frequency"
- The lowpass filter
- result of convolving sin2 about lowpass (sin2*lowpass)
Note that most of the high frequency is gone.
- slope of out2.png (convolve out2.dat * discrete_derivative)
This graph is just a plot of the slope of the previous
graph. I wanted to see my convolution function work on
something else.