line_model.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056 #if !defined(_SPANDSP_LINE_MODEL_H_)
00057 #define _SPANDSP_LINE_MODEL_H_
00058
00059 #define LINE_FILTER_SIZE 129
00060
00061
00062
00063
00064
00065 typedef struct
00066 {
00067 codec_munge_state_t *munge;
00068
00069
00070 float *near_filter;
00071
00072 int near_filter_len;
00073
00074 float near_buf[LINE_FILTER_SIZE];
00075
00076 int near_buf_ptr;
00077
00078 awgn_state_t near_noise;
00079
00080
00081 int bulk_delay;
00082
00083 int bulk_delay_ptr;
00084
00085 int16_t bulk_delay_buf[8000];
00086
00087
00088 float *far_filter;
00089
00090 int far_filter_len;
00091
00092 float far_buf[LINE_FILTER_SIZE];
00093
00094 int far_buf_ptr;
00095
00096 awgn_state_t far_noise;
00097
00098
00099 float near_cpe_hybrid_echo;
00100
00101 float near_co_hybrid_echo;
00102
00103
00104 float far_cpe_hybrid_echo;
00105
00106 float far_co_hybrid_echo;
00107
00108 float dc_offset;
00109
00110
00111 int mains_interference;
00112 tone_gen_state_t mains_tone;
00113 } one_way_line_model_state_t;
00114
00115
00116
00117
00118
00119 typedef struct
00120 {
00121 one_way_line_model_state_t line1;
00122 one_way_line_model_state_t line2;
00123 float fout1;
00124 float fout2;
00125 } both_ways_line_model_state_t;
00126
00127 #ifdef __cplusplus
00128 extern "C"
00129 {
00130 #endif
00131
00132 void both_ways_line_model(both_ways_line_model_state_t *s,
00133 int16_t output1[],
00134 const int16_t input1[],
00135 int16_t output2[],
00136 const int16_t input2[],
00137 int samples);
00138
00139 void both_ways_line_model_set_dc(both_ways_line_model_state_t *s, float dc1, float dc2);
00140
00141 void both_ways_line_model_set_mains_pickup(both_ways_line_model_state_t *s, int f, float level1, float level2);
00142
00143 both_ways_line_model_state_t *both_ways_line_model_init(int model1,
00144 float noise1,
00145 int model2,
00146 float noise2,
00147 int codec,
00148 int rbs_pattern);
00149
00150 int both_ways_line_model_release(both_ways_line_model_state_t *s);
00151
00152 void one_way_line_model(one_way_line_model_state_t *s,
00153 int16_t output[],
00154 const int16_t input[],
00155 int samples);
00156
00157 void one_way_line_model_set_dc(one_way_line_model_state_t *s, float dc);
00158
00159 void one_way_line_model_set_mains_pickup(one_way_line_model_state_t *s, int f, float level);
00160
00161 one_way_line_model_state_t *one_way_line_model_init(int model, float noise, int codec, int rbs_pattern);
00162
00163 int one_way_line_model_release(one_way_line_model_state_t *s);
00164
00165 #ifdef __cplusplus
00166 }
00167 #endif
00168
00169 #endif
00170