Josh Sanz [email protected]
The raised-cosine filter implements a direct-form FIR filter with parametrically generated taps. The addition is implemented as a tree-reduce to reduce the critical path length.
The filter convolves the time-domain RC filter with incoming data. The taps are generated by the equation
h[n] = (sinc(n/T) * cos(pi * alpha * n / T)) / (1 - (2 * alpha * n / T)^2)
Although the filter taps are symmetric and real, which would let only half of them be held in hardware, all are used. A future version could reduce the size of hardware by intelligently using the symmetry.
protoIQ: DspComplex[T]
- prototype for IQ dataalpha: Double
- bandwidth extension parameter for the filtersampsPerSymbol: Int
- number of samples per symbol (upsampling rate)symbolSpan: Int
- one-sided number of symbols the filter should span
Decoupled interface
iq: Vec[DspComplex[T]]
- width 1 vector of IQ samplespktStart: Bool
- packet start flag, unusedpktEnd: Bool
- packet end flag, used to flush the filter
iq: DspComplex[T]
- IQ sample outputs
sbt test
The tests include:
- Whether the filter has the correct impulse response
- Whether the filter responds correctly to multiple samples being fed through
- Whether the filter leaves data unchanged when
alpha
=0 andsampsPerSymbol
=1
- Reduce hardware by taking advantage of symmetric taps