Получилось рассчитывать фильтры с коэффициентами менее 8-ми разрядов. В качестве примера - 4-х и 7-ми разрядные коэффициенты с ГВЗ, близкой к константе в полосе пропускания.
7-ми разрядные коэффициенты:
Код
clear all;
close all;
m=10;
n=6;
mat0 = zeros(m,n);
mat0= [ 0.96875 0.71875 0.46875 1 -0.84375 0.375
-0.375 -0.28125 -0.3125 1 -0.03125 0.28125
0.28125 -0.625 -0.96875 1 -0.15625 0
0.28125 -0.875 -0.875 1 -0.09375 0
-0.125 0.5625 0.6875 1 -0.09375 0.46875
0.21875 0 -1 1 -0.4375 0.03125
-0.09375 0.21875 -0.40625 1 -0.4375 0
0.4375 -0.6875 -0.9375 1 0.125 0.15625
-0.09375 0.15625 -0.25 1 -0.40625 0
0.34375 -0.6875 -0.96875 1 0.125 0.625
];
ff = 0:0.0005:0.5;
f=ones(1000,1);
g=zeros(1000,1);
r=zeros(m,2);
radius=zeros(m,1);
figure(11);
plot(exp(j*2*pi/100*(0:99)));
hold on;
grid on;
for i=m:-1:1
f=f.*freqz(mat0(i,1:3),mat0(i,4:6),1000);
g=g+grpdelay(mat0(i,1:3),mat0(i,4:6),1000);
plot(roots(mat0(i,4:6)+0.00000000001*1j),'rx');
end;
figure(22);
plot(20*log10(abs(f)));
grid on;
axis([0 1000 -40 2])
figure(33);
plot(g);
grid on;
4-рех разрядные коэффициенты:
Код
clear all;
close all;
m=10;
n=6;
mat0 = zeros(m,n);
mat0= [0.75 0.75 0.5 1 -0.75 0.25
-0.25 -0.75 0 1 0 0.5
0.5 -0.5 -0.75 1 -0.25 0
0.25 -0.75 -1 1 0 0
0 0.5 0.5 1 0 0.25
0 0 -1 1 -0.5 0
0 0.25 -0.5 1 -0.25 0
0 -0.5 -1 1 0 0
0 0 -0.25 1 -0.25 0
0 0.5 0.75 1 0 0.5
];
ff = 0:0.0005:0.5;
f=ones(1000,1);
g=zeros(1000,1);
r=zeros(m,2);
radius=zeros(m,1);
figure(11);
plot(exp(j*2*pi/100*(0:99)));
hold on;
grid on;
for i=m:-1:1
f=f.*freqz(mat0(i,1:3),mat0(i,4:6),1000);
g=g+grpdelay(mat0(i,1:3),mat0(i,4:6),1000);
plot(roots(mat0(i,4:6)+0.00000000001*1j),'rx');
end;
figure(22);
plot(20*log10(abs(f)));
grid on;
axis([0 1000 -40 2])
figure(33);
plot(g);
grid on;
Прошу критики.