Mercurial > hg > audiostuff
comparison spandsp-0.0.3/spandsp-0.0.3/tests/power_meter_tests.c @ 5:f762bf195c4b
import spandsp-0.0.3
author | Peter Meerwald <pmeerw@cosy.sbg.ac.at> |
---|---|
date | Fri, 25 Jun 2010 16:00:21 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
4:26cd8f1ef0b1 | 5:f762bf195c4b |
---|---|
1 /* | |
2 * SpanDSP - a series of DSP components for telephony | |
3 * | |
4 * power_meter_tests.c | |
5 * | |
6 * Written by Steve Underwood <steveu@coppice.org> | |
7 * | |
8 * Copyright (C) 2003 Steve Underwood | |
9 * | |
10 * All rights reserved. | |
11 * | |
12 * This program is free software; you can redistribute it and/or modify | |
13 * it under the terms of the GNU General Public License version 2, as | |
14 * published by the Free Software Foundation. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
20 * | |
21 * You should have received a copy of the GNU General Public License | |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
24 * | |
25 * $Id: power_meter_tests.c,v 1.15 2006/11/24 12:34:55 steveu Exp $ | |
26 */ | |
27 | |
28 /*! \page power_meter_tests_page Power meter tests | |
29 \section power_meter_tests_page_sec_1 What does it do? | |
30 These tests assess the accuracy of power meters built from the power meter module. | |
31 Both tones and noise are used to check the meter's behaviour. | |
32 | |
33 \section power_meter_tests_page_sec_2 How does it work? | |
34 ???. | |
35 */ | |
36 | |
37 #ifdef HAVE_CONFIG_H | |
38 #include <config.h> | |
39 #endif | |
40 | |
41 #include <stdlib.h> | |
42 #include <inttypes.h> | |
43 #include <stdio.h> | |
44 #include <memory.h> | |
45 #if defined(HAVE_TGMATH_H) | |
46 #include <tgmath.h> | |
47 #endif | |
48 #if defined(HAVE_MATH_H) | |
49 #include <math.h> | |
50 #endif | |
51 #include <time.h> | |
52 #include <tiffio.h> | |
53 | |
54 #include "spandsp.h" | |
55 | |
56 int main(int argc, char *argv[]) | |
57 { | |
58 awgn_state_t noise_source; | |
59 power_meter_t meter; | |
60 tone_gen_descriptor_t tone_desc; | |
61 tone_gen_state_t gen; | |
62 int i; | |
63 int idum = 1234567; | |
64 int16_t amp[1000]; | |
65 int len; | |
66 int32_t level; | |
67 | |
68 power_meter_init(&meter, 7); | |
69 | |
70 printf("Testing with a square wave 10dB from maximum\n"); | |
71 for (i = 0; i < 1000; i++) | |
72 { | |
73 amp[i] = (i & 1) ? 10362 : -10362; | |
74 level = power_meter_update(&meter, amp[i]); | |
75 //printf("%12d %fdBm0 %fdBov\n", level, power_meter_dbm0(&meter), power_meter_dbov(&meter)); | |
76 } | |
77 printf("Level: expected %" PRId32 "/%" PRId32 ", got %" PRId32 "\n", power_meter_level_dbov(-10.0f), power_meter_level_dbm0(-10.0f + DBM0_MAX_POWER), level); | |
78 printf("Power: expected %fdBm0, got %fdBm0\n", -10.0f + DBM0_MAX_POWER, power_meter_dbm0(&meter)); | |
79 printf("Power: expected %fdBOv, got %fdBOv\n", -10.0f, power_meter_dbov(&meter)); | |
80 if (level < power_meter_level_dbov(-10.0f)*0.99f | |
81 || | |
82 level > power_meter_level_dbov(-10.0f)*1.01f) | |
83 { | |
84 printf("Test failed (level)\n"); | |
85 exit(2); | |
86 } | |
87 if (0.1f < fabsf(power_meter_dbm0(&meter) + 10.0f - DBM0_MAX_POWER)) | |
88 { | |
89 printf("Test failed (dBm0)\n"); | |
90 exit(2); | |
91 } | |
92 if (0.1f < fabsf(power_meter_dbov(&meter) + 10.0)) | |
93 { | |
94 printf("Test failed (dBOv)\n"); | |
95 exit(2); | |
96 } | |
97 | |
98 printf("Testing with a sine wave tone 10dB from maximum\n"); | |
99 make_tone_gen_descriptor(&tone_desc, | |
100 1000, | |
101 -4, | |
102 0, | |
103 1, | |
104 1, | |
105 0, | |
106 0, | |
107 0, | |
108 TRUE); | |
109 tone_gen_init(&gen, &tone_desc); | |
110 len = tone_gen(&gen, amp, 1000); | |
111 for (i = 0; i < len; i++) | |
112 { | |
113 level = power_meter_update(&meter, amp[i]); | |
114 //printf("%12d %fdBm0 %fdBov\n", level, power_meter_dbm0(&meter), power_meter_dbov(&meter)); | |
115 } | |
116 printf("Level: expected %" PRId32 "/%" PRId32 ", got %" PRId32 "\n", power_meter_level_dbov(-10.0f), power_meter_level_dbm0(-10.0f + DBM0_MAX_POWER), level); | |
117 printf("Power: expected %fdBm0, got %fdBm0\n", -10.0f + DBM0_MAX_POWER, power_meter_dbm0(&meter)); | |
118 printf("Power: expected %fdBOv, got %fdBOv\n", -10.0f, power_meter_dbov(&meter)); | |
119 if (level < power_meter_level_dbov(-10.0f)*0.95f | |
120 || | |
121 level > power_meter_level_dbov(-10.0f)*1.05f) | |
122 { | |
123 printf("Test failed (level)\n"); | |
124 exit(2); | |
125 } | |
126 if (0.2f < fabsf(power_meter_dbm0(&meter) + 10.0f - DBM0_MAX_POWER)) | |
127 { | |
128 printf("Test failed (dBm0)\n"); | |
129 exit(2); | |
130 } | |
131 if (0.2f < fabsf(power_meter_dbov(&meter) + 10.0)) | |
132 { | |
133 printf("Test failed (dBOv)\n"); | |
134 exit(2); | |
135 } | |
136 | |
137 printf("Testing with AWGN 10dB from maximum\n"); | |
138 awgn_init_dbov(&noise_source, idum, -10.0f); | |
139 for (i = 0; i < 1000; i++) | |
140 amp[i] = awgn(&noise_source); | |
141 for (i = 0; i < 1000; i++) | |
142 { | |
143 level = power_meter_update(&meter, amp[i]); | |
144 //printf("%12d %fdBm0 %fdBov\n", level, power_meter_dbm0(&meter), power_meter_dbov(&meter)); | |
145 } | |
146 printf("Level: expected %" PRId32 "/%" PRId32 ", got %" PRId32 "\n", power_meter_level_dbov(-10.0f), power_meter_level_dbm0(-10.0f + DBM0_MAX_POWER), level); | |
147 printf("Power: expected %fdBm0, got %fdBm0\n", -10.0f + DBM0_MAX_POWER, power_meter_dbm0(&meter)); | |
148 printf("Power: expected %fdBOv, got %fdBOv\n", -10.0f, power_meter_dbov(&meter)); | |
149 if (level < power_meter_level_dbov(-10.0f)*0.95f | |
150 || | |
151 level > power_meter_level_dbov(-10.0f)*1.05f) | |
152 { | |
153 printf("Test failed (level)\n"); | |
154 exit(2); | |
155 } | |
156 if (0.2f < fabsf(power_meter_dbm0(&meter) + 10.0f - DBM0_MAX_POWER)) | |
157 { | |
158 printf("Test failed (dBm0)\n"); | |
159 exit(2); | |
160 } | |
161 if (0.2f < fabsf(power_meter_dbov(&meter) + 10.0f)) | |
162 { | |
163 printf("Test failed (dBOv)\n"); | |
164 exit(2); | |
165 } | |
166 printf("Tests passed\n"); | |
167 return 0; | |
168 } | |
169 /*- End of function --------------------------------------------------------*/ | |
170 /*- End of file ------------------------------------------------------------*/ |