noise.h

Go to the documentation of this file.
00001 /*
00002  * SpanDSP - a series of DSP components for telephony
00003  *
00004  * noise.h - A low complexity audio noise generator, suitable for
00005  *           real time generation (current just approx AWGN)
00006  *
00007  * Written by Steve Underwood <steveu@coppice.org>
00008  *
00009  * Copyright (C) 2005 Steve Underwood
00010  *
00011  * All rights reserved.
00012  *
00013  * This program is free software; you can redistribute it and/or modify
00014  * it under the terms of the GNU Lesser General Public License version 2.1,
00015  * as published by the Free Software Foundation.
00016  *
00017  * This program is distributed in the hope that it will be useful,
00018  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020  * GNU Lesser General Public License for more details.
00021  *
00022  * You should have received a copy of the GNU Lesser General Public
00023  * License along with this program; if not, write to the Free Software
00024  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00025  */
00026 
00027 /*! \file */
00028 
00029 #if !defined(_SPANDSP_NOISE_H_)
00030 #define _SPANDSP_NOISE_H_
00031 
00032 /*! \page noise_page Noise generation
00033 
00034 \section noise_page_sec_1 What does it do?
00035 It generates audio noise. Currently it only generates reasonable quality
00036 AWGN. It is designed to be of sufficiently low complexity to generate large
00037 volumes of reasonable quality noise, in real time.
00038 
00039 Hoth noise is used to model indoor ambient noise when evaluating communications
00040 systems such as telephones. It is named after D.F. Hoth, who made the first 
00041 systematic study of this. The official definition of Hoth noise is IEEE
00042 standard 269-2001 (revised from 269-1992), "Draft Standard Methods for Measuring
00043 Transmission Performance of Analog and Digital Telephone Sets, Handsets and Headsets."
00044 
00045 The table below gives the spectral density of Hoth noise, adjusted in level to produce
00046 a reading of 50 dBA.
00047 
00048 Freq (Hz)  Spectral     Bandwidth       Total power in
00049            density      10 log_f        each 1/3 octave band
00050            (dB SPL/Hz)  (dB)            (dB SPL)
00051  100        32.4        13.5            45.9
00052  125        30.9        14.7            45.5
00053  160        29.1        15.7            44.9
00054  200        27.6        16.5            44.1
00055  250        26.0        17.6            43.6
00056  315        24.4        18.7            43.1
00057  400        22.7        19.7            42.3
00058  500        21.1        20.6            41.7
00059  630        19.5        21.7            41.2
00060  800        17.8        22.7            40.4
00061 1000        16.2        23.5            39.7
00062 1250        14.6        24.7            39.3
00063 1600        12.9        25.7            38.7
00064 2000        11.3        26.5            37.8
00065 2500         9.6        27.6            37.2
00066 3150         7.8        28.7            36.5
00067 4000         5.4        29.7            34.8
00068 5000         2.6        30.6            33.2
00069 6300        -1.3        31.7            30.4
00070 8000        -6.6        32.7            26.0
00071 
00072 The tolerance for each 1/3rd octave band is กำ3dB.
00073 
00074 \section awgn_page_sec_2 How does it work?
00075 The central limit theorem says if you add a few random numbers together,
00076 the result starts to look Gaussian. In this case we sum 8 random numbers.
00077 The result is fast, and perfectly good as a noise source for many purposes.
00078 It should not be trusted as a high quality AWGN generator, for elaborate
00079 modelling purposes.
00080 */
00081 
00082 enum
00083 {
00084     NOISE_CLASS_AWGN = 1,
00085     NOISE_CLASS_HOTH
00086 };
00087 
00088 /*!
00089     Noise generator descriptor. This contains all the state information for an instance
00090     of the noise generator.
00091  */
00092 typedef struct noise_state_s noise_state_t;
00093 
00094 #if defined(__cplusplus)
00095 extern "C"
00096 {
00097 #endif
00098 
00099 /*! Initialise an audio noise generator.
00100     \brief Initialise an audio noise generator.
00101     \param s The noise generator context.
00102     \param seed A seed for the underlying random number generator.
00103     \param level The noise power level in dBmO.
00104     \param class_of_noise The class of noise (e.g. AWGN).
00105     \param quality A parameter which permits speed and accuracy of the noise
00106            generation to be adjusted.
00107     \return A pointer to the noise generator context.
00108 */
00109 SPAN_DECLARE(noise_state_t *) noise_init_dbm0(noise_state_t *s, int seed, float level, int class_of_noise, int quality);
00110 
00111 SPAN_DECLARE(noise_state_t *) noise_init_dbov(noise_state_t *s, int seed, float level, int class_of_noise, int quality);
00112 
00113 SPAN_DECLARE(int) noise_release(noise_state_t *s);
00114 
00115 SPAN_DECLARE(int) noise_free(noise_state_t *s);
00116 
00117 /*! Generate a sample of audio noise.
00118     \brief Generate a sample of audio noise.
00119     \param s The noise generator context.
00120     \return The generated sample.
00121 */
00122 SPAN_DECLARE(int16_t) noise(noise_state_t *s);
00123 
00124 #if defined(__cplusplus)
00125 }
00126 #endif
00127 
00128 #endif
00129 /*- End of file ------------------------------------------------------------*/

Generated on 18 Oct 2012 for spandsp by  doxygen 1.6.1