低通滤波器不能很好地插值

时间:2015-11-27 13:51:15

标签: matlab signal-processing convolution lowpass-filter

我对我的低通滤波器有疑问。我想插值和上采样信号,但是当我使用我的低通滤波器时,它只是部分插入样本:

Interpolation

我的过滤器代码如下:

function Hd = lpf5mhz3
%LPF5MHZ3 Returns a discrete-time filter object.

% MATLAB Code
% Generated by MATLAB(R) 8.6 and the Signal Processing Toolbox 7.1.
% Generated on: 27-Nov-2015 14:28:27

% Equiripple Lowpass filter designed using the FIRPM function.

% All frequency values are in Hz.
Fs = 10000000;  % Sampling Frequency

N     = 20;       % Order
Fpass = 1200000;  % Passband Frequency
Fstop = 1250000;  % Stopband Frequency
Wpass = 1;        % Passband Weight
Wstop = 1;        % Stopband Weight
dens  = 20;       % Density Factor

% Calculate the coefficients using the FIRPM function.
b  = firpm(N, [0 Fpass Fstop Fs/2]/(Fs/2), [1 1 0 0], [Wpass Wstop], ...
           {dens});
Hd = dfilt.dffir(b);

% [EOF]

预期的结果可以在我之前的问题中看到: Applying low pass filter

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

让我们首先查看频域中未经过滤的上采样信号xu(来自your previous question),以便更好地了解正在发生的事情:

enter image description here

如您所见,Fs/82*Fs/8,...,7*Fs/8的原始低频信号(通常称为图像)有8次重复。这些图像包括正频率和负频率分量,因此Fs/8周围的图像从大约Fs/16延伸到3*Fs/16

相应地,过滤器的设计截止频率应该在Fs/(2*M) = Fs/16

附近
Fpass = 1200000/2;  % Passband Frequency
Fstop = 1250000/2;  % Stopband Frequency

过滤器产生的幅度响应设计为:

N  = 20;
b  = firpm(N, [0 Fpass Fstop Fs/2]/(Fs/2), [1 1 0 0], [Wpass Wstop], ...
           {dens});    
使用freqz(b,1)可以看到

enter image description here

正如您所注意到的,滤波器在阻带中提供非常小的衰减。因此,我之前提到的图像仍将为滤波后的输出提供相当显着的贡献。增加系数的数量会有所帮助,但你可能会发现你需要很多系数(大约500-1000)来获得一个不错的阻带衰减一个急剧的过渡频带。

相比较而言,用fir1(60, 0.125)生成的滤波器系数(如my previous answer中所使用的)提供了更好的衰减,其中图像在频域中最强,但也具有更宽的过渡带和使用更多滤波器系数。然后,频率中得到的滤波信号为:

enter image description here

因此,问题归结为系数数量(影响计算要求和滤波器延迟),过渡带宽和阻带衰减之间的权衡。要正确回答,我们需要知道您的具体应用要求是什么。

如果您尝试插入带宽与您用作输入的半高斯脉冲相似的带宽信号(因此不需要像您指定的50000Hz那样锐利的过渡带),并且系数的数量是主要关注点,对于相同数量的系数(即21),可能会发现以下设计执行得更好(尽管它仍会有一些重要的伪像):

Fpass =  550000/2;
Fstop = 1250000/2;
Wpass = 1;
Wstop = 22;
N  = 20;
b  = firpm(N, [0 Fpass Fstop Fs/2]/(Fs/2), [1 1 0 0], [Wpass Wstop], ...
           {dens});    

当然,增加系数的数量(以及如上所述放宽过渡带要求)将进一步减少插值滤波器的误差。或者,使用多级滤波器(例如,上采样2然后滤波,级联三次)也可以使用相同的系数总数和转换带宽来减少插值误差。