应用低通滤波器

Applying low pass filter

我想在 MATLAB 中使用上采样后跟低通滤波器来模拟插值器。首先,我通过引入 0 来获得 up-sampled 我的信号。

现在我想应用低通滤波器以进行插值。我设计了以下过滤器:

滤波器恰好是归一化频率的 1/8,因为之后我需要下采样。 (这是按此特定顺序进行上采样插值和下采样的特定练习。)

然而,当我使用函数 filter(myfilter, data) 将此过滤器应用于我的数据时,会生成以下信号:

我真的不知道我的信号发生了什么,因为理论上我知道应该出现一个内插信号。这是我第一次在 MATLAB 中使用滤波器,因为到目前为止我们只有理论并且必须假设理想的滤波器和分析解决方案。

谁能告诉我哪里出了问题?我使用以下代码:

clear all; close all;

% Settings parameters
fs=10e6; 
N=10;
c=3/fs;
k=3;
M=8;

% Settings time and signal 
t=0:fs^-1:N*fs^-1;
x=exp(-(t.^2)./(2.*c.^2)); % Gaussian signal

% Upsampling
tu=0:(fs*M)^-1:N*fs^-1;
xu=zeros(1,size(tu,2));
sample_range=1:M:size(xu,2);
for i=1:size(x,2);
    xu(sample_range(i))=x(i);
end;

%% Direct Method

xf=filter(lpf5mhz,xu); 

低通滤波器仅有助于内插比低通滤波器的脉冲响应长度长得多的信号。否则输出可能由滤波器瞬变主导。

正如 所建议的那样,低通滤波器需要一些时间才能上升到输入信号值。对于像您这样具有尖锐步长的信号,这一点尤其明显(信号在第一个样本中隐含地包含一个大步,因为 filter 调用假定过去的样本为零)。此外,使用您的设计参数,滤波器的延迟大于输出图中显示的最大时间范围 (1e-6),相应地,输出在显示的时间范围内仍然非常小。

为了说明这一点,我们可以使用由fir1(length,0.125):

给定一个过渡更平滑的信号,例如经过充分时间延迟的高斯脉冲:

delay = 10/fs;
x=exp(-((t-delay).^2)./(2.*c.^2)); % Gaussian signal

过滤器可以更好地提升到信号值:

接下来您可能会注意到,滤波后的输出具有 1/Mth 个未滤波信号的幅度。要获得与未过滤信号幅度相似的插值信号,您必须使用以下比例缩放滤波器输出:

xf=M*filter(lpf5mhz,1,xu);

最后,信号被滤波操作延迟。因此,出于比较目的,您可能需要绘制一个时移版本:

filter_delay = (1/(M*fs))*(length(lpf5mhz)-1)/2;
plot(tu-(1/(M*fs))*(length(b)-1)/2, xf);