根据文件要求写出相应代码
时间: 2024-11-27 19:08:12 浏览: 5
根据《实验五 FIR数字滤波器设计.doc》的要求,以下是一个MATLAB代码示例,用于设计一个FIR滤波器,并对给定信号进行滤波处理:
### MATLAB代码示例
```matlab
% 实验五 FIR数字滤波器设计
% 设计指标
wp = 0.3 * pi; % 通带截止频率
ws = 0.4 * pi; % 阻带截止频率
Rp = 1; % 通带波纹 (dB)
As = 40; % 阻带衰减 (dB)
% 选择窗函数
% 这里选择汉明窗作为示例
N = fir1ord(wp, ws, Rp, As); % 计算滤波器阶数
h = fir1(N, wp/pi, 'low', hamming(N+1)); % 设计FIR滤波器
% 绘制滤波器频率响应
figure;
freqz(h, 1);
% 输入信号
n = 0:100; % 时间序列
w1 = 0.2 * pi; % 通带内的频率
w2 = 0.5 * pi; % 阻带内的频率
x = cos(w1 * n) + cos(w2 * n); % 输入信号
% 滤波后的输出信号
y = filter(h, 1, x);
% 绘制结果
figure;
subplot(2, 2, 1);
plot(n, x);
title('输入信号x(n)时域波形');
xlabel('时间样本');
ylabel('幅值');
subplot(2, 2, 2);
X = fft(x);
f = linspace(0, pi, length(X));
plot(f, abs(X));
title('输入信号x(n)幅度谱');
xlabel('频率');
ylabel('幅度');
subplot(2, 2, 3);
plot(n, y);
title('输出信号y(n)时域波形');
xlabel('时间样本');
ylabel('幅值');
subplot(2, 2, 4);
Y = fft(y);
plot(f, abs(Y));
title('输出信号y(n)幅度谱');
xlabel('频率');
ylabel('幅度');
```
### 代码说明
1. **设计指标**:
- `wp` 和 `ws` 分别是通带和阻带的截止频率。
- `Rp` 是通带波纹,单位为分贝 (dB)。
- `As` 是阻带衰减,单位为分贝 (dB)。
2. **选择窗函数**:
- 使用 `fir1ord` 函数计算滤波器的阶数 `N`。
- 使用 `hamming` 窗函数设计FIR滤波器。
3. **绘制滤波器频率响应**:
- 定义时间序列 `n`。
- 定义两个频率 `w1` 和 `w2`,分别位于通带和阻带内。
- 构造输入信号 `x`。
5. **滤波后的输出信号**:
- 使用 `filter` 函数对输入信号进行滤波,得到输出信号 `y`。
6. **绘制结果**:
- 使用 `subplot` 函数创建四个子图,分别显示输入信号的时域波形、输入信号的幅度谱、输出信号的时域波形和输出信号的幅度谱。
### 注意事项
- 根据实际需求,可以选择不同的窗函数(如矩形窗、海宁窗等),并调整相应的参数。
- 可以通过修改 `wp`、`ws`、`Rp` 和 `As` 来改变滤波器的设计指标。
- 在实际应用中,可能需要进一步优化滤波器的设计,以满足特定的应用需求。
希望这个代码示例对你有所帮助!如果有任何问题,请随时提问。
阅读全文