在MATLAB中实现IIR数字滤波器设计,实现直接型,级联型和并联型的,并给出每种滤波器的幅频和相频曲线并把图汇总在一张图上
时间: 2024-12-08 12:14:03 浏览: 126
在MATLAB中设计IIR(无限 impulse response)数字滤波器,通常使用`fir1`, `fir2`, `butter`, `cheby1`, `cheby2`, `ellip`等函数来创建各种类型的滤波器,包括直接型(Direct Form I)、级联型(Cascaded Form II)和并联型(Parallel Form)。以下是简单步骤:
1. **直接型**(Direct Form I):这是最常见的IIR结构,使用前向和反馈部分组成。例如:
```matlab
[b,a] = butter(N, Wn); % Butterworth滤波器设计
```
2. **级联回路型**(Cascaded Form II):通过串联多个简单的二阶部分构成。使用`cfilter`或`tf2sos`将系统转换为SOS(Second Order Sections)形式,再用`filter`函数进行仿真:
```matlab
sos = tf2sos(b,a);
y = filter(sos, u, x); % 这里u和x是输入信号
```
3. **并联回路型**(Parallel Form):通过并联多个一阶或二阶环节。同样先设计低通滤波器,然后调整连接方式:
```matlab
bpf = butter(N, Wn, 'bandpass'); % 高通、带通或陷波滤波器
[b0, a0] = bandstop(bpf, Wn_stop); % 添加截止频率
sys = tf(b0, [1 a0]);
```
为了绘制幅频响应(Bode Plot)和相频响应(Phase Plot),可以使用`bode(sys)`或`angle(sys)`函数,然后结合`plot`命令:
```matlab
[H,F] = freqz(b,a,1024); % 获取频率响应数据
figure;
subplot(2,1,1);
semilogx(F,abs(H)); % 幅频曲线
title('Magnitude Response');
xlabel('Frequency (Hz)');
ylabel('Magnitude');
subplot(2,1,2);
semilogx(F,unwrap(angle(H))); % 相位曲线
title('Phase Response');
xlabel('Frequency (Hz)');
ylabel('Angle (degrees)');
% 或者合并两个子图到一张图上
imagesc(F, unwrap(angle(H)), abs(H));
colorbar; % 显示颜色条
```
阅读全文