我正在使用 CIC-decimator 和 sigma-delta 实现。现在我想检查它的频率响应,让我们说:我用Python实现它们,我没有滤波器系数。所以我在 matlab 中用方法“fft+abs+20*log10(x)”模拟这个,如下所示:
clear all; close all; clc
R = 1; % Decimation Factor
D = 4; % Comb Delay
S = 3; % Sections
cicDecim = dsp.CICDecimator(R,D,S);
cicdec.FixedPointDataType = 'Minimum section word lengths';
cicdec.OutputWordLength = 16;
N = 512
x = [1;zeros(N-1,1)]; % unit impluse respose
y = double(cicDecim(x));
fy = 20 * log10(abs(fft(y)));
plot(fy)
h=fvtool(cicDecim,'Fs',16000);
h.NormalizeMagnitudeto1 = 'on';
当R = 1时,一切正常,我可以看到两者几乎相同(忽略大小,只关注形状):
但是当 R > 1, 像 2 时,它们是不同的(看来我失去了一些侧瓣): 我不太擅长dsp,也不知道我的代码出了什么问题,花了我两天时间,我需要帮助T_T~~~~~~ PS:我只是想检查一下我自己基于单位脉冲响应的频率响应是否正确,如果正确,两者应该是相同的。
已解决,因为R,原来的D应该乘以R来保留Comb属性。