transceiver: mcbts: remove option to return prototype filter

There was an option to pass in a pointer holder in order to
return the prototype filter used to generate the polyphase
subfilters. This option was not particularly useful even for
test cases and was never used. Remove it for code simplicity.

Signed-off-by: Thomas Tsou <tom@tsou.cc>
transceiver: mcbts: shorten variable names for prototype filter

Reduce some of the longer variable for clarity and to shorten
line lengths. For example...

  protoFilterBase -> proto
  protoFilterLen -> protoLen

Signed-off-by: Thomas Tsou <tom@tsou.cc>
transceiver: mcbts:  use matching filter lengths for internal resampler

Remove the option for separate filter lengths between the channelizing
and resampling filterbanks. We need this change in order to setup
in-place FFTW transforms - which allows removal of interleavering
in to and out of the FFT calls. In the process, we can use shorter
variable names since we don't need to distinguish between resampling
and channelizing filter lengths.

Signed-off-by: Thomas Tsou <tom@tsou.cc>
transceiver: mcbts: rename polyphase subfilter variable names

Use the notion of subfilters instead of 'partitions'. Also
use name descriptions more specific to the subfilters since
the the filterbank I/O buffers will overlap with the fft
buffers for in-place (with stride count) transforms.

Signed-off-by: Thomas Tsou <tom@tsou.cc>
transceiver: mcbts: remove multipler buffer initializing

We memset multipler I/O buffers to zero during operation,
which are unnecessary. Initialize at start only.

Signed-off-by: Thomas Tsou <tom@tsou.cc>
transceiver: sigproc: add flag for FFTW aligned memory

Though underlying call most likely uses memalign(), however, use
the FFTW memory allocator when FFTW is used.

Signed-off-by: Thomas Tsou <tom@tsou.cc>
transceiver: sigproc: add subvector descriptors

Allow the explicit capability to create subvectors from a parent
vector. The descriptor struct is dynamically allocated, but the
buffer simply indexes into the parent vector. No data copies occur
when a subvector is created. Deallocation of the buffer data
remains with the parent vector.

Signed-off-by: Thomas Tsou <tom@tsou.cc>
transceiver: mcbts: perform fft operation non-contiguously

Set FFTW to run with a stride counts, which differ in input and
output sides. Because the FFT is preceded or followed by
convolving through a filterbank, we need to make sure that the
appropriate side has sufficient headroom for the convolution.
Therefore, different stride counts are used.

Definitive benchmarks remaing to be performendm but this
operation removes deinterleaving, interleaving, and memcpy
operations in and out of FFTW memory, so the reduction in I/O
is substantial.

Signed-off-by: Thomas Tsou <tom@tsou.cc>
transceiver: mcbts: explicitly handle inactive channels in resampler

Handle the degenerate case where no channels are active and return 0.
Also zero inactive channels when rotating through outputs. This presents
garbage from being dumped into FFTW, which may cause FFTW toreact poorly.

Signed-off-by: Thomas Tsou <tom@tsou.cc>
transceiver: mcbts: add third resampling stage

This resampling stage performs rate conversion of the device sample
rate to a multiple of the channelizer rate (400 kHz). The other
resampler stages are channelization to 400 kHz and the GSM specific
conversion a multiple of the 270.833 kHz symbol rate.

Benefits of this patch are the use of sample rates unsupported by
the device as well as selection of rates with minimal passband
distortion and out-out-band emissions. Desireable rates for
supported devices use decimation rates that are multiples of 4,
which causes both half band filters to be used in the FPGA. This
reduces CIC distortion and aliasing out-of-band.

Signed-off-by: Thomas Tsou <tom@tsou.cc>
transceiver: mcbts: increase precomputed resampler path length

Larger block sizes are more appropriate as sample rates increase.
Mainly targetting Gigabit Ethernet devices, increase the maximum
block length for use with aggregate bandwidths above 10 Msps.

Signed-off-by: Thomas Tsou <tom@tsou.cc>
transceiver: prevent complex naming conflict

The following typedef conflicts with the C99 complex definition.

  typedef Complex<float> complex

Rename the typdef to 'fcomplex' as simple way to avoid the
conflict and keep compilers happy.

Signed-off-by: Thomas Tsou <tom@tsou.cc>
transceiver: sigproc: use standard C99 complex floating point types

The original library design was indended to also support fixed point
types, which was simpler to implement using I and Q number pairs with
replacable underlying types.

There is no current motivation for fixed point support non-floating
point types so use built in C99 methods.

Signed-off-by: Thomas Tsou <tom@tsou.cc>