我对我的低通滤波器有疑问。我想插值和上采样信号,但是当我使用我的低通滤波器时,它只是部分插入样本:
我的过滤器代码如下:
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
有谁知道如何解决这个问题?
答案 0 :(得分:1)
让我们首先查看频域中未经过滤的上采样信号xu
(来自your previous question),以便更好地了解正在发生的事情:
如您所见,Fs/8
,2*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)
可以看到:
正如您所注意到的,滤波器在阻带中提供非常小的衰减。因此,我之前提到的图像仍将为滤波后的输出提供相当显着的贡献。增加系数的数量会有所帮助,但你可能会发现你需要很多系数(大约500-1000)来获得一个不错的阻带衰减和一个急剧的过渡频带。
相比较而言,用fir1(60, 0.125)
生成的滤波器系数(如my previous answer中所使用的)提供了更好的衰减,其中图像在频域中最强,但也具有更宽的过渡带和使用更多滤波器系数。然后,频率中得到的滤波信号为:
因此,问题归结为系数数量(影响计算要求和滤波器延迟),过渡带宽和阻带衰减之间的权衡。要正确回答,我们需要知道您的具体应用要求是什么。
如果您尝试插入带宽与您用作输入的半高斯脉冲相似的带宽信号(因此不需要像您指定的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然后滤波,级联三次)也可以使用相同的系数总数和转换带宽来减少插值误差。