如下代码生成了一个什么滤波器fl = 250; fu = 400; Wl = 2*pi*fl/fs; Wu = 2*pi*fu/fs; Wp = Wl/pi; Ws = Wu/pi; Rp = 1; Rs = 25; [N,Wc] = buttord(Wp,Ws,Rp,Rs); [B,A] = butter(N,Wc,'low'); [H,WH] = freqz(B,A,4096,fs); freqz(h) % 构造循环拆分滤波器 B1 = B; A1 = A; for i = 1:N-1 b1 = conv(B1, A); a1 = conv(A1, A); end % 构造反馈滤波器 B2 = fliplr(B1); A2 = fliplr(A1);% 计算零相位滤波器系数 h = B1; for i = 1:N-1 h = conv(h, B2); h = conv(h, A); end
时间: 2024-01-19 19:04:06 浏览: 131
fl_2k_diplexer_and_amp:fl_2k双工器和放大器+ 27dbm射频70cm和2m,带通滤波器
这段代码生成了一个Butterworth滤波器,通过对其进行循环拆分和反馈,得到了一个零相位滤波器。
具体来说,代码中定义了一个截止频率为250Hz到400Hz的Butterworth滤波器,并将其系数存储在B和A变量中。然后使用freqz函数计算了该滤波器的频率响应,并将结果存储在H和WH变量中。
接下来,代码使用循环拆分的方法将B和A分别与自身进行卷积,得到了B1和A1变量。然后,代码使用fliplr函数将B1和A1反转,并将其分别存储在B2和A2变量中,用于构造反馈滤波器。
最后,代码使用循环拆分和反馈的方法,将B1、B2和A依次进行卷积,得到了零相位滤波器的系数,并将其存储在h变量中。最后,使用freqz函数绘制了零相位滤波器的频率响应。
阅读全文