设定截止频率D0 = 90,试分别构建384×384的频域理想低通滤波器(ILPF)和2阶Butterworth低通滤波器(BLPF)。编写MATLAB代码,分别画出它们的频域滤波器响应3D图及其对应的2D投影平面图
时间: 2024-10-25 07:03:26 浏览: 89
在MATLAB中,我们可以使用`fir1`函数来创建理想低通滤波器(ILPF),对于2阶Butterworth低通滤波器(BLPF),我们可以使用`butter`和`designfilt`函数。首先需要安装Signal Processing Toolbox。
**构造理想低通滤波器 (ILPF)**
```matlab
D0 = 90; % 截止频率
f_s = 384; % 采样频率,假设等于图像尺寸的一半(因为一半的频率范围)
cutoff_freq = D0 / f_s;
d = fir1(1, cutoff_freq); % 创建一个单位冲激响应,理想低通
% 生成滤波器系数
hilbert_filter = hilbert(d);
```
**构造2阶Butterworth低通滤波器 (BLPF)**
```matlab
[N,F] = buttord(cutoff_freq, 1/(2*f_s), 's', 60); % 设定品质因数Q
b_bp = butter(N, [0 cutoff_freq], 'low'); % 创建滤波器系数
blpf_filter = filter(b_bp, 1, hilbert_filter);
```
**绘制3D频域滤波器响应**
```matlab
figure;
imagesc(angle(blpf_filter)); % 对于BLPF,角度表示滤波响应
xlabel('Frequency Index');
ylabel('Time Index');
zlabel('Phase Response');
title('Butterworth Lowpass Filter');
figure;
imagesc(abs(hilbert_filter)); % 对于ILPF,幅值表示理想响应
xlabel('Frequency Index');
ylabel('Time Index');
title('Ideal Lowpass Filter');
```
**绘制2D投影平面图**
```matlab
% 幅度投影图
figure;
plot(abs(blpf_filter(:, round(f_s/2)))); % BLPF幅度在中心频率
title('Butterworth LPF Amplitude Response at Center Frequency');
% 理想低通幅值投影
figure;
plot(abs(hilbert_filter(:, round(f_s/2)))); % ILPF同位置
title('Ideal LPF Amplitude Response at Center Frequency');
```
以上代码会生成两个滤波器的响应3D图以及它们在中心频率处的2D投影图。
阅读全文