【基础】MATLAB中的信号滤波:实现低通、高通和带通滤波器
发布时间: 2024-05-21 20:22:27 阅读量: 187 订阅数: 215
# 2.1 低通滤波器设计
低通滤波器允许低频分量通过,而衰减高频分量。在MATLAB中,可以使用`butter`函数设计低通滤波器。`butter`函数接受三个参数:
- **N:**滤波器阶数
- **Wn:**截止频率(归一化到单位圆)
- **type:**滤波器类型('low'、'high'、'bandpass'、'bandstop')
对于低通滤波器,`type`参数设置为'low'。例如,以下代码设计一个阶数为5,截止频率为0.2的低通滤波器:
```
N = 5;
Wn = 0.2;
[b, a] = butter(N, Wn, 'low');
```
其中,`b`和`a`分别为滤波器的分子和分母多项式系数。
# 2. MATLAB滤波器设计
### 2.1 低通滤波器设计
低通滤波器允许低频信号通过,而衰减高频信号。MATLAB中提供了两种常见的低通滤波器设计方法:巴特沃斯滤波器和切比雪夫滤波器。
#### 2.1.1 巴特沃斯低通滤波器
巴特沃斯低通滤波器的传递函数为:
```
H(s) = 1 / (1 + (s/ωc)^2n)
```
其中:
* `ωc` 是截止角频率
* `n` 是滤波器的阶数
**参数说明:**
| 参数 | 描述 |
|---|---|
| `ωc` | 截止角频率,单位为 rad/s |
| `n` | 滤波器的阶数,决定滤波器的陡度 |
**代码块:**
```
% 设计巴特沃斯低通滤波器
[b, a] = butter(n, ωc);
```
**逻辑分析:**
`butter` 函数用于设计巴特沃斯滤波器。它需要两个参数:滤波器的阶数 `n` 和截止角频率 `ωc`。该函数返回两个系数向量 `b` 和 `a`,用于表示滤波器的传递函数。
#### 2.1.2 切比雪夫低通滤波器
切比雪夫低通滤波器的传递函数为:
```
H(s) = 1 / (1 + ε^2 * (s/ωc)^2n * C_n(s/ωc))
```
其中:
* `ωc` 是截止角频率
* `n` 是滤波器的阶数
* `ε` 是通带纹波
* `C_n` 是第 `n` 阶切比雪夫多项式
**参数说明:**
| 参数 | 描述 |
|---|---|
| `ωc` | 截止角频率,单位为 rad/s |
| `n` | 滤波器的阶数,决定滤波器的陡度 |
| `ε` | 通带纹波,表示滤波器在通带内的最大允许增益偏差 |
**代码块:**
```
% 设计切比雪夫低通滤波器
[b, a] = cheby1(n, ε, ωc);
```
**逻辑分析:**
`cheby1` 函数用于设计切比雪夫滤波器。它需要三个参数:滤波器的阶数 `n`、通带纹波 `ε` 和截止角频率 `ωc`。该函数返回两个系数向量 `b` 和 `a`,用于表示滤波器的传递函数。
# 3. MATLAB滤波器实现
### 3.1 滤波器应用于时域信号
#### 3.1.1 低通滤波器应用
**代码块:**
```
% 导入时域信号
signal = load('signal.mat');
signal = signal.signal;
% 设计低通滤波器
Fs = 1000; % 采样频率
Fpass = 100; % 通带截止频率
Fstop = 200; % 阻带截止频率
Apass = 1; % 通带衰减
Astop = 60; % 阻带衰减
N = 6; % 滤波器阶数
[b, a] = butter(N, Fpass/(Fs/2), 'low');
% 应用低通滤波器
filtered_signal = filtfilt(b, a, signal);
% 绘制原始信号和滤波后信号
figure;
plot(signal, 'b', 'LineWidth', 1.5);
hold on;
plot(filtered_signal, 'r', 'LineWidth', 1.5);
xlabel('Time (s)');
ylabel('
```
0
0