Combining Two Square-Root Raised Cosine Filters

If you want to split the filtering equally between the transmitter's filter and the receiver's filter, then you can use a pair of square-root raised cosine filters. In theory, the combination of two square-root raised cosine filters is equivalent to a single normal raised cosine filter. However, the limited impulse response of practical square-root raised cosine filters causes a slight difference between the response of two successive square-root raised cosine filters and the response of one raised cosine filter.

Using rcosine and rcosflt to Implement Square-Root Raised Cosine Filters

One way to implement the pair of square-root raised cosine filters is to follow these steps:

  1. Use rcosine with the 'sqrt' flag to design a square-root raised cosine filter.

  2. Use rcosflt in the transmitter section of code to upsample and filter the data.

  3. Use rcosflt in the receiver section of code to filter the received data without upsampling it. Use the 'Fs' flag to avoid upsampling.

An example of this approach is below. Notice that the syntaxes for rcosflt use the 'filter' flag to indicate that you are providing the filter's transfer function as an input.

% First approach
x = randint(100,1,2,1234); % Data
num = rcosine(1,8,'sqrt'); % Transfer function of filter
y1 = rcosflt(x,1,8,'filter',num); % Filter the data.
z1 = rcosflt(y1,1,8,'Fs/filter',num); % Filter the received data
% but do not upsample it.

Using rcosflt Alone

Another way to implement the pair of square-root raised cosine filters is to have rcosflt both design and use the square-root raised cosine filter. This approach avoids using rcosine. The corresponding example code is below. Notice that the syntaxes for rcosflt use the 'sqrt' flag to indicate that you want it to design a square-root raised cosine filter.

% Second approach
x = randint(100,1,2,1234); % Data (again)
y2 = rcosflt(x,1,8,'sqrt'); % Design and use a filter.
z2 = rcosflt(y2,1,8,'sqrt/Fs'); % Design and use a filter
% but do not upsample the data.

Because these two approaches are equivalent, y1 is the same as y2 and z1 is the same as z2.


© 1994-2005 The MathWorks, Inc.