Skip to content

Latest commit

 

History

History
41 lines (32 loc) · 1.45 KB

RaisedCosineFilter.md

File metadata and controls

41 lines (32 loc) · 1.45 KB

Raised Cosine Filter

Overview

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.

Parameters

  • protoIQ: DspComplex[T] - prototype for IQ data
  • alpha: Double - bandwidth extension parameter for the filter
  • sampsPerSymbol: Int - number of samples per symbol (upsampling rate)
  • symbolSpan: Int - one-sided number of symbols the filter should span

Inputs

Decoupled interface

  • iq: Vec[DspComplex[T]] - width 1 vector of IQ samples
  • pktStart: Bool - packet start flag, unused
  • pktEnd: Bool - packet end flag, used to flush the filter

Outputs

  • iq: DspComplex[T] - IQ sample outputs

Tests

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 and sampsPerSymbol=1

TODOs

  • Reduce hardware by taking advantage of symmetric taps