Interpolate and Decimate Using RRC Filter
This example shows how to interpolate and decimate signals using square-root, raised cosine filters designed with the rcosdesign
function. This example requires the Communications Toolbox™ software.
Define the square-root raised cosine filter parameters. Define the signal constellation parameters.
rolloff = 0.25; % Filter rolloff span = 6; % Filter span sps = 4; % Samples per symbol M = 4; % Size of the signal constellation k = log2(M); % Number of bits per symbol
Generate the coefficients of the square-root raised cosine filter using the rcosdesign
function.
rrcFilter = rcosdesign(rolloff,span,sps);
Generate 10000 data symbols using the randi
function.
data = randi([0 M-1],10000,1);
Apply PSK modulation to the data symbols. Because the constellation size is 4, the modulation type is QPSK.
modData = pskmod(data,M,pi/4);
Using the upfirdn
function, upsample and filter the input data.
txSig = upfirdn(modData,rrcFilter,sps);
Convert the Eb/N0 to SNR and then pass the signal through an AWGN channel.
EbNo = 7;
snr = EbNo + 10*log10(k) - 10*log10(sps);
rxSig = awgn(txSig,snr,'measured');
Filter and downsample the received signal. Remove a portion of the signal to account for the filter delay.
rxFilt = upfirdn(rxSig,rrcFilter,1,sps); rxFilt = rxFilt(span+1:end-span);
Create a scatterplot of the modulated data using the first 5000 symbols.
hScatter = scatterplot(sqrt(sps)* ... rxSig(1:sps*5000), ... sps,0); hold on scatterplot(rxFilt(1:5000),1,0,'bx',hScatter) title('Received Signal, Before and After Filtering') legend('Before Filtering','After Filtering') axis([-3 3 -3 3]) % Set axis ranges hold off