/** This actor implements an FIR filter with a raised cosine waveform. @author JWJ */ actor RaisedCosine (Double excessBW = 1.0, Integer length = 64, Boolean root = false, Integer interpolation = 1, Integer symbolInterval = 16) Double Input ==> Double Output : invariant excessBW >= 0, length > 0 end Integer phaseLength = length / interpolation; List[Double] taps = GenerateRaisedCosineSampleWave(length, (length * 0.5), root, symbolInterval, excessBW); List[List[Double]] phasedTaps = [ [taps[(phaseLength - i) * interpolation + phase] : for Integer i in Integers(1, phaseLength)] : for Integer phase in Integers(0, interpolation - 1) ]; List[Double] data := [0 : for Integer i in Integers(1, phaseLength)]; action [a] ==> [out] repeat #out var List[Double] out := [collect(0, Add, combine(Multiply, phasedTaps[phase], data)) : for Integer phase in Integers(0, interpolation - 1)] do data := [data[i] : for Integer i in Integers(1, phaseLength-1)] + [a]; end end