Imported Upstream version 3.0
[debian/gnuradio] / gnuradio-core / src / utils / db_width.m
1 %
2 % Copyright 2001 Free Software Foundation, Inc.
3
4 % This file is part of GNU Radio
5
6 % GNU Radio is free software; you can redistribute it and/or modify
7 % it under the terms of the GNU General Public License as published by
8 % the Free Software Foundation; either version 2, or (at your option)
9 % any later version.
10
11 % GNU Radio is distributed in the hope that it will be useful,
12 % but WITHOUT ANY WARRANTY; without even the implied warranty of
13 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 % GNU General Public License for more details.
15
16 % You should have received a copy of the GNU General Public License
17 % along with GNU Radio; see the file COPYING.  If not, write to
18 % the Free Software Foundation, Inc., 51 Franklin Street,
19 % Boston, MA 02110-1301, USA.
20
21 %% find the N-dB width of the given filter
22 %% E.g., to find the 3-dB width, use width = db_width (taps, -3.0)
23 %% the result is normalized to nyquist == 1
24
25 function width = db_width (taps, db)
26   [H,w] = freqz (taps, 1, 4096);
27   Habs = abs(H);
28   max_H = max(Habs);
29   min_H = min(Habs);
30   threshold = max_H * 10^(db/20);
31   if (min_H > threshold)
32     error ("The %g dB point is never reached", db);
33   end
34   above = Habs >= threshold;
35   width = sum(above) / length (above);