【问题标题】:Applying low pass filter应用低通滤波器
【发布时间】:2016-02-29 18:56:33
【问题描述】:

我想在 MATLAB 中使用上采样和低通滤波器来模拟插值器。首先,我通过引入 0 对信号进行了上采样。

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

滤波器正好是归一化频率的 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); 

【问题讨论】:

    标签: matlab filter signal-processing convolution lowpass-filter


    【解决方案1】:

    正如hotpaw2's answer 所建议的那样,低通滤波器需要一些时间才能上升到输入信号值。这对于像您这样具有尖锐步长的信号尤其明显(信号隐含地在第一个样本处包含一个大步,因为过去的样本被 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);
    

    【讨论】:

      【解决方案2】:

      低通滤波器仅有助于对比低通滤波器的脉冲响应长度长得多的信号进行插值。否则输出可能会被滤波器瞬态控制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-29
        • 1970-01-01
        • 2011-05-29
        • 2019-04-29
        • 2015-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多