Browse Source

Complete band elimination units and transfer functions

master
Apostolos Fanakis 6 years ago
parent
commit
64f83f0da9
  1. 202
      Band Elimination Chebyshev/band_elimination_design.m

202
Band Elimination Chebyshev/band_elimination_design.m

@ -390,8 +390,8 @@ clear -regexp ^transformation_
% grouped with a zero at 0.0 + 15707.96 i, resulting in a low pass notch. % grouped with a zero at 0.0 + 15707.96 i, resulting in a low pass notch.
% ------------------------------------------------------------------------- % -------------------------------------------------------------------------
% Two low pass notch units are required to implement the desired band % Two low pass notch units and two high pass notch units are required to
% elimination filter. % implement the desired band elimination filter.
% ========== ZEROS-POLES GROUPING END ========== % ========== ZEROS-POLES GROUPING END ==========
@ -418,18 +418,20 @@ high_pass_notch_units_transfer_functions = [tf(1) tf(1)];
for i=1:2 for i=1:2
unit_index = i*2-1; unit_index = i*2-1;
% normalized_pole_radial_frequency = 1;
normalized_transfer_function_zero = ...
abs(band_elimination_transfer_function_zeros(1,i))/ ...
band_elimination_poles_radial_frequencies(1,unit_index);
% Calculates k1 design parameter using the eq. 7-135 % Calculates k1 design parameter using the eq. 7-135
high_pass_notch_units_k1(1,i) = ... high_pass_notch_units_k1(1,i) = 1/normalized_transfer_function_zero^2-1;
band_elimination_poles_radial_frequencies(1,unit_index)^2/ ...
abs(band_elimination_transfer_function_zeros(1,i))^2-1;
% Calculates k2 design parameter using the eq. 7-136 % Calculates k2 design parameter using the eq. 7-136
temp = (2+high_pass_notch_units_k1(1,i))* ... temp = (2+high_pass_notch_units_k1(1,i))* ...
band_elimination_poles_Q(1,unit_index)^2; band_elimination_poles_Q(1,unit_index)^2;
high_pass_notch_units_k2(1,i) = temp/(temp+1); high_pass_notch_units_k2(1,i) = temp/(temp+1);
% Calculates k (unit's gain at high frequencies) using the eq. 7-137 % Calculates k (unit's gain at high frequencies) using the eq. 7-137
high_pass_notch_units_gain_high(1,i) = high_pass_notch_units_k2(1,i)* ... high_pass_notch_units_gain_high(1,i) = high_pass_notch_units_k2(1,i)* ...
(band_elimination_poles_radial_frequencies(1,unit_index)^2/ ... (1/normalized_transfer_function_zero^2);
abs(band_elimination_transfer_function_zeros(1,i))^2);
% Calculates R2 using the eq. 7-138 % Calculates R2 using the eq. 7-138
high_pass_notch_units_R2(1,i) = band_elimination_poles_Q(1,unit_index)^2* ... high_pass_notch_units_R2(1,i) = band_elimination_poles_Q(1,unit_index)^2* ...
(high_pass_notch_units_k1(1,i)+2)^2; (high_pass_notch_units_k1(1,i)+2)^2;
@ -475,15 +477,15 @@ for i=1:2
(high_pass_notch_units_frequency_scale_factors(1,i)* ... (high_pass_notch_units_frequency_scale_factors(1,i)* ...
high_pass_notch_units_amplitude_scale_factors(1,i)); high_pass_notch_units_amplitude_scale_factors(1,i));
% Builds unit's transfer function % Builds unit's transfer function using the eq. 7-129, 7-130, 7-131
high_pass_notch_unit_numerator = [1 ... high_pass_notch_unit_numerator = [1 ...
0 ... 0 ...
1/(high_pass_notch_units_R2(1,i)*high_pass_notch_units_C(1,i)^2* ... 1/(high_pass_notch_units_R1(1,i)*high_pass_notch_units_R2(1,i)*high_pass_notch_units_C(1,i)^2* ...
(high_pass_notch_units_k1(1,i)+1))]; (high_pass_notch_units_k1(1,i)+1))];
high_pass_notch_unit_denominator = [1 ... high_pass_notch_unit_denominator = [1 ...
(2+high_pass_notch_units_k1(1,i))/ ... (2+high_pass_notch_units_k1(1,i))/ ...
(high_pass_notch_units_R2(1,i)*high_pass_notch_units_C(1,i)) ... (high_pass_notch_units_R2(1,i)*high_pass_notch_units_C(1,i)) ...
1/(high_pass_notch_units_R2(1,i)*high_pass_notch_units_C(1,i)^2)]; 1/(high_pass_notch_units_R1(1,i)*high_pass_notch_units_R2(1,i)*high_pass_notch_units_C(1,i)^2)];
high_pass_notch_units_transfer_functions(1,i) = tf( ... high_pass_notch_units_transfer_functions(1,i) = tf( ...
high_pass_notch_unit_numerator, high_pass_notch_unit_denominator); high_pass_notch_unit_numerator, high_pass_notch_unit_denominator);
@ -492,18 +494,186 @@ for i=1:2
high_pass_notch_units_gain_high(1,i); high_pass_notch_units_gain_high(1,i);
end end
plot_transfer_function(high_pass_notch_units_transfer_functions(1,1)); % Low pass notch units 2 and 4
%ltiview(high_pass_notch_units_transfer_functions(1,1)); % Initializes necessary arrays, each array is 1X2, the first element (1,1)
% corresponds to the first unit (unit 2) and the second element (1,2) to
% second unit (unit 4).
low_pass_notch_units_resistors_1 = zeros([1 2]);
low_pass_notch_units_resistors_2 = zeros([1 2]);
low_pass_notch_units_resistors_3 = zeros([1 2]);
low_pass_notch_units_resistors_4 = zeros([1 2]);
low_pass_notch_units_resistors_5 = zeros([1 2]);
low_pass_notch_units_capacitors = zeros([1 2]);
low_pass_notch_units_gains_high = zeros([1 2]);
low_pass_notch_units_gains_low = zeros([1 2]);
low_pass_notch_units_frequency_scale_factors = zeros([1 2]);
low_pass_notch_units_amplitude_scale_factors = zeros([1 2]);
low_pass_notch_units_transfer_functions = [tf(1) tf(1)];
for i=1:2
unit_index = i*2;
% normalized_inverse_pole_radial_frequency = 1;
normalized_transfer_function_zero = ...
abs(band_elimination_transfer_function_zeros(1,unit_index))/ ...
band_elimination_poles_radial_frequencies(1,unit_index);
% According to the design method outlined in 7.6-B, at page 35
low_pass_notch_units_resistors_1(1,i) = 1; % Ohm
% Calculates the capacity of the normalized circuit capacitors using
% the eq. 7-150
low_pass_notch_units_capacitors(1,i) = 1/ ...
(2*band_elimination_poles_Q(1,unit_index)); % Farad
% Calculates the resistance of R2 using the same equations (7-150)
low_pass_notch_units_resistors_2(1,i) = 4* ...
band_elimination_poles_Q(1,unit_index)^2; % Ohm
% Calculates the resistance of R5 using the eq. 7-152
low_pass_notch_units_resistors_5(1,i) = ...
(4*band_elimination_poles_Q(1,unit_index)^2)/ ...
(normalized_transfer_function_zero^2-1); % Ohm
low_pass_notch_units_resistors_4(1,i) = 1; % Ohm
% Calculates the resistance of R3 using the eq. 7-155
low_pass_notch_units_resistors_3(1,i) = ...
(normalized_transfer_function_zero^2)/ ...
(2*band_elimination_poles_Q(1,unit_index)^2); % Ohm
% Calculates the gain of this unit in high frequencies using the eq. 7-143
low_pass_notch_units_gains_high(1,i) = ...
(low_pass_notch_units_resistors_4(1,i))/ ...
(low_pass_notch_units_resistors_3(1,i)+ ...
low_pass_notch_units_resistors_4(1,i));
% Calculates the gain of this unit in low frequencies using the
% eq. 7-146, 7-147, 7-148, setting s = 0
low_pass_notch_units_gains_low(1,i) = ...
low_pass_notch_units_gains_high(1,i)* ...
normalized_transfer_function_zero^2;
% Performs scaling
low_pass_notch_units_frequency_scale_factors(1,i) = ...
band_elimination_poles_radial_frequencies(1,unit_index);
% AEM(4) = 1, so the scaling will be performed to achieve a capacitor
% value of 0.1uF using the eq. 6-33
low_pass_notch_units_amplitude_scale_factors(1,i) = ...
low_pass_notch_units_capacitors(1,i)/ ...
(low_pass_notch_units_frequency_scale_factors(1,i)*0.1*10^(-6));
low_pass_notch_units_resistors_1(1,i) = ...
low_pass_notch_units_resistors_1(1,i)* ...
low_pass_notch_units_amplitude_scale_factors(1,i); % Ohm
low_pass_notch_units_resistors_2(1,i) = ...
low_pass_notch_units_resistors_2(1,i)* ...
low_pass_notch_units_amplitude_scale_factors(1,i); % Ohm
low_pass_notch_units_resistors_3(1,i) = ...
low_pass_notch_units_resistors_3(1,i)* ...
low_pass_notch_units_amplitude_scale_factors(1,i); % Ohm
low_pass_notch_units_resistors_4(1,i) = ...
low_pass_notch_units_resistors_4(1,i)* ...
low_pass_notch_units_amplitude_scale_factors(1,i); % Ohm
low_pass_notch_units_resistors_5(1,i) = ...
low_pass_notch_units_resistors_5(1,i)* ...
low_pass_notch_units_amplitude_scale_factors(1,i); % Ohm
low_pass_notch_units_capacitors(1,i) = 0.1*10^(-6); % Farad
% Builds unit's transfer function
% Builds numerator and denominator of the transfer function using the
% eq. 7-146, 7-147 & 7-148
unit_numerator = [1 ...
(((low_pass_notch_units_gains_high(1,i)-1)/ ...
(low_pass_notch_units_gains_high(1,i)* ...
low_pass_notch_units_resistors_1(1,i)* ...
low_pass_notch_units_capacitors(1,i)))+ ...
(2/(low_pass_notch_units_resistors_2(1,i)* ...
low_pass_notch_units_capacitors(1,i)))+ ...
(2/(low_pass_notch_units_resistors_5(1,i)* ...
low_pass_notch_units_capacitors(1,i)))) ...
(1/(low_pass_notch_units_resistors_1(1,i)* ...
low_pass_notch_units_resistors_5(1,i)* ...
low_pass_notch_units_capacitors(1,i)^2)+ ...
1/(low_pass_notch_units_resistors_1(1,i)* ...
low_pass_notch_units_resistors_2(1,i)* ...
low_pass_notch_units_capacitors(1,i)^2))];
unit_denominator = [1 ...
2/(low_pass_notch_units_resistors_2(1,i)* ...
low_pass_notch_units_capacitors(1,i)) ...
1/(low_pass_notch_units_resistors_1(1,i)* ...
low_pass_notch_units_resistors_2(1,i)* ...
low_pass_notch_units_capacitors(1,i)^2)];
low_pass_notch_units_transfer_functions(1,i) = ...
tf(unit_numerator, unit_denominator);
low_pass_notch_units_transfer_functions(1,i) = ...
low_pass_notch_units_transfer_functions(1,i)* ...
low_pass_notch_units_gains_high(1,i);
end
% Clears unneeded variable from workspace
clearVars = {'i', 'temp', 'unit_index', 'normalized_transfer_function_zero'};
clear(clearVars{:})
clear clearVars
clear -regexp _numerator$
clear -regexp _denominator$
% ========== UNITS IMPLEMENTATION END ==========
%% ========== GAIN ADJUSTMENT START ==========
total_gain_high = high_pass_notch_units_gain_high(1,1)* ...
high_pass_notch_units_gain_high(1,2)* ...
low_pass_notch_units_gains_high(1,1)* ...
low_pass_notch_units_gains_high(1,2);
unit_adjustment_gain = 1/total_gain_high;
% We arbitrarily choose to use a 10KOhm series resistor in the adjustment
% unit
unit_adjustment_feedback_resistor = 10*10^3*unit_adjustment_gain;
total_transfer_function = series(series(series( ...
high_pass_notch_units_transfer_functions(1,1), ...
high_pass_notch_units_transfer_functions(1,2)), ...
low_pass_notch_units_transfer_functions(1,1)), ...
low_pass_notch_units_transfer_functions(1,2));
total_transfer_function = total_transfer_function*unit_adjustment_gain;
%{ %{
ltiview(high_pass_notch_units_transfer_functions(1,1), ... ltiview(high_pass_notch_units_transfer_functions(1,1), ...
high_pass_notch_units_transfer_functions(1,2), ... high_pass_notch_units_transfer_functions(1,2));
series(high_pass_notch_units_transfer_functions(1,1), ...
high_pass_notch_units_transfer_functions(1,2)));
%} %}
% ========== UNITS IMPLEMENTATION END ========== %{
ltiview(low_pass_notch_units_transfer_functions(1,1), ...
low_pass_notch_units_transfer_functions(1,2));
%}
%{
ltiview(high_pass_notch_units_transfer_functions(1,1), ...
high_pass_notch_units_transfer_functions(1,2), ...
low_pass_notch_units_transfer_functions(1,1), ...
low_pass_notch_units_transfer_functions(1,2));
%}
%{
ltiview(high_pass_notch_units_transfer_functions(1,1), ...
high_pass_notch_units_transfer_functions(1,2), ...
low_pass_notch_units_transfer_functions(1,1), ...
low_pass_notch_units_transfer_functions(1,2), ...
total_transfer_function);
%}
%ltiview(total_transfer_function);
%
plot_transfer_function(total_transfer_function, ...
[specification_central_frequency ...
design_half_power_radial_frequency/(2*pi) ...
specification_low_stop_frequency ...
specification_low_pass_frequency ...
specification_high_pass_frequency ...
specification_high_stop_frequency]);
%
% Clears unneeded variable from workspace
clearVars = {'total_transfer_function'};
clear(clearVars{:})
clear clearVars
clear -regexp _transfer_functions$
% ========== GAIN ADJUSTMENT END ==========
Loading…
Cancel
Save