为上采样器中的 LP 滤波器选择正确的截止频率

信息处理 matlab 过滤器 采样
2022-02-06 16:47:05

我在 Matlab 中实现了一个上采样函数,但它现在并不完美,原因我不确定。这是我的代码:

U=5; %upsampling rate
N = U*length(x);

% Init
x_up = zeros(1,N);

% Zero-pad
ind=1;
for n=1:N
    if mod(n,U)==0
       x_up(n)=x(ind);
       ind = ind+1;
    end
end

%% Design a LP filter
tol = (1/U)/2;
[n,fo,mo,w] = firpmord([1/(2*U)-tol 1/(2*U)+tol],[1 0],[0.01,0.01]); 
 b = firpm(n,fo,mo,w);

x_up = [zeros(1,n),x_up]; %To avoid group-delay
x_up = conv(b,x_up,'full');
x_up(abs(x_up)<0.01)=0;
% Remove leading and tailing zeros
x_up = x_up(find(x_up,1,'first'):find(x_up,1,'last'));    
x_up = x_up(1:N);

这些是结果: 在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

从理论的角度来看,对我来说一切都很好,但我怎样才能让我的上采样器完美呢?

1个回答

以 dB 为单位查看低通滤波器后的频率响应,以更好地显示滤波器的局限性。

使用具有最小二乘算法的多频带滤波器来优化零填充插值的拒绝滤波器。这会将拒绝集中在需要删除的图像的具体位置。

鉴于您的原始信号延伸到频带边缘,您将面临使用零插入和滤波进行插值的重大挑战,因为滤波器的复杂性是由过渡带的宽度驱动的。我在下面详细介绍了这种插值器滤波器设计 - 请特别注意是什么定义了您想要通过的信号和您想要拒绝的信号。为了简化这一点并使这种方法可行,请考虑首先对波形进行低通滤波以减少高频分量,同时仍然可以接受您想要在时域中拥有的内容。然后,您可以使用零插入和多频带滤波器设计方法进行插值。

在某种程度上,您可以在通带内通过您的信号而没有任何失真,并完全消除图像,您将实现完美的插值(如果没有无限长的滤波器和无限延迟,这是不可能的,所以您只能近似这个 - 给定足够的你可以做得很好的水龙头)。


第一张幻灯片显示了如何通过零插入创建图像。数字频谱已经是周期性的,零插入只是扩展了采样率而不改变频谱的周期性或原始形状——所以当我们插值 4 时,例如这里所做的,原来在周围的图像Fs,2Fs成为我们在第一奈奎斯特区频谱的一部分Fs/4Fs/2. 这些必须被过滤掉才能完成插值。

上采样

优化的插值滤波器只需要拒绝图像,而不会使感兴趣的通带信号失真。最小二乘(MATLAB/Octave 中的 firls)FIR 滤波器是一个很好的选择,它支持多频带滤波器,我们可以将抑制集中在最需要的地方,从而为相同数量的抽头提供更大的抑制。

插值