Browse Source

High pass output init

master
Apostolos Fanakis 6 years ago
parent
commit
91a806445a
  1. 121
      High Pass Butterworth/high_pass_design.m

121
High Pass Butterworth/high_pass_design.m

@ -29,16 +29,19 @@ specification_stop_radial_frequency = ...
specification_min_stop_attenuation = 24+AEM(4)*(6/9); % dB
specification_max_pass_attenuation = 0.5+AEM(3)/36; % dB
clear design_param_m
% Outputs results
fprintf(['\n' '===== DESIGN SPECIFICATIONS =====' '\n' ...
'Filter design specifications:\n' ...
'Pass frequency = %.3fHz = %.3frad/s\n' ...
'Stop frequency = %.3fHz = %.3frad/s\n' ...
'Min stop attenuation = %.3fdB\n' ...
'Max pass attenuation = %.3fdB\n'], ...
specification_pass_frequency, specification_pass_radial_frequency, ...
specification_stop_frequency, specification_stop_radial_frequency, ...
specification_min_stop_attenuation, specification_max_pass_attenuation);
%{
specification_pass_radial_frequency = 15707.96; % rad/s
specification_stop_radial_frequency = 6283.2; % rad/s
clear design_param_m
specification_min_stop_attenuation = 25; % dB
specification_max_pass_attenuation = 0.5; % dB
%}
% ========== DESIGN SPECIFICATIONS END ==========
%% ========== PROTOTYPE LOW PASS DESIGN SPECIFICATIONS START ==========
@ -53,16 +56,25 @@ prototype_normalized_stop_radial_frequency = ...
% Min and max attenuations remain the same
% Outputs results
fprintf(['\n' '===== PROTOTYPE LOW PASS DESIGN SPECIFICATIONS =====' '\n' ...
'The prototype low pass filter will be designed with the\n' ...
'normalized stop radial frequency %.3frad/s, the normalized\n' ...
'pass radial frequency is equal to 1rad/s.\n' ...
'Min and max attenuation specifications remain the same.\n'], ...
prototype_normalized_stop_radial_frequency);
% ========== PROTOTYPE LOW PASS DESIGN SPECIFICATIONS END ==========
%% ========== PROTOTYPE LOW PASS DESIGN START ==========
% Designs the prototype normalized filter.
% Calculates the filter's order using the eq. 9-52
design_filter_order = ceil(log10(((10^ ...
temp_filter_order = log10(((10^ ...
(specification_min_stop_attenuation/10)-1)/(10^ ...
(specification_max_pass_attenuation/10)-1)))/ ...
(2*log10(prototype_normalized_stop_radial_frequency)));
(2*log10(prototype_normalized_stop_radial_frequency));
design_filter_order = ceil(temp_filter_order);
% Calculates the frequency at which half power of the low pass prototype
% occurs using the eq. 9-48
@ -162,13 +174,34 @@ else % Even number of poles
end
end
% Outputs results
fprintf(['\n' '===== PROTOTYPE LOW PASS DESIGN =====' '\n' ...
'A prototype low pass Butterworth filter is designed with the\n' ...
'specifications previously calculated.\n\n' ...
'Filter order = %.3f\n' ...
'Filter order ceiling = %d\n' ...
'Radial frequency at which half power occurs = %.3frad/s\n' ...
'Butterworth angles are ' char(177) '%.2f' char(176) ' and ' ...
char(177) '%.2f' char(176) '\n'], ...
temp_filter_order, design_filter_order, ...
design_half_power_radial_frequency, design_butterworth_angles(1,1), ...
design_butterworth_angles(1,2));
fprintf('\nLow pass Butterworth poles found:\n');
for i=1:low_pass_prototype_number_of_poles
fprintf(['Pole %d:\t' '%.3f' char(177) ...
'%.3fi, radial frequency = %.3f, Q = %.3f\n'], ...
i, low_pass_prototype_poles_real_parts(1,i), ...
low_pass_prototype_poles_imaginary_parts(1,i), ...
low_pass_prototype_poles_radial_frequencies(1,i), ...
low_pass_prototype_poles_Q(1,i));
end
% Clears unneeded variables from workspace
%
clearVars = {'i', 'prototype_normalized_stop_radial_frequency', ...
'low_pass_prototype_half_power_radial_frequency', 'theta'};
clear(clearVars{:})
clear clearVars
%
% ========== PROTOTYPE LOW PASS DESIGN END ==========
@ -192,6 +225,27 @@ high_pass_poles_Q = low_pass_prototype_poles_Q;
% filter order
high_pass_transfer_function_zeros = zeros([1 design_filter_order]);
% Outputs results
fprintf(['\n' '===== LOW PASS TO HIGH PASS TRANSFORMATION =====' '\n' ...
'The prototype low pass Butterworth filter is transformed into\n' ...
'a high pass Butterworth using the transformation S = 1/s.\n']);
fprintf('\nHigh pass Butterworth normalized poles found:\n');
for i=1:high_pass_number_of_poles
fprintf(['Pole %d:\t' '%.3f' char(177) ...
'%.3fi, radial frequency = %.3f, Q = %.3f\n'], ...
i, high_pass_poles_real_parts(1,i), ...
high_pass_poles_imaginary_parts(1,i), ...
high_pass_poles_radial_frequencies(1,i), ...
high_pass_poles_Q(1,i));
end
fprintf('\nTransfer function zeros:\n');
for i=1:length(high_pass_transfer_function_zeros)
fprintf(['Zero %d:\t' '0%+.3fi\n'], ...
i, high_pass_transfer_function_zeros(1,i));
end
% Clears unneeded variables from workspace
clear low_pass_prototype_number_of_poles
clear -regexp ^low_pass_prototype_
@ -213,6 +267,21 @@ for i=1:high_pass_number_of_poles
design_half_power_radial_frequency;
end
% Outputs results
fprintf(['\n' '===== POLES DE-NORMALIZATION =====' '\n' ...
'The high pass filter designed is normalized.\n' ...
'The poles are de-normalized.\n']);
fprintf('\nHigh pass Butterworth poles found:\n');
for i=1:high_pass_number_of_poles
fprintf(['Pole %d:\t' '%.3f' char(177) ...
'%.3fi, radial frequency = %.3f, Q = %.3f\n'], ...
i, high_pass_poles_real_parts(1,i), ...
high_pass_poles_imaginary_parts(1,i), ...
high_pass_poles_radial_frequencies(1,i), ...
high_pass_poles_Q(1,i));
end
% Clears unneeded variables from workspace
clear i
clear -regexp ^geffe_
@ -283,10 +352,30 @@ for i=1:high_pass_number_of_poles
tf(unit_numerator, unit_denominator);
end
% Outputs results
fprintf(['\n' '===== UNITS IMPLEMENTATION =====' '\n' ...
'Units implementation details:\n']);
for i=1:high_pass_number_of_poles
fprintf(['Unit %d:\n' ...
'\tPole radial frequency = %.3f\n'...
'\tPole Q = %.3f\n' ...
'\tTransfer function zero = 0%+.3fi (double)\n' ...
'\tCircuit elements:\n' ...
'\t\tR1 = %.3fOhm\n' ...
'\t\tR2 = %.3fOhm\n' ...
'\t\tr1 = %.3fOhm\n' ...
'\t\tr2 = %.3fOhm\n' ...
'\t\tC1 = %.7fF\n' ...
'\t\tC2 = %.7fF\n'], ...
i, high_pass_poles_radial_frequencies(1,i), ...
high_pass_poles_Q(1,i), ...
high_pass_transfer_function_zeros(1,i), ...
units_R(1,i), units_R(1,i), units_r1(1,i), units_r2(1,i), ...
units_C(1,i), units_C(1,i));
end
% Clears unneeded variables from workspace
clearVars = {''};
clearVars = {'i'};
clear(clearVars{:})
clear clearVars
clear -regexp _transfer_function$
@ -320,13 +409,13 @@ ltiview(units_transfer_functions(1,1), ...
%ltiview(total_transfer_function);
%
%{
plot_transfer_function(total_transfer_function, ...
[design_half_power_radial_frequency/(2*pi) ...
specification_stop_frequency ...
specification_pass_frequency ...
15000]);
%
%}
% Clears unneeded variable from workspace
clearVars = {'total_transfer_function'};

Loading…
Cancel
Save