spandsp
0.0.6
|
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 ------------------------------------------------------------*/