masking.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. /********************************************************************
  2. * *
  3. * THIS FILE IS PART OF THE Ogg Vorbis SOFTWARE CODEC SOURCE CODE. *
  4. * USE, DISTRIBUTION AND REPRODUCTION OF THIS SOURCE IS GOVERNED BY *
  5. * THE GNU PUBLIC LICENSE 2, WHICH IS INCLUDED WITH THIS SOURCE. *
  6. * PLEASE READ THESE TERMS DISTRIBUTING. *
  7. * *
  8. * THE OggSQUISH SOURCE CODE IS (C) COPYRIGHT 1994-2000 *
  9. * by Monty <monty@xiph.org> and The XIPHOPHORUS Company *
  10. * http://www.xiph.org/ *
  11. * *
  12. ********************************************************************
  13. function: masking curve data for psychoacoustics
  14. last mod: $Id: masking.h,v 1.4.2.1 2000/08/31 09:00:01 xiphmont Exp $
  15. ********************************************************************/
  16. #ifndef _V_MASKING_H_
  17. #define _V_MASKING_H_
  18. /* Not really an ATH, more a bottom curve to limit LSP dynamic range */
  19. float ATH_Bark_dB[]={
  20. 15, 15, 15, 15, 11, 10, 8, 7, 7, 7,
  21. 6, 2, 0, 0, -3, -5, -6, -6, -4.5, 2.5,
  22. 10, 15, 15, 15, 15, 15, 15};
  23. /* The below masking curves are straight from the R. Ehmer
  24. (J. Acoustical Society of America) papers ca 1958-59. I modified
  25. them slightly as Ehmer does not correct for the Absolute Threshold
  26. of Hearing, and the low dB portions of the curves are thus highly
  27. suspect. */
  28. /* Let's all do the Trek thing and just call them 'Ehmer curves' ;-)
  29. Note these are octaves, not Bark scale. */
  30. #define EHMER_OFFSET 16
  31. #define EHMER_MAX 56
  32. float tone_125_40dB_SL[EHMER_MAX]={
  33. 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 29, 27, 26, 25, 23, 21,
  34. 20, 18, 16, 14, 12, 11, 9, 7, 5, 3, 2, 0, -2, -4, -6, -8,
  35. -10, -12, -14, -16, -18, -20, -23, -25, -28,-30,-34,-37,-40,-44,-48,-52,
  36. -900,-900,-900,-900,-900,-900,-900,-900};
  37. float tone_125_60dB_SL[EHMER_MAX]={
  38. 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 49, 47, 46, 45, 43, 41,
  39. 40, 38, 36, 34, 32, 31, 29, 27, 25, 23, 22, 20, 18, 16, 14, 12,
  40. 10, 8, 6, 4, 2, 0, -3, -5, -8,-10,-14,-17,-20,-24,-28,-32,
  41. -900,-900,-900,-900,-900,-900,-900,-900};
  42. float tone_125_80dB_SL[EHMER_MAX]={
  43. 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 69, 67, 66, 65, 63, 61,
  44. 60, 58, 56, 54, 52, 51, 49, 47, 45, 43, 42, 40, 38, 36, 34, 32,
  45. 30, 28, 26, 24, 22, 20, 17, 15, 12, 10, 6, 3, 0, -4, -8,-12,
  46. -900,-900,-900,-900,-900,-900,-900,-900};
  47. float tone_125_100dB_SL[EHMER_MAX]={
  48. 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 83, 82, 81, 80, 79,
  49. 78, 77, 75, 74, 73, 72, 71, 70, 69, 68, 67, 65, 64, 63, 62, 60,
  50. 58, 57, 55, 54, 52, 50, 48, 46, 44, 42, 40, 38, 36, 34, 31, 29,
  51. 27, 24, 22, 20, 18, 15, 13, 11};
  52. float tone_250_40dB_SL[EHMER_MAX]={
  53. -900,-900,-900,-900,-900,-900,-900,-900, -19, -13, -7, -1, 4, 9, 15, 20,
  54. 22, 23, 22, 19, 18, 18, 16, 13, 9, 7, 3, 1, -1, -3, -6, -8,
  55. -10, -13, -16, -19, -21, -24, -28, -32, -900,-900,-900,-900,-900,-900,-900,-900,
  56. -900,-900,-900,-900,-900,-900,-900,-900};
  57. float tone_250_60dB_SL[EHMER_MAX]={
  58. -900,-900,-900,-900,-900,-900,-900, -10, -5, 1, 7, 13, 19, 25, 30, 33,
  59. 36, 39, 38, 37, 38, 39, 39, 40, 38, 36, 35, 34, 33, 31, 29, 28,
  60. 28, 28, 25, 20, 14, 10, 5, 0, -5,-10,-15,-20,-25,-30,-35,-40,
  61. -900,-900,-900,-900,-900,-900,-900,-900};
  62. float tone_250_80dB_SL[EHMER_MAX]={
  63. -900,-900,-900,-900,-900,-900,-900, -10, 10, 17, 24, 30, 37, 41, 48, 49,
  64. 50, 53, 54, 53, 53, 54, 55, 57, 57, 57, 58, 59, 60, 58, 57, 58,
  65. 59, 58, 57, 54, 52, 50, 49, 47, 46, 47, 46, 44, 43, 42, 41, 40,
  66. 38, 32, 27, 22, 17, 11, 6, 0};
  67. /* no data, just interpolated from 80 */
  68. float tone_250_100dB_SL[EHMER_MAX]={
  69. -900,-900,-900,-900,-900,-900,-900, -10, 15, 25, 34, 40, 50, 56, 60, 70,
  70. 70, 73, 74, 73, 73, 74, 75, 77, 77, 77, 78, 79, 80, 78, 77, 78,
  71. 79, 78, 77, 74, 72, 70, 69, 67, 66, 67, 66, 64, 63, 62, 61, 60,
  72. 58, 52, 47, 42, 37, 31, 26, 20};
  73. float tone_500_40dB_SL[EHMER_MAX]={
  74. -900,-900,-900,-900,-900,-900,-900, -40, -26, -20, -14, -8, -2, 4, 10, 17,
  75. 23, 16, 12, 9, 6, 3, 0, -3, -7, -10, -13, -16, -20, -23, -26, -30,
  76. -900,-900,-900,-900,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  77. -900,-900,-900,-900,-900,-900,-900,-900};
  78. float tone_500_60dB_SL[EHMER_MAX]={
  79. -900,-900,-900,-900,-900,-900,-900,-900, -18, -12, -6, 0, 6, 13, 20, 30,
  80. 39, 34, 31, 29, 29, 27, 24, 21, 18, 16, 13, 8, 6, 3, 1, -1,
  81. -5, -2, -5, -8, -12, -15, -18, -22, -900,-900,-900,-900,-900,-900,-900,-900,
  82. -900,-900,-900,-900,-900,-900,-900,-900};
  83. float tone_500_80dB_SL[EHMER_MAX]={
  84. -900,-900,-900,-900,-900,-900,-900,-900, -22,-16,-10, 0, 10, 20, 32, 43,
  85. 53, 52, 52, 50, 49, 50, 52, 55, 55, 54, 51, 49, 46, 44, 44, 42,
  86. 38, 34, 32, 29, 29, 28, 25, 23, 20, 16, 10, 7, 4, 2, -1, -4,
  87. -7, -10, -15, -20, -25, -30, -35, -40};
  88. float tone_500_100dB_SL[EHMER_MAX]={
  89. -900,-900,-900,-900,-900,-900,-900, -10, -7, 2, 10, 19, 27, 35, 55, 56,
  90. 62, 61, 60, 58, 57, 57, 59, 63, 65, 66, 62, 60, 57, 57, 58, 58,
  91. 57, 56, 56, 56, 57, 57, 56, 57, 57, 54, 47, 41, 37, 28, 21, 16,
  92. 10, 3, -3, -8, -13, -18, -23, -28};
  93. float tone_1000_40dB_SL[EHMER_MAX]={
  94. -900,-900,-900,-900,-900,-900,-900,-900, -55, -40, -30, -20, -10, 0, 9, 20,
  95. 27, 20, 13, 14, 13, 5, -1, -6, -11, -20, -30,-900,-900,-900,-900,-900,
  96. -900,-900,-900,-900,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  97. -900,-900,-900,-900,-900,-900,-900,-900};
  98. float tone_1000_60dB_SL[EHMER_MAX]={
  99. -900,-900,-900,-900,-900,-900,-900, -43, -33,-23,-13, -3, 7, 17, 25, 37,
  100. 42, 33, 25, 25, 23, 18, 13, 9, 4, -1, -7,-13,-18, -23, -28, -33,
  101. -900,-900,-900,-900,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  102. -900,-900,-900,-900,-900,-900,-900,-900};
  103. float tone_1000_80dB_SL[EHMER_MAX]={
  104. -900,-900,-900,-900,-900,-900,-900, -35, -25,-14, -4, 6, 16, 27, 33, 50,
  105. 59, 57, 47, 41, 40, 43, 47, 48, 47, 42, 39, 37, 37, 36, 35, 32,
  106. 30, 27, 21, 15, 5, -2, -10, -18, -900,-900,-900,-900,-900,-900,-900,-900,
  107. -900,-900,-900,-900,-900,-900,-900,-900};
  108. float tone_1000_100dB_SL[EHMER_MAX]={
  109. -900,-900,-900,-900,-900,-900, -40, -30, -20,-10, 0, 10, 23, 33, 45, 60,
  110. 70, 72, 55, 49, 43, 40, 44, 54, 59, 58, 49, 43, 52, 57, 57, 58,
  111. 58, 54, 49, 47, 42, 39, 33, 28, 20, 15, 5, 0, -5,-15,-20,-25,
  112. -900,-900,-900,-900,-900,-900,-900,-900};
  113. float tone_2000_40dB_SL[EHMER_MAX]={
  114. -900,-900,-900,-900,-900,-900,-900,-900, -40, -30, -21, -12, -3, 5, 12, 20,
  115. 24, 21, 14, 5, -5, -15, -25, -35, -900,-900,-900,-900,-900,-900,-900,-900,
  116. -900,-900,-900,-900,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  117. -900,-900,-900,-900,-900,-900,-900,-900};
  118. float tone_2000_60dB_SL[EHMER_MAX]={
  119. -900,-900,-900,-900,-900,-900,-900,-900, -40, -30, -21, -12, -2, 8, 19, 31,
  120. 38, 34, 24, 17, 14, 13, 11, 7, 3, -2, -6, -10, -14, -20, -26, -32,
  121. -900,-900,-900,-900,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  122. -900,-900,-900,-900,-900,-900,-900,-900};
  123. float tone_2000_80dB_SL[EHMER_MAX]={
  124. -900,-900,-900,-900,-900,-900,-900,-900, -40, -30, -21, -12, -2, 13, 28, 40,
  125. 51, 51, 43, 35, 28, 29, 35, 37, 37, 35, 31, 28, 25, 22, 19, 15,
  126. 11, 8, 6, 2, -6, -14, -22, -30, -900,-900,-900,-900,-900,-900,-900,-900,
  127. -900,-900,-900,-900,-900,-900,-900,-900};
  128. float tone_2000_100dB_SL[EHMER_MAX]={
  129. -900,-900,-900,-900,-900,-900,-900,-900, -40, -30, -21, -10, 6, 25, 42, 60,
  130. 66, 60, 53, 43, 35, 31, 34, 47, 58, 51, 43, 45, 54, 59, 59, 56,
  131. 54, 51, 40, 29, 20, 11, 2, -8, -17, -26, -35,-900,-900,-900,-900,-900,
  132. -900,-900,-900,-900,-900,-900,-900,-900};
  133. float tone_4000_40dB_SL[EHMER_MAX]={
  134. -900,-900,-900,-900,-900,-900,-900,-900, -40, -30, -21, -12, 0, 3, 10, 18,
  135. 24, 21, 14, 5, -5, -15, -25, -35, -900,-900,-900,-900,-900,-900,-900,-900,
  136. -900,-900,-900,-900,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  137. -900,-900,-900,-900,-900,-900,-900,-900};
  138. float tone_4000_60dB_SL[EHMER_MAX]={
  139. -900,-900,-900,-900,-900,-900,-900,-900, -40, -30, -21, -12, -2, 8, 19, 31,
  140. 38, 33, 28, 23, 19, 14, 11, 8, 3, -2, -7, -12, -17, -22, -27, -37,
  141. -900,-900,-900,-900,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  142. -900,-900,-900,-900,-900,-900,-900,-900};
  143. float tone_4000_80dB_SL[EHMER_MAX]={
  144. -900,-900,-900,-900,-900,-900,-900,-900, -60, -50, -40, -29, -12, 5, 19, 37,
  145. 51, 49, 40, 35, 36, 36, 36, 33, 32, 24, 18, 8, -3, -12, -20, -29,
  146. -900,-900,-900,-900,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  147. -900,-900,-900,-900,-900,-900,-900,-900};
  148. float tone_4000_100dB_SL[EHMER_MAX]={
  149. -20, -12, -8, -4, 0, 4, 8, 11, 15, 22, 26, 28, 32, 36, 43, 52,
  150. 62, 59, 50, 48, 50, 50, 45, 36, 45, 30, 20, 10, 0, -10, -19, -28,
  151. -37,-900,-900,-900,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  152. -900,-900,-900,-900,-900,-900,-900,-900};
  153. float tone_8000_40dB_SL[EHMER_MAX]={
  154. -900,-900,-900,-900,-900,-900,-900, -50, -41, -30, -21, -12, 0, 3, 10, 18,
  155. 23, 20, 16, 15, 16, 18, 21, 23, 25, 27, 29, 32, 35, 38, 41, 44,
  156. 47, 50, 55, 60, 85,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  157. -900,-900,-900,-900,-900,-900,-900,-900};
  158. float tone_8000_60dB_SL[EHMER_MAX]={
  159. -900,-900,-900,-900,-900,-900,-900, -10, -21, -18, -14, -10, 0, 3, 15, 30,
  160. 43, 40, 36, 35, 36, 38, 41, 43, 45, 47, 49, 52, 55, 58, 61, 64,
  161. 67, 70, 75, 80,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  162. -900,-900,-900,-900,-900,-900,-900,-900};
  163. float tone_8000_80dB_SL[EHMER_MAX]={
  164. -900,-900,-900,-900,-900,-900,-900, -10, -1, 2, 6, 10, 13, 19, 25, 35,
  165. 63, 60, 56, 55, 56, 58, 61, 63, 65, 70, 75, 80, 85, 90, 95, 100,
  166. 100, 100, 100, 100,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  167. -900,-900,-900,-900,-900,-900,-900,-900};
  168. float tone_8000_100dB_SL[EHMER_MAX]={
  169. -18, -12, -7, -3, 0, 2, 6, 9, 12, 19, 22, 21, 19, 21, 40, 40,
  170. 80, 60, 35, 25, 15, 5, -5, -15, -25, -35,-900,-900,-900,-900,-900,-900,
  171. -900,-900,-900,-900,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  172. -900,-900,-900,-900,-900,-900,-900,-900};
  173. #if 0 /* not used for the time being */
  174. float noise_500_60dB_SL[EHMER_MAX]={
  175. -900,-900,-900,-900,-900, -20, -11, -2, 7, 16, 25, 34, 43, 52, 61, 66,
  176. 69, 68, 58, 50, 44, 38, 32, 28, 25, 24, 20, 18, 17, 12, 10, 8,
  177. 5, 0, -5, -8, -12, -15, -18, -22, -900,-900,-900,-900,-900,-900,-900,-900,
  178. -900,-900,-900,-900,-900,-900,-900,-900};
  179. float noise_500_80dB_SL[EHMER_MAX]={
  180. -900,-900,-900, -20, -10, -1, 8, 17, 26, 35, 44, 53, 62, 70, 79, 83,
  181. 85, 85, 81, 77, 74, 71, 68, 63, 61, 59, 56, 55, 54, 52, 48, 47,
  182. 45, 46, 45, 43, 40, 37, 33, 32, 35, 32, 30, 29, 20, 10, 0, -10,
  183. -20, -30,-900,-900,-900,-900,-900,-900};
  184. float noise_1000_60dB_SL[EHMER_MAX]={
  185. -900,-900,-900,-900, -24, -15, -6, 3, 12, 21, 28, 34, 40, 48, 57, 60,
  186. 61, 56, 54, 45, 36, 27, 21, 19, 17, 13, 10, 0, -10, -20, -20,-900,
  187. -900,-900,-900,-900,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  188. -900,-900,-900,-900,-900,-900,-900,-900};
  189. float noise_1000_80dB_SL[EHMER_MAX]={
  190. -900, -26, -17, -8, 1, 10, 19, 28, 37, 41, 46, 51, 58, 68, 74, 81,
  191. 80, 81, 70, 66, 58, 61, 59, 55, 54, 53, 52, 49, 48, 42, 38, 38,
  192. 39, 34, 30, 27, 20, 10, 0, -10, -20, -30,-900,-900,-900,-900,-900,-900,
  193. -900,-900,-900,-900,-900,-900,-900,-900};
  194. float noise_2000_60dB_SL[EHMER_MAX]={
  195. -900,-900,-900, -34, -25, -16, -7, 2, 11, 18, 23, 30, 35, 42, 51, 58,
  196. 58, 57, 50, 40,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  197. -900,-900,-900,-900,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  198. -900,-900,-900,-900,-900,-900,-900,-900};
  199. float noise_2000_80dB_SL[EHMER_MAX]={
  200. -900, -26, -17, -8, 1, 10, 19, 28, 33, 38, 43, 48, 53, 62, 70, 77,
  201. 77, 75, 70, 67, 68, 66, 62, 61, 60, 59, 52, 47, 39, 35, 34, 35,
  202. 35, 33, 30, 27, 20, 10, 0, -10, -20, -30,-900,-900,-900,-900,-900,-900,
  203. -900,-900,-900,-900,-900,-900,-900,-900};
  204. float noise_4000_60dB_SL[EHMER_MAX]={
  205. -900,-900,-900, -34, -25, -16, -7, 2, 11, 20, 25, 31, 37, 45, 56, 62,
  206. 64, 61,-900,-900,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  207. -900,-900,-900,-900,-900,-900,-900,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  208. -900,-900,-900,-900,-900,-900,-900,-900};
  209. float noise_4000_80dB_SL[EHMER_MAX]={
  210. -900, -26, -17, -8, 1, 10, 19, 26, 33, 39, 45, 50, 55, 65, 75, 82,
  211. 84, 81, 78, 72, 70, 69, 66, 61, 50, 48, 46, 40, 35, 30, 25, 20,
  212. 15, 10, 5, 0, -10, -20, -30,-900, -900,-900,-900,-900,-900,-900,-900,-900,
  213. -900,-900,-900,-900,-900,-900,-900,-900};
  214. #endif
  215. #endif