前言
一种ADC采样算法,中位值平均滤波+递推平均滤波_递推中位值滤波法-CSDN博客
之前对数字信号滤波有了很浅的接触。
最近稍微研究了滤波器,想用模拟和数字的形式来简单理解一下,记录在这里。
有纰漏请指出,转载请说明。
学习交流请发邮件 1280253714@qq.com
参考
【动态系统的建模与分析】9_一阶系统的频率响应_低通滤波器_Matlab/Simulink分析_哔哩哔哩_bilibili
从最基本的单元开始:模拟滤波器设计--无源RC滤波器_哔哩哔哩_bilibili
滤波器设计工具 | 滤波器设计向导 | Analog Devices
一阶滤波器的定义
一阶滤波器(First-Order Filter)是滤波器的一种基本类型,其特点是在连续时间域或离散时间域中,滤波器的传递函数或差分方程具有一阶的形式。
连续时间域:在连续时间域中,一阶滤波器的传递函数通常具有如下形式:
其中,s 是复频率变量,a0 和 a1 是常数。
离散时间域:在离散时间域中,一阶滤波器的差分方程或传递函数通常具有如下形式:
或者
其中,y[n] 是输出信号,x[n] 是输入信号,α 和 a1 是常数,z 是复频率变量。
为什么需要一阶滤波器
一阶滤波器在信号处理和控制系统中有多种应用,其主要原因包括:
- 简单性:一阶滤波器具有简单的数学模型,容易实现和分析。
- 平滑性:一阶滤波器能够平滑输入信号中的高频噪声或变化,使输出信号更加平滑。
- 延迟性:一阶滤波器引入了一定的时间延迟,这在某些应用中是有益的,例如用于稳定控制系统或模拟某些物理系统的行为。
- 可调性:通过调整一阶滤波器的参数(如 α 或 a1),可以控制滤波器的截止频率、带宽或响应时间等特性。
- 稳定性:一阶滤波器在设计和实现时,容易确保其稳定性。
一阶滤波器通常用于各种实际应用中,如音频处理、图像处理、控制系统、传感器数据预处理等。它们可以是低通滤波器(允许低频信号通过,抑制高频信号)、高通滤波器(允许高频信号通过,抑制低频信号)、带通滤波器(允许特定频率范围内的信号通过)或带阻滤波器(抑制特定频率范围内的信号)。
一阶RC滤波器的电路模型与推导
模型搭建与仿真
这里选取τ=RC=1时的传递函数
幅相特性曲线
% 定义传函
numerator = [1]; % 分子系数
denominator = [1 1]; % 分母系数
sys = tf(numerator, denominator); % 创建传函模型
% 绘制幅相特性曲线
bode(sys);
伯德图
从一阶RC低通滤波器的伯德图(Bode Plot)中,我们可以观察到以下几个关键的信息和特性:
-
截止频率(Cutoff Frequency):伯德图中的幅值曲线(Magnitude Plot)从0dB开始下降,当达到某个频率时,其幅值下降3dB(即下降一半,因为20log(0.5) = -6dB)。这个点就是滤波器的截止频率。对于一阶RC低通滤波器,截止频率(fc)的计算公式为:fc = 1 / (2πRC),其中R是电阻值,C是电容值。在截止频率之前,信号基本不受衰减地通过;而在截止频率之后,信号的幅度随频率的增加而逐渐减小。
-
相位延迟(Phase Shift):伯德图的相位曲线(Phase Plot)显示了信号通过滤波器后相对于原始信号的相位延迟。对于一阶RC低通滤波器,随着频率的增加,相位延迟逐渐增加,但永远不会超过90度。
-
滤波器类型:伯德图清晰地表明滤波器是低通滤波器,因为随着频率的增加,幅值响应逐渐减小。
-
滤波器性能:通过伯德图,我们可以评估滤波器的性能,例如过渡带宽(即幅值从0dB下降到-3dB的频率范围)和阻带衰减(即高频信号的抑制程度)。这些信息对于选择合适的滤波器参数以满足特定应用需求非常重要。
离散信号的代码实现
% 采样频率(Hz)
Fs = 1000;
% 时间向量(秒)
t = 0:1/Fs:1-1/Fs;
% 只取时间向量的前1/3
t_third = t(1:floor(length(t)/3));
% 正弦波频率(Hz)
f_signal = 50;
% 生成没有噪声的正弦波信号
x_signal = sin(2*pi*f_signal*t);
x_signal_third = x_signal(1:floor(length(t)/3));
% 添加高频噪声(例如使用随机噪声)
x_noise = 0.3 * randn(size(t));
x_noisy = x_signal + x_noise;
x_noisy_third = x_noisy(1:floor(length(t)/3));
% 截止频率(Hz),例如80Hz(低于噪声频率但高于信号频率)
fc = 80;
% 计算归一化截止频率(Nyquist频率的一半为1)
Wn = fc / (Fs / 2);
% 一阶滤波器的系数(对于离散时间系统,我们使用差分方程)
% alpha 是差分方程中的系数
alpha = exp(-Wn);
% 初始化输出信号和之前的样本(用于差分方程)
y_filtered = zeros(size(x_noisy));
y_prev = 0;
% 滤波过程(使用差分方程)
for n = 1:length(x_noisy)
y_filtered(n) = alpha * y_prev + (1 - alpha) * x_noisy(n);
y_prev = y_filtered(n);
end
% 滤波后的信号也只取前1/3
y_filtered_third = y_filtered(1:floor(length(t)/3));
% 绘制原始信号、带噪声的信号和滤波后的信号的前1/3部分
figure;
subplot(3,1,1);
plot(t_third, x_signal_third);
title('Original Signal (Sine Wave) - First Third');
xlabel('Time (s)');
ylabel('Amplitude');
grid on;
subplot(3,1,2);
plot(t_third, x_noisy_third);
title('Signal with Noise - First Third');
xlabel('Time (s)');
ylabel('Amplitude');
grid on;
subplot(3,1,3);
plot(t_third, y_filtered_third);
title('Filtered Signal (1st Order Lowpass) - First Third');
xlabel('Time (s)');
ylabel('Amplitude');
grid on;