% Libro de Magistris e Miano Circuiti 2007
% Filtri passa banda e taglia banda
clear
format short g
format compact
%get(groot,'factory')
%get(groot,'factoryObjectType')
%get(groot,'factoryObjectTypePropertyName')
%set(0, 'defaultfigureposition', [80 10 1000 990]);
set(0, 'defaultfigurepapertype','A4', 'defaultfigureunits', 'centimeters', 'defaultfigurepaperunits', 'centimeters');
set(0, 'defaultfigureposition', [1 1 28 18]);
%set(0, 'defaultfigurepaperpositionmode','manual', 'defaultfigurepaperposition', [1 1 18 18]);
%set(0, 'defaultaxeslinewidth', 0.9); %set(0, 'defaultaxeslinewidth', 'factory');
set(0, 'defaultaxesfontsize', 10);
set(0, 'DefaultAxesTitleFontWeight', 'normal')
set(0, 'DefaultAxesTitleFontSizeMultiplier', 1)
set(0, 'defaultlinelinewidth', 1.1);
%set(0, 'defaultpatchlinewidth', 1.1);
%set(0, 'defaultlinemarkersize', 15);
%set(0,'defaulttextinterpreter','latex'), set(0,'defaulttextinterpreter','factory')
[ST,I] = dbstack;
%fprintf(2,['$$$$ ' num2str(100*rand) ' $$$$\n'])
fprintf(2,'$$$$ %0.5g $$$$ %s\n', 100*rand,ST.file)
%% convenienza della rappresentazione logaritmica
disp(' rappresentazione logaritmica ')
AR = [.01 .1 1 10 100 1000 10000];
Alog10 = log10(AR);
AdB = 20*log10(AR);
disp([AR; Alog10; AdB])
% AdB_check_ERR = 10*log10(A^2) % ERROR
AdB_check = 10*log10(AR.^2)
%% Funzione di rete filtro passa banda RLC serie
disp(' filtro RLC serie ')
R = 1;
R = 10;
R = 100;
R = 1000;
L=250e-9;
C=10e-12;
omegar = 1/sqrt(L*C);
fr = omegar/(2*pi)
Qs = sqrt(L/C)/R % = omegar*L/R quality factor LC serie
Qp = 1/Qs % quality factor LC parallelo
%f = linspace(1e5,1e10,10000);
f = logspace(5,10,10000);
omega = 2*pi*f;
ZL_ = 1i*omega*L;
ZC_ = -1i./(omega*C);
ZLC_ = ZL_+ZC_;
% VR_ = E_ * R/(R+ZLC_)
% VR_ / E_ = HR_
HR_ = R./(R+ZLC_);
AR = abs(HR_);
phiR = angle(HR_);
ARdB = 20*log10(AR);
hf1 = 1;
figure(hf1)
set(hf1,'name','Bandpass RLC filter')
subplot(2,3,1), plot(f,AR) , grid, xlabel('f [Hz]'), ylabel('A [-]')
subplot(2,3,2), semilogx(f,AR) , grid, xlabel('f [Hz]'), ylabel('A [-]')
subplot(2,3,3), semilogx(f,ARdB), grid, xlabel('f [Hz]'), ylabel('A [dB]')
%title(['f_r = ' num2str(fr) ' Qs = ' num2str(Qs)])
str = sprintf('f_r = %0.3e Qs = %0.3f', fr,Qs);
title(str)
subplot(2,3,4), plot(f,phiR) , grid, xlabel('f [Hz]'), ylabel('phi [rad]')
subplot(2,3,5), semilogx(f,phiR), grid, xlabel('f [Hz]'), ylabel('phi [rad]')
%% Funzione di rete filtro notch RLC serie
% VLC_ = E_ * ZLC_/(R+ZLC_)
% VLC_ / E_ = HLC_
HLC_ = ZLC_./(R+ZLC_);
ALC = abs(HLC_); % |omega*L-1/(omega*C)| / |R+j*(omega*L-1/(omega*C)|
ALCdB = 20*log10(ALC);
phiLC = angle(HLC_); % pi/2*sign(omega*L-1/(omega*C)) - atan((omega*L-1/(omega*C)/R))
hf2 = 2;
figure(hf2)
set(hf2,'name','Notch RLC filter')
subplot(2,3,1), plot(f,ALC) , grid, xlabel('f [Hz]'), ylabel('A [-]')
subplot(2,3,2), semilogx(f,ALC) , grid, xlabel('f [Hz]'), ylabel('A [-]')
subplot(2,3,3), semilogx(f,ALCdB), grid, xlabel('f [Hz]'), ylabel('A [dB]')
title(str)
subplot(2,3,4), plot(f,phiLC) , grid, xlabel('f [Hz]'), ylabel('phi [rad]')
subplot(2,3,5), semilogx(f,phiLC), grid, xlabel('f [Hz]'), ylabel('phi [rad]')
%% Funzione di rete filtro notch LC parallelo (libro Figura 5.43 pag 282)
Zp_ = paral(ZL_,ZC_);
% VR_ = E_ * R_/(R+Zp_)
% VR_ / E_ = HRn_
HRn_ = R./(R+Zp_);
ARn = abs(HRn_);
ARndB = 20*log10(ARn);
phiRn = angle(HRn_);
hf3 = 3;
figure(hf3)
set(hf3,'name','Notch filter Fig. 5.43')
subplot(2,3,1), plot(f,ARn) , grid, xlabel('f [Hz]'), ylabel('A [-]')
subplot(2,3,2), semilogx(f,ARn) , grid, xlabel('f [Hz]'), ylabel('A [-]')
subplot(2,3,3), semilogx(f,ARndB), grid, xlabel('f [Hz]'), ylabel('A [dB]')
%title(['Qp = ' num2str(Qp)])
str = sprintf('f_r = %0.3e Qp = %0.3f', fr,Qp);
title(str)
subplot(2,3,4), plot(f,phiRn) , grid, xlabel('f [Hz]'), ylabel('phi [rad]')
subplot(2,3,5), semilogx(f,phiRn), grid, xlabel('f [Hz]'), ylabel('phi [rad]')