调用 Matlab工具箱函数remezord和 remez 设计线性相位高通FIR滤波器,实现对模拟信号的采样序列x(n)的数字高通滤波处理。设计指标要求:采样频率为16kHz;通带截止频率为5.5 kHz,通带最小衰减为1 dB;过渡带宽度小于或等于 3.5 kHz,阻带最小衰减为75dB。列出 h(n)的序列数据,画出损耗函数曲线,并检验设计结果。(
时间: 2024-02-16 14:04:37 浏览: 468
数字信号处理大作业1
好的,我能够帮你解答这个问题。首先,我们可以使用Matlab中的remezord函数来确定所需的滤波器阶数和截止频率,然后再使用remez函数来计算滤波器系数。
根据所给的设计指标,我们可以得到以下参数:
采样频率 fs = 16kHz
通带截止频率 f1 = 5.5 kHz
通带最小衰减 Ap = 1 dB
过渡带宽度 delta_f = 3.5 kHz
阻带最小衰减 As = 75 dB
根据这些参数,我们可以使用remezord函数来计算滤波器的阶数和截止频率:
```matlab
delta_w = delta_f / fs * 2*pi; % 过渡带带宽
f2 = f1 + delta_f/2; % 阻带截止频率
dev = [10^(-Ap/20), 10^(-As/20)]; % 通带和阻带的最大误差
[n,fo,ao,w] = remezord([f1,f2]/(fs/2), [1 0], dev, fs);
```
上述代码中,我们首先计算了过渡带的带宽delta_w,然后根据阻带截止频率f2计算出阻带边缘的频率,最后使用remezord函数计算出所需的滤波器阶数n、截止频率fo、通带和阻带的系数ao和频率响应w。
接下来,我们可以使用remez函数来计算滤波器系数:
```matlab
b = remez(n,fo,ao,w);
```
最后,我们可以输出滤波器系数h(n)的序列数据:
```matlab
disp(b);
```
除此之外,我们还可以计算滤波器的幅频响应和相位响应,并画出其损耗函数曲线:
```matlab
[H,w] = freqz(b,1,1024,fs);
plot(w/1000,20*log10(abs(H))); % 幅频响应
xlabel('Frequency (kHz)');
ylabel('Magnitude (dB)');
title('Magnitude Response');
figure;
plot(w/1000,unwrap(angle(H))*180/pi); % 相位响应
xlabel('Frequency (kHz)');
ylabel('Phase (degrees)');
title('Phase Response');
```
最后,我们可以使用fvtool函数来检验设计结果:
```matlab
fvtool(b,1);
```
阅读全文