low-pass exponential filter - fourier space

9 次查看(过去 30 天)
Hello,
I am a beginner in Matlab and I have to understand a code. The part I don't understand is to calculate filter for displacement datas (in Fourier space) (low-pass exponential filter).
qmax=nr2/(pi*min_feature_size); %min_feature_size: spatial resolution of the stress measurement in units of the grid spacing.
%nr2=number of rows and columns across field (must be square)
% Get distance from of a grid point from the centre of the array
y=repmat((1:nr2)'-nr2/2,1,nr2);
x=y';
q=sqrt(x.^2+y.^2);
% Make the filter
qmsk=exp(-(q./qmax).^2);
qmsk=ifftshift(qmsk)
I have difficutlies understanding what he is doing exactly...what is the iffshift for? and what is this filter doing excalty
Thank you for your help Aude

采纳的回答

David Goodmanson
David Goodmanson 2016-10-27
Hi Aude, To construct a filter in this situation it's convenient to use a frequency array with zero frequency in the center. In one dimension the lowpass filter might look like
f = -50:49; y = exp(-f.^2/100); plot(f,y)
(it's more properly called a gaussian than an exponential). But to do an fft or an ifft, Matlab wants zero frequency at the beginning of the array, not the middle. The ifftshift function swaps halves of the y array to put zero frequency at the beginning. So
ff = 0:99; plot(ff,ifftshift(y))
puts the center of the gaussian down at zero frequency, and the negative frequency part of the gaussian into the upper half of the frequency array. Your code does the same in two dimensions.
  6 个评论
Aude Rapet
Aude Rapet 2016-11-4
编辑:Aude Rapet 2016-11-4
Yes I understand.
I just have another question, are you sure is it a gaussian low-pass filter? As there isn't the normalizing factor (1/sqrt(2*pi)*σ), and neither the Sigma which set the width of the gaussian function...?
As they just do : qmsk=exp(-(q./qmax).^2)
Is is possible to "create" a filter like this? I mean without using a known one like Gaussian, Butterworth,...
I do understand that the goal of a low-pass filter but I am confused with the one of my code... Thank you!
David Goodmanson
David Goodmanson 2016-11-4
It is a gaussian filter, because you can write it as exp( -(q.^2) / (qmax^2) ). Then if you define sigma in terms of qmax with the expression 2*sigma^2 = qmax^2, you get same formula for a gaussian as in one of your earlier comments. Except for the normalizing factor in front. Again, I don't know why the are not using that.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Digital Filter Analysis 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by