If I instantiate in Matlab a filter, a vector, and use them in the following way:
vector = (complex(randn(1,k), randn(1,k)))';
filt = comm.RaisedCosineTransmitFilter('RolloffFactor',sdrqpsktx.RolloffFactor,'FilterSpanInSymbols',sdrqpsktx.RaisedCosineFilterSpan,'Gain',1,'OutputSamplesPerSymbol',sdrqpsktx.Interpolation)
comm.RaisedCosineTransmitFilter with properties:
Shape: 'Square root'
RolloffFactor: 0.5000
FilterSpanInSymbols: 10
OutputSamplesPerSymbol: 2
Gain: 1
output = filt(vector);
output
will be a k*2 x 1
complex double. This is because of the OutputSamplesPerSymbol
setting. The documentation on this function states that
The raised cosine filter has (FilterSpanInSymbols x InputSamplesPerSymbol + 1) taps.
So this filter has 2*10+1 = 21 taps. How then is the output computed? If you take the convolution of the coefficients of filt
and vector
you will get a (k+taps-1)x1
complex double, which makes sense to me because the output of a FIR filter is the convolution of its impulse response with the input signal. How then is output
a k*2 x 1
complex double?