23 #ifndef INCLUDED_OWC_OWC_CHANNEL_RELATIVE_IMPL_H 24 #define INCLUDED_OWC_OWC_CHANNEL_RELATIVE_IMPL_H 35 int d_num_outputs = 1;
36 std::vector<float> d_emission_angle_array;
37 std::vector<float> d_acceptance_angle_array;
38 std::vector<float> d_distance_array;
39 std::vector<float> d_lambertian_order_array;
40 std::vector<float> d_photosensor_area_array;
41 std::vector<float> d_optical_filter_transmittance_array;
42 std::vector<float> d_refractive_index_array;
43 std::vector<float> d_concentrator_FOV_array;
44 std::vector<float> d_E2O_conversion_factor_array;
45 std::vector<float> d_O2E_conversion_factor_array;
48 OWC_Channel_relative_impl(
int num_inputs,
int num_outputs,
const std::vector<float>&
emission_angle_array,
const std::vector<float>&
acceptance_angle_array,
const std::vector<float>&
distance_array,
const std::vector<float>&
lambertian_order_array,
const std::vector<float>&
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);
87 float channel_model(
float emission_angle,
float acceptance_angle,
float distance,
float lambertian_order,
float ps_area,
float optical_filter_transmittance,
float refractive_index,
float concentrator_FOV,
float E2O_conversion_factor,
float O2E_conversion_factor){
91 if (emission_angle <= 90)
93 Gt = ((lambertian_order + 1)/(2*M_PI))*pow(cos(emission_angle*(M_PI/180)),lambertian_order);
100 float Ts = optical_filter_transmittance;
102 float refractive_index_squared = refractive_index*refractive_index;
103 float sin_of_concentrator_FOV_squared = sin(concentrator_FOV*(M_PI/180))*sin(concentrator_FOV*(M_PI/180));
104 float g = refractive_index_squared/sin_of_concentrator_FOV_squared;
105 if ((acceptance_angle < 0) || (acceptance_angle > concentrator_FOV))
108 float Gr = ps_area*Ts*g*cos(acceptance_angle*(M_PI/180));
109 float distance_squared = distance * distance;
111 float Ct = E2O_conversion_factor;
112 float Cr = O2E_conversion_factor;
114 float H = Ct*((Gt*Gr)/distance_squared)*Cr;
121 gr_vector_const_void_star &input_items,
122 gr_vector_void_star &output_items
void set_num_outputs(int num_outputs)
Definition: OWC_Channel_relative_impl.h:54
void set_optical_filter_transmittance_array(std::vector< float > optical_filter_transmittance_array)
Definition: OWC_Channel_relative_impl.h:72
void set_acceptance_angle_array(std::vector< float > acceptance_angle_array)
Definition: OWC_Channel_relative_impl.h:60
int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
void set_concentrator_FOV_array(std::vector< float > concentrator_FOV_array)
Definition: OWC_Channel_relative_impl.h:78
void set_photosensor_area_array(std::vector< float > photosensor_area_array)
Definition: OWC_Channel_relative_impl.h:69
void set_E2O_conversion_factor_array(std::vector< float > E2O_conversion_factor_array)
Definition: OWC_Channel_relative_impl.h:81
int r_num_inputs()
Definition: OWC_Channel_relative_impl.h:52
std::vector< float > optical_filter_transmittance_array()
Definition: OWC_Channel_relative_impl.h:73
void set_num_inputs(int num_inputs)
Definition: OWC_Channel_relative_impl.h:51
std::vector< float > O2E_conversion_factor_array()
Definition: OWC_Channel_relative_impl.h:85
void set_O2E_conversion_factor_array(std::vector< float > O2E_conversion_factor_array)
Definition: OWC_Channel_relative_impl.h:84
void set_emission_angle_array(std::vector< float > emission_angle_array)
Definition: OWC_Channel_relative_impl.h:57
<+description of block+>
Definition: OWC_Channel_relative.h:37
std::vector< float > photosensor_area_array()
Definition: OWC_Channel_relative_impl.h:70
std::vector< float > emission_angle_array()
Definition: OWC_Channel_relative_impl.h:58
Definition: binary_to_decimal_mapper.h:29
float channel_model(float emission_angle, float acceptance_angle, float distance, float lambertian_order, float ps_area, float optical_filter_transmittance, float refractive_index, float concentrator_FOV, float E2O_conversion_factor, float O2E_conversion_factor)
Definition: OWC_Channel_relative_impl.h:87
std::vector< float > E2O_conversion_factor_array()
Definition: OWC_Channel_relative_impl.h:82
std::vector< float > acceptance_angle_array()
Definition: OWC_Channel_relative_impl.h:61
std::vector< float > refractive_index_array()
Definition: OWC_Channel_relative_impl.h:76
~OWC_Channel_relative_impl()
int r_num_outputs()
Definition: OWC_Channel_relative_impl.h:55
void set_lambertian_order_array(std::vector< float > lambertian_order_array)
Definition: OWC_Channel_relative_impl.h:66
std::vector< float > concentrator_FOV_array()
Definition: OWC_Channel_relative_impl.h:79
OWC_Channel_relative_impl(int num_inputs, int num_outputs, const std::vector< float > &emission_angle_array, const std::vector< float > &acceptance_angle_array, const std::vector< float > &distance_array, const std::vector< float > &lambertian_order_array, const std::vector< float > &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 > lambertian_order_array()
Definition: OWC_Channel_relative_impl.h:67
void set_distance_array(std::vector< float > distance_array)
Definition: OWC_Channel_relative_impl.h:63
std::vector< float > distance_array()
Definition: OWC_Channel_relative_impl.h:64
Definition: OWC_Channel_relative_impl.h:31
void set_refractive_index_array(std::vector< float > refractive_index_array)
Definition: OWC_Channel_relative_impl.h:75