2015-01-11 53 views
2

有人可以帮助我的另一个matlab项目:简单的低/高滤波matlab

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

我可以用截止频率过滤信号以便能够看到滤波后的信号是怎样的(对于振幅衰减)?

因此,当我输入一些信息,例如f = cutoff并绘制滤波后的信号时,必须将输入信号的幅度降低30%。

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

+0

可能更适合http://dsp.stackexchange.com。你正在使用电脑,所以你必须做一个数字滤波器。数字滤波器只能逼近RC滤波器的行为,所以问题的答案取决于您的目标是什么。 –

回答

1

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

下面是与所述截止频率是相同的作为信号频率的示例,因此滤波的信号应该是3分贝降...

%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)如果您还没有选择适合您的硬件过滤器的体系结构,那么您可以选择遵循其中一种规范过滤器类型的体系结构,以便通过buttercheby1或其他类型轻松进行建模。

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

对于一阶RC滤波器,我认为任何内置的滤波器类型对于RC滤波器来说都是足够好的模型。我建议你玩我上面的示例代码。我认为它会满足你的需求。

芯片