# Raised-Cosine Filter - phase response graphs for three kinds of filter

In the previous post it has been mentioned that the phase response of Raised-Cosine filter is linear and is given with ϕ(ω)=−ωT, where T is the delay. But, I have also read in literature that it is also a minimum phase filter and non-linear. Which one is correct, and if it is minimum phase how I can calculate it?

I have three kinds of Raised-Cosine filters, as per picture below. What is the phase response for each kind of filter? How the phase response graph will look like for each filter?

• Please include units in the plots. Also, none of them looks like a raised cosine. – MBaz Jun 22 '15 at 20:56
• @MBaz I have included units in the graphs. These are all raised-cosine functions. Please see the paper "Raised Cosine Equalization Utilizing Log Scale Filter Synthesis", D. McGrath, J. Baird, B. Jackson. – Nebojsa Jun 23 '15 at 12:13
• The impulse response of raised cosine filters is time symmetric which makes the frequency response linear phase. There's no way to read off the phase response from your magnitude graphs, but you can read off the symmetry center $t_0$ from the impulse response. The phase response is then $\phi(\omega)=-t_0 \omega$. – Jazzmaniac Jun 23 '15 at 14:39
• @Jazzmaniac Thank you. However, in my previous post I have find out that the raised cosine filter has minimum phase and that the phase is not linear. Please see the paper I have mentioned in that post. – Nebojsa Jun 23 '15 at 14:56
• @Nebojsa Maybe I'm too dense, but I still don't understand your plots. Is the point of the plots that the excess bandwidth is 2 kHz? – MBaz Jun 23 '15 at 14:59

Matt L. is right. The raised cosine shape describes the magnitude response of the filter, but the phase response is generated as a side-effect of the chosen implementation. The two most common choices for the phase response are Linear-Phase and Minimum-Phase.

As an example, try doing this in Matlab:

FFTLen = 8192;
FSample = 48000;
Freq = (0:FFTLen/2)' * FSample/FFTLen;
FreqOct = log2(Freq/1000);
Gain_dB = 6 * sin(interp1( [-20 0.5 1 1.5 20], [0 0 1 0 0], FreqOct, 'linear', 'extrap')*pi/2).^2;
semilogx( Freq, Gain_dB); grid on;


This code creates a column vector (Freq) that defines the frequencies of the FFT bins between 0 and 24000Hz, for an FFT of length 8192. The Freq vector will actually be 4097 long.

The column vector FreqOct expresses the frequency in Octaves, relative to 1kHz. The Matlab function interp1() creates a piecewise linear function that ramps from 0 to 1 and back to 0 again, to define a "raised triangle" filter response centered at 1-octave (that's 2kHz). Finally, the expression sin( xxx * pi/2).^2 is a quick way to convert the raised triangle shape to a raised cosine.

The resulting magnitude response looks like this:

Now, this magnitude response needs to be 'mirrored', so that it extends all the way to 48kHz. Then, we can compute a linear-phase impulse response by simply taking the inverse-FFT of this (real) magnitude response (and we also shift it to the middle of the vector, using the fftshift() function):

MagResp = 10 .^ ( Gain_dB( [1:end,end-1:-1:2] )/20 );
IR_LinearPhase = fftshift( real( ifft( MagResp )));
plot( -FFTLen/2:FFTLen/2-1, IR_LinearPhase ); grid on; title('Linear-Phase Impulse Response');


Alternatively, we can create the Minimum-phase Impulse Response, by using the hilbert() function, applied to the logarithm of the magnitude response:

IR_MiniumPhase = fftshift( real( ifft( conj( exp( hilbert( log( MagResp )))))));
plot( -FFTLen/2:FFTLen/2-1, IR_MinimumPhase ); grid on; title('Minimum-Phase Impulse Response');


The resulting phase response of the minimum-phase filter is shown here:

Finally, it's clear that the Linear-Phase filter (as it's plotted up above) cannot be realised in a practical system, because the impulse response contains non-zero values prior to time zero. The 'pre-ripple' in the linear-phase impulse response extends about 50-80 samples prior to time zero, so it's reasonable to expect that we might be able to implement this linear-phase filter if we add about 50-80 samples delay (with a window function applied to give us a smoother result):

IR_Delayed = IR_LinearPhase(4096-80:4096+80) .* hanning(161);
plot(IR_Delayed); grid on; title('161-tap Linear-phase filter with 80-sample delay');


You need to realize that the term "raised cosine" says absolutely nothing about the related phase response. I think the context of this question of yours is audio equalization, and in that context filters with certain desired magnitude response shapes are sometimes described by piecewise constant values which are smoothly connected by raised cosine shapes.

So those shapes in your figures are idealized magnitude responses. Now you can use any filter design technique to approximate such a response. Still nothing is said about the phase, and it depends on the design technique which phase response you'll end up with. Analog filter designs will usually result in a minimum phase response. But note that this has absolutely nothing to do with the raised cosine shape of the desired magnitude response.

In digital communications raised cosine pulses are used because they satisfy the Nyquist criterion. There also the phase is important and the frequency response of the ideal pulse has a raised cosine magnitude shape and a linear phase.

In sum, it is important to understand that the "raised cosine" property is a description of the magnitude response, and the application and/or the filter design process will determine the phase response, which can be linear, minimum phase, or anything else.

• Thanks, it is very informative answer. My starting point was this paper. Magnitude and phase response plots are on page 6. It says it is minimum phase filter by its implementation. The phase is non-linear. I still don't know how to design raised cosine filter with minimum phase. I wonder how they obtained their phase response. I implemented magnitude formula in C++ which was easy, but I am stuck how to get minimum phase response and implement it in C++. – Nebojsa Jun 23 '15 at 15:56
• @Nebojsa: If the paper doesn't say how the filter was designed then nobody can know. In principle, any optimization routine could be used to approximate a given function. – Matt L. Jun 23 '15 at 15:58
• You wrote "design process will determine the phase response". What is the design process that will lead to minimum phase filter? – Nebojsa Jun 23 '15 at 17:19
• @Nebojsa: As an example, there are formulas for designing standard filters such as Butterworth, Chebyshev etc., and these are all minimum-phase filters. I did not refer to any specific design method, I just wanted to state that it depends on the chosen design process whether the phase will be minimum phase or not. Note that there are no analog filters with an exactly linear phase response. A linear phase response can only be realized in discrete-time by a symmetric FIR filter. – Matt L. Jun 23 '15 at 18:24
• Thanks, Matt. I design linear phase FIR filter by frequency sampling method and I specify slope of the linear phase (all in C++ code). Also, for IIR Biquads, I calculate the phase using formula that gives argument of the filters complex transfer function (C++). But, when it comes to raised cosine I am stuck. As I said, I have magnitude response from here, and then I stopped at the point how to define and calculate minimum phase. Thanks for your help. – Nebojsa Jun 23 '15 at 18:57