3 This file is part of a program that implements a Software-Defined Radio.
5 Copyright (C) 2004 by Frank Brickle, AB2KT and Bob McGwier, N4HY
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 The authors can be reached by email at
29 The DTTS Microwave Society
37 new_noiseblanker(CXB sigbuf, REAL threshold) {
38 NB nb = (NB) safealloc(1, sizeof(nbstate), "new nbstate");
40 nb->threshold = threshold;
41 nb->average_mag = 1.0;
47 if (nb) { safefree((char *) nb); }
53 for (i = 0; i < CXBsize(nb->sigbuf); i++) {
54 REAL cmag = Cmag(CXBdata(nb->sigbuf, i));
55 nb->average_mag = 0.999 * (nb->average_mag) + 0.001 * cmag;
56 if (cmag > (nb->threshold * nb->average_mag))
57 CXBdata(nb->sigbuf, i) = Cmplx(0.0, 0.0);
62 SDROMnoiseblanker(NB nb) {
64 for (i = 0; i < CXBsize(nb->sigbuf); i++) {
65 REAL cmag = Cmag(CXBdata(nb->sigbuf, i));
66 nb->average_sig = Cadd(Cscl(nb->average_sig, 0.75),
67 Cscl(CXBdata(nb->sigbuf, i), 0.25));
68 nb->average_mag = 0.999 * (nb->average_mag) + 0.001 * cmag;
69 if (cmag > (nb->threshold * nb->average_mag))
70 CXBdata(nb->sigbuf, i) = nb->average_sig;