demo_critere_filtre.m
2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
clear all;
global N = 2048;
function rejection = rejection_criteria(log_data, fc)
N = length(log_data);
% Index of the first point in the tail fir
index_tail = round((fc + 0.1) * N) + 1;
% Index of th last point on the band
index_band = round((fc - 0.1) * N);
% Get the worst rejection in stopband
worst_rejection = -max(log_data(index_tail:end));
% Get the total of deviation in passband
worst_band = mean(-1 * abs(log_data(1:index_band)));
% Compute the rejection
passband_malus = 10; % weighted value to penalize the deviation in passband
rejection = worst_band * passband_malus + worst_rejection;
endfunction
function [h, log_curve, rejection] = compute_freqz(filename)
global N;
b = load(filename);
[h, w] = freqz(b, 1, N/2);
mag = abs(h);
mag = mag ./ mag(1);
log_curve = 20 * log10(mag);
rejection = rejection_criteria(log_curve, 0.5);
endfunction
# Stages
hTotal = ones(N/2, 1);
% [h, curve1, c1] = compute_freqz("filters/fir1/fir1_033_int08"); % 1) -8dB
% [h, curve1, c1] = compute_freqz("filters/fir1/fir1_037_int08"); % 2) -9dB
[h, curve1, c1] = compute_freqz("filters/fir1/fir1_037_int08");
hTotal = hTotal .* h;
% [h, curve2, c2] = compute_freqz("filters/fir1/fir1_033_int10"); % 1) -8dB
% [h, curve2, c2] = compute_freqz("filters/fir1/fir1_033_int10"); % 2) -9dB
[h, curve2, c2] = compute_freqz("filters/fir1/fir1_033_int10");
hTotal = hTotal .* h;
% [h, curve3, c3] = compute_freqz("filters/fir1/fir1_033_int08");
% hTotal = hTotal .* h;
% [h, curve4, c4] = compute_freqz("filters/fir1/fir1_033_int10");
% hTotal = hTotal .* h;
% [h, curve5, c5] = compute_freqz("filters/fir1/fir1_015_int11");
% hTotal = hTotal .* h;
# Log total
mag = abs(hTotal);
mag = mag ./ mag(1);
log_freqz = 20 * log10(mag);
cTotal = rejection_criteria(log_freqz, 0.5);
[ c1+c2 cTotal ]
% [ c1+c2+c3+c4+c5 cTotal ]
clf;
f_axe = [1:N/2] * 2/N;
hold on;
color = [0/255 114/255 189/255];
plot(f_axe, curve1, "linewidth", 1.5, "color", color);
plot([0 1], [-c1 -c1], "--", "linewidth", 1.5, "color", color);
color = [217/255 83/255 25/255];
plot(f_axe, curve2, "linewidth", 1.5, "color", color);
plot([0 1], [-c2 -c2], "--", "linewidth", 1.5, "color", color);
% plot(f_axe, curve3, "linewidth", 1.5);
% plot(f_axe, curve4, "linewidth", 1.5);
% plot(f_axe, curve5, "linewidth", 1.5);
color = [237/255 177/255 32/255];
plot(f_axe, log_freqz, "linewidth", 1.5, "color", color);
plot([0 1], [-cTotal -cTotal], "--", "linewidth", 1.5, "color", color);
plot([0 1], [-(c1 + c2) -(c1 + c2)], ":", "linewidth", 1.5, "color", color);
plot([0.4 0.4], [-500 50], "k:")
plot([0.6 0.6], [-500 50], "k:")
ylim([-200 10])
hold off;
xlabel("Normalized Frequency (a.u.)")
ylabel("Rejection (dB)")
legend("Reponse of 1st filter", "Rejection of 1st filter", "Reponse of 2nd filter", "Rejection of 2nd filter", "Reponse Total", "Actual Rejection", "Expected Rejection", "location", "southwest")