8#ifndef INCLUDED_OWC_OWC_CHANNEL_ABSOLUTE_CPLUS_IMPL_H
9#define INCLUDED_OWC_OWC_CHANNEL_ABSOLUTE_CPLUS_IMPL_H
21 int d_num_outputs = 1;
23 std::vector<float> d_tx_lambertian_order_array;
24 std::vector<float> d_rx_photosensor_area_array;
26 std::vector<float> d_distance_array;
28 std::vector<float> d_emission_angle_array;
29 std::vector<float> d_acceptance_angle_array;
31 std::vector<float> d_optical_filter_transmittance_array;
32 std::vector<float> d_refractive_index_array;
37 std::vector<float> d_concentrator_FOV_array;
38 std::vector<float> d_E2O_conversion_factor_array;
39 std::vector<float> d_O2E_conversion_factor_array;
41 std::vector<float> d_tx_coordinates_array;
42 std::vector<float> d_tx_orientation_array;
43 std::vector<float> d_rx_coordinates_array;
44 std::vector<float> d_rx_orientation_array;
45 std::vector<float> channel_model_values;
49 void calculate_channel_model_values()
51 channel_model_values.clear();
54 for (
int x = 0; x < nout; x++) {
55 for (
int j = 0; j < nin; j++) {
59 int index = x * nin + j;
72 g = refractive_index_squared/sin_of_concentrator_FOV_squared;
81 H = Ct*((Gt*Gr)/distance_squared)*Cr;
83 channel_model_values.push_back(H);
89 float calculate_shot_noise(
float P_avg) {
90 const float q = 1.60217663e-19;
93 return std::sqrt(variance);
96 void set_distance_array()
98 d_distance_array.clear();
111 float xSquared = (x2-x1)*(x2-x1);
112 float ySquared = (y2-y1)*(y2-y1);
113 float zSquared = (z2-z1)*(z2-z1);
115 float distance = sqrt(xSquared+ySquared+zSquared);
117 d_distance_array.push_back(distance);
123 void set_emission_angle_array()
125 d_emission_angle_array.clear();
142 float ux_squared = ux*ux;
143 float uy_squared = uy*uy;
144 float uz_squared = uz*uz;
146 float u_mag = sqrt(ux_squared + uy_squared + uz_squared);
152 float vx_squared = vx*vx;
153 float vy_squared = vy*vy;
154 float vz_squared = vz*vz;
156 float v_mag = sqrt(vx_squared + vy_squared + vz_squared);
160 float numerator= (ux*vx)+(uy*vy)+(uz*vz);
161 float denominator = u_mag*v_mag;
163 angle = acos((numerator/denominator))*(180/M_PI);
166 d_emission_angle_array.push_back(angle);
172 void set_acceptance_angle_array()
174 d_acceptance_angle_array.clear();
195 float ux_squared = ux*ux;
196 float uy_squared = uy*uy;
197 float uz_squared = uz*uz;
199 float u_mag = sqrt(ux_squared + uy_squared + uz_squared);
201 float vx_squared = vx*vx;
202 float vy_squared = vy*vy;
203 float vz_squared = vz*vz;
205 float v_mag = sqrt(vx_squared + vy_squared + vz_squared);
210 float numerator= (ux*vx)+(uy*vy)+(uz*vz);
211 float denominator = u_mag*v_mag;
213 angle = acos((numerator/denominator))*(180/M_PI);
216 d_acceptance_angle_array.push_back(angle);
223 OWC_Channel_absolute_cplus_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,
bool clip_neg,
bool shot_noise,
float sample_rate,
float responsivity,
const std::vector<float>&
concentrator_FOV_array,
const std::vector<float>&
E2O_conversion_factor_array,
const std::vector<float>&
O2E_conversion_factor_array);
285 int work(
int noutput_items, gr_vector_const_void_star &input_items,
286 gr_vector_void_star &output_items);
std::vector< float > O2E_conversion_factor_array()
Definition OWC_Channel_absolute_cplus_impl.h:275
std::vector< float > rx_photosensor_area_array()
Definition OWC_Channel_absolute_cplus_impl.h:248
int r_num_outputs()
Definition OWC_Channel_absolute_cplus_impl.h:230
float sample_rate()
Definition OWC_Channel_absolute_cplus_impl.h:263
void set_tx_lambertian_order_array(std::vector< float > tx_lambertian_order_array)
Definition OWC_Channel_absolute_cplus_impl.h:244
std::vector< float > tx_orientation_array()
Definition OWC_Channel_absolute_cplus_impl.h:236
void set_sample_rate(float sample_rate)
Definition OWC_Channel_absolute_cplus_impl.h:262
std::vector< float > refractive_index_array()
Definition OWC_Channel_absolute_cplus_impl.h:254
std::vector< float > rx_coordinates_array()
Definition OWC_Channel_absolute_cplus_impl.h:239
void set_concentrator_FOV_array(std::vector< float > concentrator_FOV_array)
Definition OWC_Channel_absolute_cplus_impl.h:268
void set_optical_filter_transmittance_array(std::vector< float > optical_filter_transmittance_array)
Definition OWC_Channel_absolute_cplus_impl.h:250
void set_shot_noise(bool shot_noise)
Definition OWC_Channel_absolute_cplus_impl.h:259
std::vector< float > distance_array()
Definition OWC_Channel_absolute_cplus_impl.h:277
std::vector< float > concentrator_FOV_array()
Definition OWC_Channel_absolute_cplus_impl.h:269
void set_E2O_conversion_factor_array(std::vector< float > E2O_conversion_factor_array)
Definition OWC_Channel_absolute_cplus_impl.h:271
void set_rx_coordinates_array(std::vector< float > rx_coordinates_array)
Definition OWC_Channel_absolute_cplus_impl.h:238
void set_refractive_index_array(std::vector< float > refractive_index_array)
Definition OWC_Channel_absolute_cplus_impl.h:253
void set_rx_orientation_array(std::vector< float > rx_orientation_array)
Definition OWC_Channel_absolute_cplus_impl.h:241
int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
void set_tx_coordinates_array(std::vector< float > tx_coordinates_array)
Definition OWC_Channel_absolute_cplus_impl.h:232
std::vector< float > emission_angle_array()
Definition OWC_Channel_absolute_cplus_impl.h:279
bool get_clip_neg()
Definition OWC_Channel_absolute_cplus_impl.h:257
void set_num_inputs(int num_inputs)
Definition OWC_Channel_absolute_cplus_impl.h:226
void set_clip_neg(bool clip_neg)
Definition OWC_Channel_absolute_cplus_impl.h:256
void set_responsivity(float responsivity)
Definition OWC_Channel_absolute_cplus_impl.h:265
float responsivity()
Definition OWC_Channel_absolute_cplus_impl.h:266
std::vector< float > E2O_conversion_factor_array()
Definition OWC_Channel_absolute_cplus_impl.h:272
void set_tx_orientation_array(std::vector< float > tx_orientation_array)
Definition OWC_Channel_absolute_cplus_impl.h:235
void set_num_outputs(int num_outputs)
Definition OWC_Channel_absolute_cplus_impl.h:229
std::vector< float > tx_coordinates_array()
Definition OWC_Channel_absolute_cplus_impl.h:233
bool get_shot_noise()
Definition OWC_Channel_absolute_cplus_impl.h:260
std::vector< float > acceptance_angle_array()
Definition OWC_Channel_absolute_cplus_impl.h:281
std::vector< float > optical_filter_transmittance_array()
Definition OWC_Channel_absolute_cplus_impl.h:251
void set_rx_photosensor_area_array(std::vector< float > rx_photosensor_area_array)
Definition OWC_Channel_absolute_cplus_impl.h:247
OWC_Channel_absolute_cplus_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, bool clip_neg, bool shot_noise, float sample_rate, float responsivity, const std::vector< float > &concentrator_FOV_array, const std::vector< float > &E2O_conversion_factor_array, const std::vector< float > &O2E_conversion_factor_array)
int r_num_inputs()
Definition OWC_Channel_absolute_cplus_impl.h:227
std::vector< float > tx_lambertian_order_array()
Definition OWC_Channel_absolute_cplus_impl.h:245
std::vector< float > rx_orientation_array()
Definition OWC_Channel_absolute_cplus_impl.h:242
void set_O2E_conversion_factor_array(std::vector< float > O2E_conversion_factor_array)
Definition OWC_Channel_absolute_cplus_impl.h:274
~OWC_Channel_absolute_cplus_impl()
<+description of block+>
Definition OWC_Channel_absolute_cplus.h:22
Definition Hermitian_Symmetry_i_o_same_vec_size_cplus.h:31
Definition Hermitian_Symmetry_i_o_same_vec_size_cplus.h:30