23 #ifndef INCLUDED_OWC_OWC_CHANNEL_ABSOLUTE_IMPL_H 24 #define INCLUDED_OWC_OWC_CHANNEL_ABSOLUTE_IMPL_H 35 int d_num_outputs = 1;
37 std::vector<float> d_tx_lambertian_order_array;
38 std::vector<float> d_rx_photosensor_area_array;
40 std::vector<float> d_distance_array;
42 std::vector<float> d_emission_angle_array;
43 std::vector<float> d_acceptance_angle_array;
45 std::vector<float> d_optical_filter_transmittance_array;
46 std::vector<float> d_refractive_index_array;
47 std::vector<float> d_concentrator_FOV_array;
48 std::vector<float> d_E2O_conversion_factor_array;
49 std::vector<float> d_O2E_conversion_factor_array;
51 std::vector<float> d_tx_coordinates_array;
52 std::vector<float> d_tx_orientation_array;
53 std::vector<float> d_rx_coordinates_array;
54 std::vector<float> d_rx_orientation_array;
58 OWC_Channel_absolute_impl(
int num_inputs,
int num_outputs,
const std::vector<float>&
tx_coordinates_array,
const std::vector<float>&
tx_orientation_array,
const std::vector<float>&
rx_coordinates_array,
const std::vector<float>&
rx_orientation_array,
const std::vector<float>&
tx_lambertian_order_array,
const std::vector<float>&
rx_photosensor_area_array,
const std::vector<float>&
optical_filter_transmittance_array,
const std::vector<float>&
refractive_index_array,
const std::vector<float>&
concentrator_FOV_array,
const std::vector<float>&
E2O_conversion_factor_array,
const std::vector<float>&
O2E_conversion_factor_array);
106 float channel_model(
float emission_angle,
float acceptance_angle,
float distance,
float lambertian_order_m,
float photosensor_area,
float optical_filter_transmittance,
float refractive_index,
float concentrator_FOV,
float E2O_conversion_factor,
float O2E_conversion_factor){
110 if (emission_angle <= 90)
112 Gt = ((lambertian_order_m + 1)/(2*M_PI))*pow(cos(emission_angle*(M_PI/180)),lambertian_order_m);
119 float Ts = optical_filter_transmittance;
121 float refractive_index_squared = refractive_index*refractive_index;
122 float sin_of_concentrator_FOV_squared = sin(concentrator_FOV*(M_PI/180))*sin(concentrator_FOV*(M_PI/180));
123 float g = refractive_index_squared/sin_of_concentrator_FOV_squared;
124 if ((acceptance_angle < 0) || (acceptance_angle > concentrator_FOV))
127 float Gr = photosensor_area*Ts*g*cos(acceptance_angle*(M_PI/180));
128 float distance_squared = distance * distance;
130 float Ct = E2O_conversion_factor;
131 float Cr = O2E_conversion_factor;
133 float H = Ct*((Gt*Gr)/distance_squared)*Cr;
141 d_distance_array.clear();
154 float xSquared = (x2-x1)*(x2-x1);
155 float ySquared = (y2-y1)*(y2-y1);
156 float zSquared = (z2-z1)*(z2-z1);
158 float distance = sqrt(xSquared+ySquared+zSquared);
160 d_distance_array.push_back(distance);
170 d_emission_angle_array.clear();
187 float ux_squared = ux*ux;
188 float uy_squared = uy*uy;
189 float uz_squared = uz*uz;
191 float u_mag = sqrt(ux_squared + uy_squared + uz_squared);
197 float vx_squared = vx*vx;
198 float vy_squared = vy*vy;
199 float vz_squared = vz*vz;
201 float v_mag = sqrt(vx_squared + vy_squared + vz_squared);
203 float numerator= (ux*vx)+(uy*vy)+(uz*vz);
204 float denominator =u_mag*v_mag;
206 float angle = acos((numerator/denominator))*(180/M_PI);
208 d_emission_angle_array.push_back(angle);
217 d_acceptance_angle_array.clear();
238 float ux_squared = ux*ux;
239 float uy_squared = uy*uy;
240 float uz_squared = uz*uz;
242 float u_mag = sqrt(ux_squared + uy_squared + uz_squared);
244 float vx_squared = vx*vx;
245 float vy_squared = vy*vy;
246 float vz_squared = vz*vz;
248 float v_mag = sqrt(vx_squared + vy_squared + vz_squared);
250 float numerator= (ux*vx)+(uy*vy)+(uz*vz);
251 float denominator =u_mag*v_mag;
253 float angle = acos(numerator/denominator)*(180/M_PI);
255 d_acceptance_angle_array.push_back(angle);
265 gr_vector_const_void_star &input_items,
266 gr_vector_void_star &output_items
OWC_Channel_absolute_impl(int num_inputs, int num_outputs, const std::vector< float > &tx_coordinates_array, const std::vector< float > &tx_orientation_array, const std::vector< float > &rx_coordinates_array, const std::vector< float > &rx_orientation_array, const std::vector< float > &tx_lambertian_order_array, const std::vector< float > &rx_photosensor_area_array, const std::vector< float > &optical_filter_transmittance_array, const std::vector< float > &refractive_index_array, const std::vector< float > &concentrator_FOV_array, const std::vector< float > &E2O_conversion_factor_array, const std::vector< float > &O2E_conversion_factor_array)
std::vector< float > rx_coordinates_array()
Definition: OWC_Channel_absolute_impl.h:77
int r_num_outputs()
Definition: OWC_Channel_absolute_impl.h:65
std::vector< float > rx_photosensor_area_array()
Definition: OWC_Channel_absolute_impl.h:89
~OWC_Channel_absolute_impl()
void set_distance_array()
Definition: OWC_Channel_absolute_impl.h:139
void set_rx_coordinates_array(std::vector< float > rx_coordinates_array)
Definition: OWC_Channel_absolute_impl.h:76
std::vector< float > refractive_index_array()
Definition: OWC_Channel_absolute_impl.h:95
void set_E2O_conversion_factor_array(std::vector< float > E2O_conversion_factor_array)
Definition: OWC_Channel_absolute_impl.h:100
std::vector< float > optical_filter_transmittance_array()
Definition: OWC_Channel_absolute_impl.h:92
void set_num_inputs(int num_inputs)
Definition: OWC_Channel_absolute_impl.h:61
std::vector< float > tx_coordinates_array()
Definition: OWC_Channel_absolute_impl.h:71
<+description of block+>
Definition: OWC_Channel_absolute.h:37
int r_num_inputs()
Definition: OWC_Channel_absolute_impl.h:62
std::vector< float > distance_array()
Definition: OWC_Channel_absolute_impl.h:165
void set_tx_orientation_array(std::vector< float > tx_orientation_array)
Definition: OWC_Channel_absolute_impl.h:73
std::vector< float > O2E_conversion_factor_array()
Definition: OWC_Channel_absolute_impl.h:104
Definition: binary_to_decimal_mapper.h:29
void set_tx_coordinates_array(std::vector< float > tx_coordinates_array)
Definition: OWC_Channel_absolute_impl.h:70
void set_rx_photosensor_area_array(std::vector< float > rx_photosensor_area_array)
Definition: OWC_Channel_absolute_impl.h:88
std::vector< float > concentrator_FOV_array()
Definition: OWC_Channel_absolute_impl.h:98
void set_acceptance_angle_array()
Definition: OWC_Channel_absolute_impl.h:215
void set_rx_orientation_array(std::vector< float > rx_orientation_array)
Definition: OWC_Channel_absolute_impl.h:79
float channel_model(float emission_angle, float acceptance_angle, float distance, float lambertian_order_m, float photosensor_area, float optical_filter_transmittance, float refractive_index, float concentrator_FOV, float E2O_conversion_factor, float O2E_conversion_factor)
Definition: OWC_Channel_absolute_impl.h:106
std::vector< float > rx_orientation_array()
Definition: OWC_Channel_absolute_impl.h:80
void set_optical_filter_transmittance_array(std::vector< float > optical_filter_transmittance_array)
Definition: OWC_Channel_absolute_impl.h:91
int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
std::vector< float > emission_angle_array()
Definition: OWC_Channel_absolute_impl.h:212
void set_refractive_index_array(std::vector< float > refractive_index_array)
Definition: OWC_Channel_absolute_impl.h:94
std::vector< float > E2O_conversion_factor_array()
Definition: OWC_Channel_absolute_impl.h:101
Definition: OWC_Channel_absolute_impl.h:31
void set_tx_lambertian_order_array(std::vector< float > tx_lambertian_order_array)
Definition: OWC_Channel_absolute_impl.h:85
std::vector< float > tx_lambertian_order_array()
Definition: OWC_Channel_absolute_impl.h:86
void set_emission_angle_array()
Definition: OWC_Channel_absolute_impl.h:168
void set_num_outputs(int num_outputs)
Definition: OWC_Channel_absolute_impl.h:64
void set_O2E_conversion_factor_array(std::vector< float > O2E_conversion_factor_array)
Definition: OWC_Channel_absolute_impl.h:103
std::vector< float > tx_orientation_array()
Definition: OWC_Channel_absolute_impl.h:74
std::vector< float > acceptance_angle_array()
Definition: OWC_Channel_absolute_impl.h:259
void set_concentrator_FOV_array(std::vector< float > concentrator_FOV_array)
Definition: OWC_Channel_absolute_impl.h:97