简单low/high过滤matlab
Simple low/high filtering matlab
谁能帮我做另一个 matlab 项目:
是否可以像 RC 电路一样创建一个简单的低通滤波器?例如,如果我们创建一个正弦波,如 y=10*sin(2*pift)。
我可以只用截止频率过滤信号,以便能够看到过滤后的信号的样子(对于幅度衰减)吗?
因此,当我输入一些信息(例如 f = 截止)并绘制过滤后的信号时,这必须将输入信号的振幅降低 30%?
我一直在寻找 butter 和 cheby 之类的函数,但它们似乎进行了其他类型的过滤,例如从信号中去除噪声。我只想要一些简单的图(输入和输出)来展示 RC、RL 低通和高通滤波器的原理。
RC电路是一阶滤波器。为了近似一阶硬件滤波器,我通常使用 IIR 滤波器。巴特沃斯滤波器通常是我的 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
、cheby1
,或其他。
3) 您可以返回使用微分方程对电路建模。这将使您可以对任何滤波器电路进行建模,无论它是否遵循规范类型。如果需要,您也可以在此处放置非线性效果。
不过,对于一阶 RC 滤波器,我认为任何内置滤波器类型都可以作为 RC 滤波器的合适模型。我建议您使用我上面的示例代码。我想它会满足你的需求。
芯片
谁能帮我做另一个 matlab 项目:
是否可以像 RC 电路一样创建一个简单的低通滤波器?例如,如果我们创建一个正弦波,如 y=10*sin(2*pift)。
我可以只用截止频率过滤信号,以便能够看到过滤后的信号的样子(对于幅度衰减)吗?
因此,当我输入一些信息(例如 f = 截止)并绘制过滤后的信号时,这必须将输入信号的振幅降低 30%?
我一直在寻找 butter 和 cheby 之类的函数,但它们似乎进行了其他类型的过滤,例如从信号中去除噪声。我只想要一些简单的图(输入和输出)来展示 RC、RL 低通和高通滤波器的原理。
RC电路是一阶滤波器。为了近似一阶硬件滤波器,我通常使用 IIR 滤波器。巴特沃斯滤波器通常是我的 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
、cheby1
,或其他。
3) 您可以返回使用微分方程对电路建模。这将使您可以对任何滤波器电路进行建模,无论它是否遵循规范类型。如果需要,您也可以在此处放置非线性效果。
不过,对于一阶 RC 滤波器,我认为任何内置滤波器类型都可以作为 RC 滤波器的合适模型。我建议您使用我上面的示例代码。我想它会满足你的需求。
芯片