MATLAB语言生成一个CIC滤波器
时间: 2023-11-19 17:06:46 浏览: 108
以下是使用 MATLAB 生成一个 CIC (cascaded integrator-comb) 滤波器的示例代码:
```matlab
% 设置CIC滤波器参数
R = 8; % 采样率降低的因子
M = 1; % CIC滤波器级数
N = 4; % CIC滤波器每级的积分器阶数
Fs = 100e6; % 输入信号采样率
% 计算CIC滤波器的参数
Fpass = Fs / (2*R); % 通带截止频率
Fstop = Fpass * 1.2; % 阻带截止频率
Ap = 1; % 通带最大衰减
Ast = 80; % 阻带最小衰减
Dev = [(10^(0.05*Ap)-1)/(10^(0.05*Ap)+1) , 10^(-0.05*Ast) , (10^(0.05*Ap)-1)/(10^(0.05*Ap)+1)]; % 通带纹波、阻带衰减、过渡带宽度的设定
Fc = (Fpass + Fstop) / 2; % 截止频率
NB = ceil(log2(Fs/Fc)); % 滤波器比特位数
D = ceil(log2(R)); % 级联滤波器比特位数
NT = ceil(NB/D) * M * N; % 总延迟时间
h = firrcos(NT, Fpass/(Fs/2), 0.25, Dev, 'rolloff', 'sqrt'); % 低通滤波器设计
% 在命令窗口显示CIC滤波器参数
disp(['R = ', num2str(R)]);
disp(['M = ', num2str(M)]);
disp(['N = ', num2str(N)]);
disp(['Fs = ', num2str(Fs)]);
disp(['Fpass = ', num2str(Fpass)]);
disp(['Fstop = ', num2str(Fstop)]);
disp(['Ap = ', num2str(Ap)]);
disp(['Ast = ', num2str(Ast)]);
disp(['Fc = ', num2str(Fc)]);
disp(['NB = ', num2str(NB)]);
disp(['D = ', num2str(D)]);
disp(['NT = ', num2str(NT)]);
% 绘制CIC滤波器幅度特性曲线
fvtool(h, 1, 'Fs', Fs, 'Analysis', 'freq', 'MagnitudeDisplay', 'Magnitude', 'DesignMethod', 'firrcos');
```
这段代码中,我们首先设置了 CIC 滤波器的参数,包括采样率降低的因子、级数、积分器阶数等。然后,我们根据这些参数计算出了滤波器的各种参数,包括通带和阻带截止频率、通带最大衰减和阻带最小衰减等。接下来,我们使用 `firrcos` 函数设计了一个低通滤波器,并在命令窗口中显示了 CIC 滤波器的各种参数,最后使用 `fvtool` 函数绘制了滤波器的幅度特性曲线。
阅读全文