简单的低/高过滤matlab

时间:2015-01-11 17:07:07

标签: matlab filter

有人可以帮我解决另一个matlab项目:

是否可以像RC电路一样创建简单的低通滤波器?例如,如果我们创建一个正弦波,如y = 10 * sin(2 * pi f t)。

我是否可以使用截止频率对信号进行滤波,以便能够看到滤波信号的样子(幅度衰减)?

因此,当我输入一些信息,例如f = cutoff并绘制滤波后的信号时,这必须将幅度从输入信号减小到30%?

我一直在寻找像黄油和切比这样的功能,但他们似乎还在进行其他类型的过滤,例如消除信号中的噪音。我只想要一些简单的图(输入和输出),它们将显示RC,RL低通和高通滤波器的原理。

1 个答案:

答案 0 :(得分:1)

RC电路是一阶滤波器。为了逼近一阶硬件滤波器,我通常使用IIR滤波器。 butterworth过滤器通常是我对IIR的首选,但对于一阶响应,它并不重要。

以下是截止频率与信号频率相同的示例,因此滤波后的信号应降低3 dB ......

%first, make signal
fs = 1000;    %your sample rate, Hz
dur_sec = 1;  %what is the duration of your signal, seconds
t_sec = ([1:dur_sec*fs]-1)/fs;  %here is a vctor of time
freq_Hz = 25;       %what frequency do you want your sign wave
y = sin(2*pi*freq_Hz*t_sec);  %make your sine wave

%Second, make your filter
N = 1;  %first order
cutoff_Hz = 25;  %should be 3dB down at the cutoff
[b,a]=butter(N,cutoff_Hz/(fs/2),'lowpass');  %this makes a lowpass filter

%Third, apply the filter
y_filt = filter(b,a,y);

%Last, plot the results
figure;
plot(t_sec,y,t_sec,y_filt);
xlabel('Time (sec)');
ylabel('Amplitude');
ylim([-1 1]);
legend('Raw','Filtered');
title(['1st-Order Filter with Cutoff at ' num2str(cutoff_Hz) ' Hz']);

作为使用内置滤波器设计功能(如butter)的替代方法,您可以选择对电路本身进行建模。简单的一阶RC(或RL)电路将产生一阶微分方程。对于RC电路,您可以根据时间积分方程,将正弦波作为刺激。这样可以正常工作,但根据你的背景,可能会更麻烦。

对于由RC任一端的运算放大器正确缓冲的简单的一阶硬件滤波器,我认为您会发现使用一阶黄油滤波器的结果非常接近(同样的?)为电路建模。黄油过滤器更容易在软件中实现(因为我刚刚给你上面的代码),所以我会走那条路。

然而,当您转到二阶硬件过滤器时,您需要更加小心。您有几个选择:

1)继续使用其中一个内置过滤器功能为您的二阶硬件建模。第二个订单butter实现起来很简单(更改上面代码中的N),但这可能不会对您创建的特定硬件过滤器进行建模。您必须选择合适的IIR过滤器以匹配硬件过滤器的架构。

2)如果您没有选择硬件过滤器的架构,可以选择遵循其中一个规范过滤器类型的架构,以便通过butter,{{1 }}, 管他呢。

3)你可以回到用微分方程建模电路。这可以让你模拟任何滤波器电路,无论它是否遵循规范类型。如果你愿意的话,你也可以把非线性效果放在这里。

对于一阶RC滤波器,我认为任何内置滤波器类型都适合RC滤波器。我建议您使用上面的示例代码。我认为这将满足您的需求。

芯片