8#ifndef INCLUDED_OWC_OWC_CHANNEL_ABSOLUTE_CVOLK_IMPL_H
9#define INCLUDED_OWC_OWC_CHANNEL_ABSOLUTE_CVOLK_IMPL_H
22 int d_num_outputs = 1;
24 std::vector<float> d_tx_lambertian_order_array;
25 std::vector<float> d_rx_photosensor_area_array;
27 std::vector<float> d_distance_array;
29 std::vector<float> d_emission_angle_array;
30 std::vector<float> d_acceptance_angle_array;
32 std::vector<float> d_optical_filter_transmittance_array;
33 std::vector<float> d_refractive_index_array;
38 std::vector<float> d_concentrator_FOV_array;
39 std::vector<float> d_E2O_conversion_factor_array;
40 std::vector<float> d_O2E_conversion_factor_array;
42 std::vector<float> d_tx_coordinates_array;
43 std::vector<float> d_tx_orientation_array;
44 std::vector<float> d_rx_coordinates_array;
45 std::vector<float> d_rx_orientation_array;
46 std::vector<float> channel_model_values;
50 void calculate_channel_model_values()
52 channel_model_values.clear();
55 for (
int x = 0; x < nout; x++) {
56 for (
int j = 0; j < nin; j++) {
60 int index = x * nin + j;
74 g = refractive_index_squared/sin_of_concentrator_FOV_squared;
83 H = Ct*((Gt*Gr)/distance_squared)*Cr;
85 channel_model_values.push_back(H);
91 float calculate_shot_noise(
float P_avg) {
92 const float q = 1.60217663e-19;
95 return std::sqrt(variance);
98 void set_distance_array()
100 d_distance_array.clear();
113 float xSquared = (x2-x1)*(x2-x1);
114 float ySquared = (y2-y1)*(y2-y1);
115 float zSquared = (z2-z1)*(z2-z1);
117 float distance = sqrt(xSquared+ySquared+zSquared);
119 d_distance_array.push_back(distance);
125 void set_emission_angle_array()
127 d_emission_angle_array.clear();
144 float ux_squared = ux*ux;
145 float uy_squared = uy*uy;
146 float uz_squared = uz*uz;
148 float u_mag = sqrt(ux_squared + uy_squared + uz_squared);
154 float vx_squared = vx*vx;
155 float vy_squared = vy*vy;
156 float vz_squared = vz*vz;
158 float v_mag = sqrt(vx_squared + vy_squared + vz_squared);
163 float numerator= (ux*vx)+(uy*vy)+(uz*vz);
164 float denominator = u_mag*v_mag;
166 angle = acos((numerator/denominator))*(180/M_PI);
169 d_emission_angle_array.push_back(angle);
175 void set_acceptance_angle_array()
177 d_acceptance_angle_array.clear();
198 float ux_squared = ux*ux;
199 float uy_squared = uy*uy;
200 float uz_squared = uz*uz;
202 float u_mag = sqrt(ux_squared + uy_squared + uz_squared);
204 float vx_squared = vx*vx;
205 float vy_squared = vy*vy;
206 float vz_squared = vz*vz;
208 float v_mag = sqrt(vx_squared + vy_squared + vz_squared);
213 float numerator= (ux*vx)+(uy*vy)+(uz*vz);
214 float denominator = u_mag*v_mag;
216 angle = acos((numerator/denominator))*(180/M_PI);
219 d_acceptance_angle_array.push_back(angle);
226 OWC_Channel_absolute_cvolk_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);
290 int work(
int noutput_items, gr_vector_const_void_star &input_items,
291 gr_vector_void_star &output_items);
int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
bool get_clip_neg()
Definition OWC_Channel_absolute_cvolk_impl.h:260
~OWC_Channel_absolute_cvolk_impl()
void set_O2E_conversion_factor_array(std::vector< float > O2E_conversion_factor_array)
Definition OWC_Channel_absolute_cvolk_impl.h:277
void set_num_inputs(int num_inputs)
Definition OWC_Channel_absolute_cvolk_impl.h:229
std::vector< float > rx_orientation_array()
Definition OWC_Channel_absolute_cvolk_impl.h:245
std::vector< float > optical_filter_transmittance_array()
Definition OWC_Channel_absolute_cvolk_impl.h:254
bool get_shot_noise()
Definition OWC_Channel_absolute_cvolk_impl.h:263
std::vector< float > tx_orientation_array()
Definition OWC_Channel_absolute_cvolk_impl.h:239
void set_tx_lambertian_order_array(std::vector< float > tx_lambertian_order_array)
Definition OWC_Channel_absolute_cvolk_impl.h:247
void set_sample_rate(float sample_rate)
Definition OWC_Channel_absolute_cvolk_impl.h:265
int r_num_outputs()
Definition OWC_Channel_absolute_cvolk_impl.h:233
void set_num_outputs(int num_outputs)
Definition OWC_Channel_absolute_cvolk_impl.h:232
std::vector< float > refractive_index_array()
Definition OWC_Channel_absolute_cvolk_impl.h:257
OWC_Channel_absolute_cvolk_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)
std::vector< float > rx_coordinates_array()
Definition OWC_Channel_absolute_cvolk_impl.h:242
std::vector< float > O2E_conversion_factor_array()
Definition OWC_Channel_absolute_cvolk_impl.h:278
std::vector< float > concentrator_FOV_array()
Definition OWC_Channel_absolute_cvolk_impl.h:272
void set_concentrator_FOV_array(std::vector< float > concentrator_FOV_array)
Definition OWC_Channel_absolute_cvolk_impl.h:271
void set_optical_filter_transmittance_array(std::vector< float > optical_filter_transmittance_array)
Definition OWC_Channel_absolute_cvolk_impl.h:253
std::vector< float > rx_photosensor_area_array()
Definition OWC_Channel_absolute_cvolk_impl.h:251
void set_clip_neg(bool clip_neg)
Definition OWC_Channel_absolute_cvolk_impl.h:259
float sample_rate()
Definition OWC_Channel_absolute_cvolk_impl.h:266
std::vector< float > acceptance_angle_array()
Definition OWC_Channel_absolute_cvolk_impl.h:287
void set_responsivity(float responsivity)
Definition OWC_Channel_absolute_cvolk_impl.h:268
void set_refractive_index_array(std::vector< float > refractive_index_array)
Definition OWC_Channel_absolute_cvolk_impl.h:256
void set_shot_noise(bool shot_noise)
Definition OWC_Channel_absolute_cvolk_impl.h:262
void set_E2O_conversion_factor_array(std::vector< float > E2O_conversion_factor_array)
Definition OWC_Channel_absolute_cvolk_impl.h:274
void set_tx_coordinates_array(std::vector< float > tx_coordinates_array)
Definition OWC_Channel_absolute_cvolk_impl.h:235
void set_rx_coordinates_array(std::vector< float > rx_coordinates_array)
Definition OWC_Channel_absolute_cvolk_impl.h:241
std::vector< float > distance_array()
Definition OWC_Channel_absolute_cvolk_impl.h:281
std::vector< float > E2O_conversion_factor_array()
Definition OWC_Channel_absolute_cvolk_impl.h:275
float responsivity()
Definition OWC_Channel_absolute_cvolk_impl.h:269
std::vector< float > emission_angle_array()
Definition OWC_Channel_absolute_cvolk_impl.h:284
void set_rx_orientation_array(std::vector< float > rx_orientation_array)
Definition OWC_Channel_absolute_cvolk_impl.h:244
std::vector< float > tx_coordinates_array()
Definition OWC_Channel_absolute_cvolk_impl.h:236
int r_num_inputs()
Definition OWC_Channel_absolute_cvolk_impl.h:230
void set_tx_orientation_array(std::vector< float > tx_orientation_array)
Definition OWC_Channel_absolute_cvolk_impl.h:238
std::vector< float > tx_lambertian_order_array()
Definition OWC_Channel_absolute_cvolk_impl.h:248
void set_rx_photosensor_area_array(std::vector< float > rx_photosensor_area_array)
Definition OWC_Channel_absolute_cvolk_impl.h:250
<+description of block+>
Definition OWC_Channel_absolute_cvolk.h:22
Definition Hermitian_Symmetry_i_o_same_vec_size_cplus.h:31
Definition Hermitian_Symmetry_i_o_same_vec_size_cplus.h:30