Statistics
| Revision:

## root / trunk / code / behaviors / formation_control / push_pull / vectorSizeSpecs.m @ 1510

 1 ```% vectorSizeSpecs - Script used to help calculate the max scalar value by ``` ```% which to multiply the BOM unit vectors (thus increasing the ``` ```% precision of the scaled vectors) such that in the worst case, the ``` ```% total net sum will not overflow the data type used to represent ``` ```% the net vector components. ``` ```% ``` ```% Author: John Sexton, Colony Project, CMU Robotics Club ``` ```% Parameters ``` ```maxIntensity = 255; ``` ```dataBits = 16; ``` ```scalar = 25; ``` ```n = 0:8; ``` ```angle = n * 2 * pi / 16; ``` ```vector_components = sin(angle); ``` ```max_net_component = sum(vector_components); ``` ```% Formula for max_net_component (mnc), obtained by summing ``` ```% values from the unit circle at angles of 0 : pi/8 : pi ``` ```% in quadrants I and II ``` ```mnc = 1; %sin(pi/2) ``` ```mnc = mnc + (2* (1/2)*sqrt(2+sqrt(2))); %sin(3pi/8) and sin(5pi/8) ``` ```mnc = mnc + (2* sqrt(2)/2); %sin(pi/4) and sin(3pi/4) ``` ```mnc = mnc + (2* (1/2)*sqrt(2-sqrt(2))); %sin(pi/8) and sin(7pi/8) ``` ```calc_scalar = (2^(dataBits-1)-1) / (max_net_component * maxIntensity); ``` ```% calc_scalar = 25.560 => use 25 as scalor ``` ```fprintf('With %d data bits, calculated scalar value: %.3f\n\n', dataBits, calc_scalar); ``` ```% Check worst case ``` ```scaled_vector_components = scalar * vector_components; ``` ```worst_case = scaled_vector_components * maxIntensity; ``` ```worst_sum = sum(worst_case); ``` ```fprintf('With scalar %d, max worst case sum: %d\n', scalar, worst_sum); ``` ```fprintf('Max number: 2^(%d-1) - 1 = %d\n', dataBits, (2^(dataBits-1)-1)); ```