使用单位脉冲函数获取抽取滤波器的频率响应

问题描述 投票:0回答:1

我正在使用 CIC-decimatorsigma-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:我只是想检查一下我自己基于单位脉冲响应的频率响应是否正确,如果正确,两者应该是相同的。

filter signal-processing
1个回答
0
投票

已解决,因为R,原来的D应该乘以R来保留Comb属性。

© www.soinside.com 2019 - 2024. All rights reserved.