📄 iir4.m
字号:
clear all;
close all;
% 低通滤波器指标
Fp=4000; Fs=6000; Rp=1; Rs=40;
Fsample=3E4; % 100KHz采样率
% 低通滤波器数字频率(单位:pi rad):
Wp=2*Fp/Fsample;
Ws=2*Fs/Fsample;
% 椭圆滤波器阶数
[N,Wn]=ellipord(Wp,Ws,Rp,Rs);
N=2*ceil(N/2);
% 椭圆低通滤波器设计
[b,a] = ellip(N,Rp,Rs,Wn);
[h,omega] = freqz(b, a, 1024);
% 椭圆低通滤波器频响
figure( );
hh = plot(Fsample*omega/pi/2, 20*log10(abs(h) + eps));
set(hh,'linewidth',3);%,'marker','o');
grid on;
% xlabel('omega/pi');
% ylabel('Gain,dB');
title('high filter');
% 椭圆低通滤波器直接型转级联型
[ab,G]=tf2sos(b,a);
% 浮点型系数转整型系数
kk=(2^15-1); %取12bit系数,取掉一个符号位
HHH=0; % 整型系数椭圆低通滤波器频响
for n=1:N/2
BB(n,1:3)=[ab(n,1),ab(n,2),ab(n,3)];
AA(n,1:3)=[ab(n,4),ab(n,5),ab(n,6)];
A(n,1:3)=round(AA(n,1:3)/max(AA(n,1:3))*kk);% /kk;
B(n,1:3)=round(BB(n,1:3)/max(BB(n,1:3))*kk);% /kk;
%[H(n,1:1024),OMEGA]=freqz(B(n,1:3),A(n,1:3),1024);
[H,OMEGA]=freqz(B(n,1:3),A(n,1:3),1024);
HH(n,1:1024)=20*log10(abs(H')+eps);
HHH=HH(n,1:1024)+HHH;
end
%% 显示整型系数椭圆高通滤波器频响
hold on;
plot(Fsample*OMEGA/pi/2,HH,'green');
hh=plot(Fsample*OMEGA/pi/2,HHH-max(HHH),'red');
set(hh,'linewidth',2);
hold off;
AAA=A/kk;
BBB=B/kk;
xlabel('frequency in Hz'); ylabel('Decibels')
%axis([labelg1 labelg2 -95 5]);
%set(gca,'XTickMode','manual','XTick',[0;0.333;0.667;1])
%set(gca,'XTickMode','manual','XTick',[labelg1; 50; 62; 100; 120; 150])%0.15;48*4/1000;52*4/1000;0.25])
%set(gca,'XTickLabelMode','manual','XTickLabels',['0';'1/3';'2/3';'1'])
streamr = fopen('C:\Program Files\MATLAB704\work\IIR4.h','w');
%fseek(streamr,740*2*(m+4),'bof')
X=fprintf( streamr,'%6d ',A );
X=fprintf( streamr,'%6d /n' );
X=fprintf( streamr,'%6d ',B );
X=fprintf( streamr,'%6d /n' );
fclose( streamr );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -