在Matlab中将朴素逆滤波器与维纳滤波器进行反卷积比较

约翰·卡斯特

我目前正在尝试将简单的逆滤波器与维纳滤波器进行比较,以使用Matlab进行反卷积。我的开始信号是exp(-t^2),这将与时间为-0.5至.5的非零的rect进行卷积。我正在介绍幅度在-0.5至.5范围内的噪声。

定义我的时域到频域映射:

f = exp(-t^2) => F

s = rect => R

c = f*s => C

r = noise (see above) => R

with noise c becomes: c = f*s + n => C = FxS + N

对于第一种方法,我只是简单地采用FTc并将其除以FT,f然后进行逆FT。这等于s = (approx.) ifft((FxS + N)/F)

对于第二种方法,我采用维纳滤波器,W将其乘以C/R然后进行逆FT。总计为S = (approx.) ifft(CxW/R)

维纳滤镜为W = mag_squared(FxS)/(mag_squared(FxS) + mag_squared(N))

我用“ *”表示卷积,用“ x”表示乘法。

我正在尝试在-3到3的时间间隔内比较rect的两个反卷积。现在,我得到的反卷积rect的图形看起来与原始图完全不同。
有人能指出我对错的正确方向吗?我尝试以许多不同的顺序使用ifftshift和不同的缩放比例,但似乎没有任何效果。

谢谢

我的matlab代码如下:

%%using simple inverse filter
dt = 1/1000;
t = linspace(-3,3,1/dt); %time
s = zeros(1,length(t)); 
s(t>=-0.5 & t<=0.5) = 1; %rect
f = exp(-(t.^2)); %function
r = -.5 + rand(1,length(t)); %noise

S = fft(s);
F = fft(f);
R = fft(r);
C = F.*S + R;
S_temp = C./F;
s_recovered_1 = real(ifft(S_temp));  %correct?...works for signal without R (noise)

figure();
plot(t,s + r);
title('rect plus noise');

figure();
hold on;
plot(t,s,'r');
plot(t,f,'b');
legend('rect input','function');
title('inpute rect and exponential functions');
hold off;

figure();
plot(t,s_recovered_1,'black');
legend('recovered rect');
title('recovered rect using naive filter');


%% using wiener filter
N = length(s);
I_mag = abs(I).^2;
R_mag = abs(R).^2;
W = I_mag./(I_mag + R_mag);
S_temp = (C.*W)./F;
s_recovered_2 = abs(ifft(S_temp));  

figure();
freq = -fs/2:fs/N:fs/2 - fs/N;
hold on;
plot(freq,10*log10(I_mag),'r');
plot(freq,10*log10(R_mag),'b');
grid on
legend('I_mag','R_mag');
title('Periodogram Using FFT')
xlabel('Frequency (Hz)')
ylabel('Power/Frequency (dB/Hz)')

figure();
plot(t,s_recovered_2);
legend('recovered rect');
title('recovered rect using wiener filter');
约翰·卡斯特

因此事实证明,在计算维纳滤波器时,我用错误的分母进行了除法。现在,我还使用简单的abs(...)^ 2方法来计算Wiener滤波器中每个项的| ... | ^ 2(功率谱密度)。上面的代码反映了这些更改。希望这对像我这样的菜鸟有帮助:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

了解卷积滤波器

来自分类Dev

Matlab中滤波器的逆FT

来自分类Dev

Matlab FIR滤波器

来自分类Dev

Matlab滤波器矩阵

来自分类Dev

高通滤波器Matlab

来自分类Dev

平均滤波器Matlab

来自分类Dev

卷积滤波器的参数数量

来自分类Dev

通过MATLAB中的逆滤波器问题重建图像

来自分类Dev

如何在matlab中将图像与内核/滤波器相乘

来自分类Dev

dplyr滤波器中的标量比较

来自分类Dev

Matlab中高斯滤波器的导数

来自分类Dev

超低频滤波器MATLAB

来自分类Dev

使用fft的Matlab低通滤波器

来自分类Dev

在MATLAB中实现均值滤波器

来自分类Dev

Matlab中的FIR滤波器

来自分类Dev

Matlab中的滤波器系数

来自分类Dev

使用角度滤波器对Rails输出进行滤波

来自分类Dev

使用MATLAB中的系数在C ++中进行FIR滤波器设计,滤波器未给出正确的结果

来自分类Dev

如何在Python中将3维数组(在本例中为滤波器组)与2维图像(单色)进行卷积?

来自分类Dev

在MATLAB中使用自回归(AR)滤波器对某些随机信号进行滤波

来自分类Dev

定向gabor滤波器的盒式滤波器近似

来自分类Dev

卷积网络滤波器始终为负

来自分类Dev

卷积期间翻转滤波器的直觉是什么?

来自分类Dev

C中的Gabor滤波器卷积矩阵

来自分类Dev

用于可视化的 tensorflow 重塑卷积滤波器

来自分类Dev

如何在 tensorflow 中训练卷积滤波器

来自分类Dev

带通滤波器组

来自分类Dev

应用低通滤波器

来自分类Dev

FFT低通滤波器