Frequency domain filtering in Matlab

Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
5 replies · 6K views
roam
Messages
1,265
Reaction score
12
I am trying to implement several filters in Matlab for Fourier domain filtering. They are the cosine, Shepp-Logan, and Hann/Hamming window filters. These filters are defined as multiplying the ramp filter by the cosine function, sinc function, and Hann/Hamming windows respectively.

This is how the responses of these filters should look like:

tiki-download_file.php?fileId=433&display.jpg

However, this is what I am getting:

filters.jpg


I have defined the filters exactly as they are defined in this Matlab function, with a parameter ##d## that stretches the filters:

Code:
w=linspace(0, 1, 181).'; % Frequency axis

d=0.33;

Hr = abs(w); % Ramp filter

H=Hr.* cos(w/(d)); % Cosine filter
H(H<0) = 0; 

H=Hr.* (sin(w/d)./(w/d)); % Shepp-Logan filter
H(H<0) = 0; 

H=Hr.* (1+cos(w./d)) / 2; % Hann filter
H(H<0) = 0; 

H=Hr.* (.54 + .46 * cos(w/d)); % Hamming filter
H(H<0) = 0;

For instance, if I change it to ##d=0.3##, the Hann/Hamming filters start to look correct. And at ##d=0.65##, the cosine filter looks more correct:

d3filter.jpg


So, what is the justification for using the parameter ##d##? And is there an algorithm for calculating it accurately for each filter?

Any explanation would be greatly appreciated.
 
Physics news on Phys.org
What do you get for d=1? I am guessing it might have to do with normalization?
 
  • Like
Likes   Reactions: roam
PhysicoRaj said:
What do you get for d=1? I am guessing it might have to do with normalization?
The second plot above is d=1. I suspect there is a degree/radian/frequency units issue.
 
  • Like
Likes   Reactions: PhysicoRaj and roam
I tried to plot the graphs without the ##d## but instead using some kind of normalization. This is the combination that produced the correct results:

$$H=|\omega| \cos \left( \frac{\omega}{2 \pi} \right)$$

$$H=|\omega| \left( \frac{\sin \left( \frac{\omega}{2 \pi} \right)}{\left( \frac{\omega}{2 \pi} \right)} \right)$$

$$H = |\omega| \frac{1+\cos(\omega \pi)}{2}$$

$$H = |\omega| (0.54 + 0.46 \cos (\omega \pi))$$

Is there any reason why we need to divide the frequency in the first two by ##2 \pi##, but multiply it by ##\pi## in the Hann and Hamming window?

It was a trial and error approach, so I am not sure. :confused:
 
d has to do with cut-off frequency I guess. It must be lower than Nyqvist frequency to prevent aliasing and d=0.33 means that it is only 33% of Nyqvist frequency.