- r = filter([y; zeros(span * sps, 1)]);
- r = r(span * sps / 2 + 1 : end); % truncate filter transients
+ coef = coeffs(rxfilter);
+ filter_fft = fft(coef.Numerator, length(y));
+ y_fft = fft(y);
+
+ rs = ifft(y_fft .* filter_fft.');
+
+ %% re-order signal due to circular conv
+ l = (length(coef.Numerator) - 1) / 2;
+ rr = [rs(l:end); rs(1:l-1)];
+
+ r = downsample(rr, 4, 3);