MATLAB如何在频域实现Ram Lak滤波器(斜坡滤波器)?

MATLAB如何在频域实现Ram Lak滤波器(斜坡滤波器)?,matlab,filter,fft,Matlab,Filter,Fft,我有一个任务是实现一个Ram Lak滤波器,但几乎没有给出任何关于它的信息(除了fft、ifft、fftshift、ifftshift) 我有一个汉字,我必须通过Ram Lak过滤。同时给出了投影数 我尝试使用过滤器 1/4 if I == 0 (b^2)/(2*pi^2) * 0 if I even -1/(pi^2 * I^2) if

我有一个任务是实现一个Ram Lak滤波器,但几乎没有给出任何关于它的信息(除了fft、ifft、fftshift、ifftshift)

我有一个汉字,我必须通过Ram Lak过滤。同时给出了投影数

我尝试使用过滤器

                      1/4              if I == 0

(b^2)/(2*pi^2)  *     0                if I even

                      -1/(pi^2 * I^2)  if I odd
b似乎是截止频率,我和采样率有关吗

也有人说,两个函数的卷积是傅里叶空间中的简单乘法


我根本不知道如何实现过滤器,尤其是没有给出b,没有告诉我是什么,也不知道如何将其应用到中文报,我希望有人能在这里帮助我。我花了2个小时在谷歌上搜索,试图了解这里需要做什么,但我不知道如何实现它。

如果你想在傅里叶域中不进行滤波的情况下进行Radon逆变换,你列出的公式是一个中间结果。另一种方法是在空间域中使用卷积进行整个滤波反投影算法,这在40年前可能会更快;你最终会重新导出你发布的公式。然而,我现在不推荐它,尤其是对于你的第一次重建;你应该首先真正理解希尔伯特变换

无论如何,这里有一些Matlab代码,它可以进行强制性的Shepp-Logan幻影滤波反投影重建。我将展示如何使用Ram Lak过滤器进行自己的过滤。如果我真的有动力,我会用一些interp2命令和总结来代替radon/iradon


幻影数据=幻影()


你的问题很不清楚。我是什么?我们怎么找到b?我看过的所有文本都没有使用相同的符号。Ram Lak过滤器只是一个abs(f)功能,就像一个双斜坡。如果你告诉我这些变量是什么,我就能帮助你。我的问题是我不知道。在文献中(即使用非扩散源重建的算法第72页-[链接](www.umiacs.umd.edu/~mingyliu/enee631/CTI_Ch03.pdf),他们只使用一个i(或这里的teta,采样间隔),你能帮我实现一个简单的abs()吗根据汉字图和投影数进行过滤?试试这个链接。这是一个很好的文本。图2B是一个Ram-Lak过滤器谢谢,这确实帮了我的忙!
N=size(phantomData,1);

theta = 0:179;
N_theta = length(theta);
[R,xp] = radon(phantomData,theta);

% make a Ram-Lak filter. it's just abs(f).
N1 = length(xp);
freqs=linspace(-1, 1, N1).';
myFilter = abs( freqs );
myFilter = repmat(myFilter, [1 N_theta]);

% do my own FT domain filtering
ft_R = fftshift(fft(R,[],1),1);
filteredProj = ft_R .* myFilter;
filteredProj = ifftshift(filteredProj,1);
ift_R = real(ifft(filteredProj,[],1));

% tell matlab to do inverse FBP without a filter
I1 = iradon(ift_R, theta, 'linear', 'none', 1.0, N);

subplot(1,3,1);imagesc( real(I1) ); title('Manual filtering')
colormap(gray(256)); axis image; axis off

% for comparison, ask matlab to use their Ram-Lak filter implementation
I2 = iradon(R, theta, 'linear', 'Ram-Lak', 1.0, N);

subplot(1,3,2);imagesc( real(I2) ); title('Matlab filtering')
colormap(gray(256)); axis image; axis off

% for fun, redo the filtering wrong on purpose
% exclude high frequencies to create a low-resolution reconstruction
myFilter( myFilter > 0.1 ) = 0;
ift_R = real(ifft(ifftshift(ft_R .* myFilter,1),[],1));
I3 = iradon(ift_R, theta, 'linear', 'none', 1.0, N);

subplot(1,3,3);imagesc( real(I3) ); title('Low resolution filtering')
colormap(gray(256)); axis image; axis off