23 #ifndef INCLUDED_OWC_OWC_CHANNEL_RELATIVE_TWO_IMPL_H 24 #define INCLUDED_OWC_OWC_CHANNEL_RELATIVE_TWO_IMPL_H 27 #include <gnuradio/random.h> 36 int d_num_outputs = 1;
37 std::vector<float> d_emission_angle_array;
38 std::vector<float> d_acceptance_angle_array;
39 std::vector<float> d_distance_array;
40 std::vector<float> d_lambertian_order_array;
41 std::vector<float> d_photosensor_area_array;
42 std::vector<float> d_optical_filter_transmittance_array;
43 std::vector<float> d_refractive_index_array;
44 std::vector<float> d_concentrator_FOV_array;
45 std::vector<float> d_E2O_conversion_factor_array;
46 std::vector<float> d_O2E_conversion_factor_array;
50 std::vector<int> d_num_delay_samples_array;
51 std::vector<int> d_blockage_array;
53 std::vector<float> d_remaining_input_samples;
55 std::vector<float> d_noise_power_array;
59 int d_noutput_items_previous = 10000;
62 OWC_Channel_relative_two_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,
int sample_rate,
const std::vector<int>&
blockage_array,
const std::vector<float>&
noise_power_array);
106 d_num_delay_samples_array.clear();
107 float speed_of_light = 299792458;
109 float propagation_time = 0;
110 float num_delay_samples = 0;
114 for (
int x = 0; x < array_length; x++)
117 num_delay_samples = round(propagation_time *
sample_rate());
119 d_num_delay_samples_array.push_back(num_delay_samples);
127 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,
int blockage){
130 if (emission_angle <= 90)
132 Gt = ((lambertian_order + 1)/(2*M_PI))*pow(cos(emission_angle*(M_PI/180)),lambertian_order);
139 float Ts = optical_filter_transmittance;
141 float refractive_index_squared = refractive_index*refractive_index;
142 float sin_of_concentrator_FOV_squared = sin(concentrator_FOV*(M_PI/180))*sin(concentrator_FOV*(M_PI/180));
143 float g = refractive_index_squared/sin_of_concentrator_FOV_squared;
144 if ((acceptance_angle < 0) || (acceptance_angle > concentrator_FOV))
147 float Gr = ps_area*Ts*g*cos(acceptance_angle*(M_PI/180));
148 float distance_squared = distance * distance;
150 float Ct = E2O_conversion_factor;
151 float Cr = O2E_conversion_factor;
153 float H = Ct*((Gt*Gr)/distance_squared)*Cr;
161 for (
int x = 0; x <
r_num_inputs()*d_noutput_items_previous; x++)
163 d_remaining_input_samples.push_back(0);
173 gr_vector_const_void_star &input_items,
174 gr_vector_void_star &output_items
void set_remaining_samples_array()
Definition: OWC_Channel_relative_two_impl.h:159
void set_photosensor_area_array(std::vector< float > photosensor_area_array)
Definition: OWC_Channel_relative_two_impl.h:83
void set_num_outputs(int num_outputs)
Definition: OWC_Channel_relative_two_impl.h:68
std::vector< float > O2E_conversion_factor_array()
Definition: OWC_Channel_relative_two_impl.h:99
std::vector< float > photosensor_area_array()
Definition: OWC_Channel_relative_two_impl.h:84
<+description of block+>
Definition: OWC_Channel_relative_two.h:37
void set_num_inputs(int num_inputs)
Definition: OWC_Channel_relative_two_impl.h:65
void set_distance_array(std::vector< float > distance_array)
Definition: OWC_Channel_relative_two_impl.h:77
void set_acceptance_angle_array(std::vector< float > acceptance_angle_array)
Definition: OWC_Channel_relative_two_impl.h:74
~OWC_Channel_relative_two_impl()
void set_O2E_conversion_factor_array(std::vector< float > O2E_conversion_factor_array)
Definition: OWC_Channel_relative_two_impl.h:98
std::vector< float > emission_angle_array()
Definition: OWC_Channel_relative_two_impl.h:72
void set_refractive_index_array(std::vector< float > refractive_index_array)
Definition: OWC_Channel_relative_two_impl.h:89
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, int blockage)
Definition: OWC_Channel_relative_two_impl.h:127
std::vector< float > concentrator_FOV_array()
Definition: OWC_Channel_relative_two_impl.h:93
std::vector< float > acceptance_angle_array()
Definition: OWC_Channel_relative_two_impl.h:75
std::vector< float > E2O_conversion_factor_array()
Definition: OWC_Channel_relative_two_impl.h:96
Definition: OWC_Channel_relative_two_impl.h:32
Definition: binary_to_decimal_mapper.h:29
std::vector< float > lambertian_order_array()
Definition: OWC_Channel_relative_two_impl.h:81
int sample_rate()
Definition: OWC_Channel_relative_two_impl.h:102
int r_num_outputs()
Definition: OWC_Channel_relative_two_impl.h:69
std::vector< int > num_delay_samples_array()
Definition: OWC_Channel_relative_two_impl.h:122
void set_optical_filter_transmittance_array(std::vector< float > optical_filter_transmittance_array)
Definition: OWC_Channel_relative_two_impl.h:86
void set_num_delay_samples_array()
Definition: OWC_Channel_relative_two_impl.h:104
OWC_Channel_relative_two_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, int sample_rate, const std::vector< int > &blockage_array, const std::vector< float > &noise_power_array)
int r_num_inputs()
Definition: OWC_Channel_relative_two_impl.h:66
std::vector< int > blockage_array()
Definition: OWC_Channel_relative_two_impl.h:125
void set_noise_power_array(std::vector< float > noise_power_array)
Definition: OWC_Channel_relative_two_impl.h:168
std::vector< float > remaining_samples_array()
Definition: OWC_Channel_relative_two_impl.h:166
std::vector< float > optical_filter_transmittance_array()
Definition: OWC_Channel_relative_two_impl.h:87
void set_E2O_conversion_factor_array(std::vector< float > E2O_conversion_factor_array)
Definition: OWC_Channel_relative_two_impl.h:95
std::vector< float > refractive_index_array()
Definition: OWC_Channel_relative_two_impl.h:90
void set_emission_angle_array(std::vector< float > emission_angle_array)
Definition: OWC_Channel_relative_two_impl.h:71
std::vector< float > noise_power_array()
Definition: OWC_Channel_relative_two_impl.h:169
void set_concentrator_FOV_array(std::vector< float > concentrator_FOV_array)
Definition: OWC_Channel_relative_two_impl.h:92
void set_sample_rate(int sample_rate)
Definition: OWC_Channel_relative_two_impl.h:101
int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
void set_lambertian_order_array(std::vector< float > lambertian_order_array)
Definition: OWC_Channel_relative_two_impl.h:80
void set_blockage_array(std::vector< int > blockage_array)
Definition: OWC_Channel_relative_two_impl.h:124
std::vector< float > distance_array()
Definition: OWC_Channel_relative_two_impl.h:78