matlab - Matlab fir2频率响应与幅度响应不对应

标签 matlab audio filter signal-processing

我正在尝试在Matlab中使用fir2函数设计一个FIR,而我正努力获得与我要实现的幅度函数相对应的滤波器的频率响应。

这是我用于滤波器设计的代码,x是幅值响应,如图所示

fs = 48000;    %sample rate
fny = fs/2;    %Nyquist frequency
tabs = 512;    %tabs

%frequency resolution 1/3 octave, length=28
f = [0 63 80 100 125 160 200 250 315 400 500 630 800 1000 1250 1600 
2000 2500 3150 4000 5000 6300 8000 10000 12500 16000 20000 fny];

fn = f/(fny);

coeffs = fir2(tabs,fn,x); 

figure(1);
[freq_response,fc] = freqz(coeffs,tabs);
H = abs(freq_response);

subplot(2,1,1);
semilogx(fc*fny,H, 'r');
hold on;
xlim([20 20000]);
title('frequency response of fir2 filter');
xlabel('frequency [Hz]');
ylabel('magnitude [dB]');
grid on;
set(gca,'XTick',[20 50 100 200 500 1000 2000 5000 10000 20000]);

subplot(2,1,2);
semilogx(f,20*log10(x),'b');
title('desired magnitude function');
xlabel('frequency [Hz]');
ylabel('fir coefficients');
grid on;
xlim([20 20000]);
set(gca,'XTick',[20 50 100 200 500 1000 2000 5000 10000 20000]);

我究竟做错了什么?

最佳答案

首先,我们应该观察到函数 freqz 期望滤波器传递函数的分子和分母多项式系数。然后,您还可以在频率响应中指定其他参数,例如所需的点数,但这将在强制性分子和分母多项式系数之后。对于没有显式分母的FIR滤波器,隐式分母是常量1。因此,根据您的情况,调用freqz的正确方法是:

[freq_response,fc] = freqz(coeffs,1,tabs); 

请注意,默认情况下,返回的频率是将覆盖[0,pi]范围的角频率。为了获得以Hz为单位的频率,您需要使用pi重新缩放角频率(尝试这样做,但是缺少f*fny/pi因子)。另外,您可以简单地将采样率传递给freqz函数:
[freq_response,fc] = freqz(coeffs,1,tabs,fs);

然后,绘图的y轴比例还有一个问题。假设您要绘制以dB为单位的幅度响应,则应将计算出的响应H(以线性比例表示)转换为dB:
[freq_response,fc] = freqz(coeffs,1,tabs,fs);
H = abs(freq_response);
...
semilogx(fc,20*log10(H), 'r');

在同一张图上同时绘制期望的响应和计算的响应,将为您提供类似于以下内容:

enter image description here

关于matlab - Matlab fir2频率响应与幅度响应不对应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44859544/

相关文章:

shell - 比较bash中声音文件的长度

javascript - 使用 AJAX 加载内容后音频无法播放

matlab - 使用 Matlab 避免科学记数法

matlab - 在 MATLAB 中不重新缩放的情况下在轴外添加图例

apache-flex - 在多次调用的函数中增加全局变量

jquery - 具有多个类别的多重选择过滤器

python - pandas数据框的条件过滤

javascript - AngularJS ng-grid 过滤器 -- filterText 格式

python - 从 cron 中的 Matlab 进程调用 Python 脚本

matlab - 在 matlab 函数中控制冗长的想法/最佳实践