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
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
k*2 x 1 complex double?