一、简介
低通滤波器
:是一种信号处理的滤波工具,用于从输入信号中去除高频部分,只保留低频部分。即只容许通过低于截止频率的信号, 而减弱或消除高于截止频率的信号(通低频阻高频)。
工作原理:基于信号的频率成分,信号可以看作是由不同频率的正弦波或复杂波形组成的。
以下是低通滤波器的常见应用:
- 音频处理:在音频处理中,低通滤波器用于去除高频噪声,使声音更清晰,同时保留音频信号的基本特征。
- 通信系统:在调制和解调过程中,低通滤波器用于恢复原始信号或将信号调整为适合传输的频率范围。
- 图像处理:在数字图像处理中,低通滤波器可用于平滑图像,减少噪声,以改善图像质量。
- 生物信号处理:在生物医学应用中,低通滤波器用于处理心电图(ECG)或脑电图(EEG)等生物信号,以提取有用的生理信息。
- 控制系统:在控制系统中,低通滤波器可用于减小测量误差或过程噪声的影响。
低通滤波器的类型:
- (1)
理想低通滤波器(Ideal Lowpass Filter)
:理想低通滤波器的频率响应是在截止频率之前完全允许所有低频信号通过,而在截止频率之后完全阻止所有高频信号。它在理论上是最简单的低通滤波器,但在实际应用中不常见,因为它需要无限的频带宽度,并且无法通过现实的电路来实现。- (2)
巴特沃斯滤波器(Butterworth Filter)
:巴特沃斯滤波器是一种常见的低通滤波器,具有光滑的频率响应曲线,没有急剧的衰减或媒介。它通过一定的阶数来控制滤波器的频率特性。它的目标是在截止频率附近提供均匀的响应,以尽量保留信号的幅度。- (3)
切比雪夫滤波器(Chebyshev Filter)
:切比雪夫滤波器也是一种常见的低通滤波器,它允许更多的波动或纹波在截止频率附近,以换取更陡峭的频率特性。它通常用于需要更高的阻抗匹配或更快的信号截断的应用。
二、项目实战
步骤一:提取低通滤波器的系数矩阵
打开工具: MATLAB - APP - Filter Designer
参数设置:
- 滤波器类型:
Response Type - Lowpass
- 滤波器设计方法:
Design Method - FIR - Window
- 滤波器阶数:
Filter Order - Specify order
注意:滤波器长度等于阶数+1;
(1)在信号处理中,阶数通常用于表示滤波器的频率响应的陡峭程度。
(2)若低通滤波器的阶数越高,则频率响应就越陡峭。也就是说,其能够更有效地滤除高频噪声或信号成分,从而保留低频信号,但也可能引入更多的时域延迟。故滤波器的阶数需要根据具体的应用场景和信号特性来确定。Options - Window - Hamming
- 频率响应参数:设置采样频率:
Fs
;设置截止频率:Fc
(仪器中获取)- 点击
Design Filter
生成低通滤波器;
- View:时域/频域的波形;
- Nagnitude Response(dB):查看滤波器曲线;
- Current Filter Information:查看滤波器信息;- 点击
文件 - Export
导出低通滤波器(系数矩阵);
- (默认)保存到 Workspace;
- (默认)以数组形式保存 Coefficients;
- (默认)Variable Names:Num(可自主命名);
步骤二:采用低通滤波器对信号进行滤波
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% (1)获取数据
clc;clear;close all;
raw_signal = randn(1, 500); % randn(行, 列):获取正态分布的随机数
raw_signal_len = length(raw_signal); % 获取数组的长
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% (2)低通滤波器(Fs = 100Hz; Fc = 10Hz)
% 特点:系数矩阵对折对称 ———— 采用上述操作后获取
filter = [0, -0.0014, -0.0056, -0.0100, -0.0070, ...
0.0119, 0.0511, 0.1052, 0.1597, 0.1961, ...
0.1961, 0.1597, 0.1052, 0.0511, 0.0119, ...
-0.0070, -0.0100, -0.0056, -0.0014, 0];
filter_len = length(filter); % 低通滤波器长度
filtered_signal = [0, 0]; % 滤波后信号初始化
for ii = 1:raw_signal_len - filter_len
sum_signal = 0;
for jj = 1:filter_len
sum_signal = sum_signal + raw_signal((ii - 1) + jj) * filter((filter_len + 1) - jj);
filtered_signal(ii) = sum_signal;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% (3)画图
subplot(2, 1, 1);
plot(1:raw_signal_len, raw_signal, 'Color', 'b');
title('原始曲线');
subplot(2, 1, 2);
plot(1:raw_signal_len - filter_len, filtered_signal, 'Color', 'r');
title('滤波曲线');
% subplot(m, n, p); 将当前图窗划分为 m×n 网格,并在 p 指定的位置创建坐标区。