So, today the 29th lecture on state space filter will be covering frequency compensation of filters and tuning. Effect of gain bandwidth product on state space filter performance was the topic of last lecture. Queue enhancement occurs due to gain bandwidth product. This is an important thing. It makes the queue of the designed filter become sensitive to the gain bandwidth product variation and that is because of the phase lag error in the loop caused by the gain bandwidth product. So, we have here the actual designed queue of the filter queue A, queue active getting chain to a new value of queue because of the gain bandwidth product as queue A divided by 1 minus this delta phi minus delta phi is the lag error in the feedback loop. The feedback loop may in this case comprise of summing two integrators and a summing amplifier which is called the resonator block that is the primary feedback loop in the state space filter. A queue forming loop has another feedback coming from the band pass output here through another op amp it gets connected to this. So, this is not this is a secondary loop and the queue is high very little of feedback is coming from this secondary loop. Primary loop is just this. So, this particular loop has two integrators causing accumulative phase error here as well as here of S by GB and S by GB phase lag. This we had seen in the discussion of feedback amplifiers and integrators. So, its magnitude error is negligible. How about a magnitude error occurs because of the integrator an extent of omega naught by GB. So, whereas the summing amplifier has no magnitude error but only phase error and if it is just an inverting amplifier it would have been just 2S by GB lag minus 2S by GB whereas because of the additional summing action due to this resistance R it will be 3S by GB cumulative phase error here in the loop is going to be 5S by GB this is what we are going to show okay in the next lecture. Basic building blocks of active filters are second order negative feedback systems. So, second order active filter consists of amplifier and two integrators which have frequency dependence. So, basic building blocks themselves are actually amplifier or the summing amplifier with two integrators and each amplifier and integrator is formed by op amps in negative feedback as they themselves are most probably a first order or second order systems okay. So, if that is the case what is the effect of the increased order this order is theoretically a second order system that we are designing and with the help of three op amps each of which can increase it by one order or two orders right. That means it will be essentially either from second order going to chain to fifth order or may even chain to say 5 plus 3 eighth order. So, what is the effect of this increased order on the loop that is going to be discussed in terms of cumulative phase error in the loop. So, a non-inverting amplifier okay is going to be just this feedback this is R this is R by K. So, then the gain of this is 1 plus K ideal value okay V not over VI. However because of the op amp whose gain can be approximated by GB by S for example if it has just one dominant pole otherwise it will be GB by S okay with the second pole also coming into picture. So this itself is going to make this so called resistive feedback section become a second order and how to exploit the second order effect in making its Q equal to 1 over root 2 for maximally flat response of this amplifier maximally flat magnitude or making it suitable for switching application okay by making the Q equal to 1 so that there is just one peak was discussed earlier in frequency compensation of amplifiers.  So what happens because of the loop gain so ideal value changes from 1 plus K to 1 plus K divided by 1 plus 1 over loop gain always which is 1 plus K into S by GB okay. So this is the loop gain of this is GB by S into R by K divided by R plus R by K which is going to give us this as the error deviation from the ideal value that is coming as a phase error. Now if it is an inverting amplifier input is going to be just failure so the feedback remains the same so whether it is inverting or non inverting okay it does not make any difference as far as the phase error is concerned. Only thing is ideal gain now is minus K this divided by this minus K divided by 1 plus 1 plus K into S by GB as the loop gain remains the same as before. So in the case of this is the loop gain GB by S into 1 by 1 plus K so phase error in the amplifier is 1 plus K S equal to j omega omega equal to omega naught if you put actually tan inverse okay this which is for small phase angles is by itself. So this is the phase tan inverse minus tan inverse okay 1 plus K omega by GB at omega equal to omega naught it is this for small phase angle this is roughly equal to minus 1 plus K into omega naught K. So we are evaluating it at the highest frequency usable in the bandwidth so that is omega naught. So integrator that is the normalizing frequency is omega naught minus omega naught by S so K is replaced by omega naught by S in this case so what happens this K is replaced by omega naught by S so it has a magnitude error this is the magnitude error this was not there in the resistive feedback session this magnitude error is independent of frequency it is omega naught is 1 over CR so it is 1 over CR GB it is fixed however this can be neglected compared to 1 in most of the cases it only changes omega naught to omega naught dash. So it contributes to a phase error of S by GB so effectively it is minus omega naught by S which is integration 90 degree phase shaped deviating by this amount as phase error. So phase error in the integrator is minus omega naught by GB so the cumulative phase error of the loop that is formed by this integrator integrator inverter is going to be 1 by 1 plus S by GB square which means it is going to add as 2 S by GB due to this 2 S by GB okay so this becomes 1 plus 2 S by GB approximately and this is 1 plus 3 S by GB due to the summing amplifier which is having this kind of combination. So this is R this is R this is R so what happens here because of this R and R this is R by 2 so K is going to be 2 so we have 2 plus 1 3 S by GB as the contribution of phase error due to this so 2 S plus 3 S is 5 S by GB so lag so minus 5 omega naught by GB is the phase error and this is what is going to cause as problem the Q therefore of the filter built using such uncompensated integrators and summing amplifier will result in Q actual divided by 1 minus 5 omega naught Q actual by GB. So this was the deviation okay as the frequency omega naught 1 over RC is change to higher and higher values this error keeps on increasing and it becomes close to 1 it is going to become infinity and the whole system is going to be unstable. So it is going to oscillate at its natural frequency omega naught at that point of time so this is what we had seen demonstrated in the earlier lectures. Now this has to be compensated how do we compensate so since the summing amplifier for example uses only a single stage it is contributing to a maximum phase error of minus 3 omega naught by GB and how to compensate for this phase error main reason for phase error is because of the loop gain being equal to GB by S into this attenuation factor okay which is 1 over 3 okay coming in the loop. So it is because it is a first order system so it is necessary to convert this into a second order system so that the phase error can be compensated. So we had seen this happening okay even in amplifier systems that it is better to use instead of a first order system in feedback a second order system in feedback where you can optimize the performance of the so called second order feedback system. So in control some terminology these are called PID controllers right in negative feedback. Similarly here therefore instead of using just one op amp with the dominant pole you can have op amp with the dominant pole assisted by a close okay second pole or you can make the second pole come into existence by using another op amp with the dominant pole compensation in negative feedback put in the loop in cascade. So this GB by S is going to be now replaced by GB by S of this okay and this is a buffer stage for example I have designed here so this resistance comes into picture only for the feedback as well the ideal operation is concerned this is nothing but then a later so this resistance is of no consequence okay as well the input is concerned now current flows through it and this resistance also has no effect as far as the input is concerned so this input gets transferred to this here input and this remains same as V not equal to VI so this is a buffer stage ideally however because of the feedback arrangement here right so this is going to have a face error introduced how much face error is introduced here okay so this is a buffer stage so it is one divided by one plus okay now the feedback is okay again 3 S divided by GB GB by S of this okay in feedback loop this is grounded so we have again 1 over 3 feedback so this can be adjusted to anything you want right so let us say you have this as R by N then this becomes okay N plus 1 from 3 it changes to N plus 1 just like K plus 1 N plus 1 so you can adjust this depending upon what we want let us see why we are introducing this kind of thing so we have GB by S as the loop gain modified by this so again 1 over loop gain so this summing amplifier just take any one of these inputs is ideally speaking minus 1 okay either this one or that one okay feeding through this or feeding to that divided by 1 plus okay 1 over loop gain of this this is nothing but 1 over this which is S by GB into 1 plus 3 S by GB into its own feedback which is going to cause this to come as K plus 1 here which is 3 so effectively the this particular thing from here to here the transfer function V naught to less a VI is going to be this so that is single stage summing amplifier this is the case of buffer stage gain that we had written earlier okay 1 by 1 plus okay and if you use a single stage summing amplifier the error would have been minus 1 by 1 plus 3 S by GB now if you use the composite stage it is becoming V naught to VI minus 1 plus 3 S by GB okay let us see where you are taking the output please look at this you are taking the output if you take the output here okay it is just this okay and if you take the output at V naught 1 by VI it is going to be multiplied by this from here to here it is 1 by 1 plus 3 S by GB from here to here transfer function is 1 plus 3 S by GB multiplied so this whole thing gets multiplied by 1 plus 3 S by GB this is V naught 1 so that is what is happening here you get the thing as okay V naught 1 by VI as minus 1 plus 3 S by GB 1 plus 3 S by GB plus 9 S square by GB square now phase error of this output V naught 1 by VI is very nearly 0 it becomes nearly equal to minus 1 now you can get any number here as V naught 1 by VI if you only change this for example this whole thing instead of 3 you make it N okay so it becomes N plus 1 so this multiplying factor becomes 1 by 1 plus N plus 1 S by GB so this factor here becomes N plus 1 so and if you take the output at V naught 1 okay at that time so let us write down what happens at that time so this will become this transfer function will become that as N 1 plus N plus 1 S by GB divided by 1 plus 3 S by GB plus okay N plus 1 into 3 S square by GB square so this way by making N for example equal to let us say you want to get a lead error of 1 plus 3 S by GB so you can make it become equal to let us say 6 that means N equal to 5 that corresponds to a lead phase error of 1 plus 3 S by GB okay for this inverting stage so you can therefore use it for compensating for additional phase cost in the loop by the integrators so this is a technique of making it work with perfect compensation for the phase lag error that is introduced okay that this particular stage which is a combination of buffer with a normal op amp acting as a summing amplifier okay this can give zero phase error and positive phase or lead error to compensate for the lag error that occurs in the previous stages. Now same thing can be done by using a composite integrator which is formed by using GB by S cascaded with a buffer for example so this will be 1 by 1 plus S by GB 1 by 1 plus S by GB its own loop gain of GB by S causing this to change to this so effective loop gain of this composite structure is GB by S okay into 1 by 1 plus S by GB so when this is put in an overall feedback loop what do you get you get the ideal value which is say 1 by SCR okay minus 1 by SCR from here to here assuming that this is an ideal of amp then divided by 1 plus 1 plus 1 by SCR into 1 over loop gain that 1 over loop gain is nothing but S by GB into 1 plus S by GB so 1 over SCR being equal to omega naught we can rewrite this as minus omega naught by S divided by approximately 1 plus now this factor 1 into S by GB plus S square by GB that is all GB square you can ignore the other factor because it will be SS gets cancelled omega naught by GB into 1 plus S by GB so omega naught plus omega naught by GB into 1 plus S by GB is ignored compared with these factors so this is approximately the transfer function from here to here if you take the output here now therefore V naught 1 by VI therefore is going to be multiplied by this that is minus omega naught by S into 1 plus S by GB divided by this which is exactly compensating for the phase here so that is approximately equal to minus without any phase error so this is compensated integrator frequency compensated integrated without any phase error so we can use integrators without phase errors by connecting these similar integrators together and assuming amplifier without any phase error forming a feedback system there which does not have any phase error which means Q enhancement is stopped of course you will see that instead of using three op amps it is using double the number of these op amps okay but improved performance in fact instead of compensating for the double integrator look like that one can have integrator with phase error cascaded to another integrator with lead of the same value as the lag error of the first integrator that forms what is called ackaberg MOSFET circuit which actually uses only three op amps and gets the Q enhancement suppressed okay so this is what we are going to show okay so this is something that we have understood now this is the integrator with perfect compensation because of the numerator having the lead error same as that of the lag error in the denominator so how to obtain this ackaberg MOSFET circuit let us consider an integrator with inverter which is part of the summing amplifier that is coming into picture in our loop that we had already seen this is the summing amplifier that was added so that resistance R also is part of the whole thing so how to convert this into again a non-inverting integrator so you put this in an overall feedback loop with this becoming positive and negative instead of negative and positive and the inverter put in the feedback loop now so this is a negative feedback so this is an ideal integration now VI V0 okay which we have already derived and this is the summing amplifier okay which has a transfer function now of minus 1 by 1 plus 3S by GB you can see because it is GB by yes here in feedback loop okay 1 by 3 so it is having minus 1 by 1 plus 3S by GB as the transfer function that multiplied by GB by yes is going to modify this feedback performance as again what we have already written that similar to this except that okay we have this hmm so it is going to be modifying this let us write down the transfer function so it is minus V0 by VI from here to here V0 to is going to be minus omega naught by S that divided by the denominator is going to be 1 plus 1 over loop gain so the loop gain is going to be 1 plus that is going to be always there by S 1 plus K here this loop gain is going to make it come as GB by yes into 1 by okay 1 plus 3S by GB this 3 can be again change to something like N plus 1 okay if you need okay so this brings about denominator which is equal to minus omega naught by S divided by 1 plus once again we have the same thing 1 plus omega naught by S similar to what we wrote earlier S by GB into 1 plus okay let us put it as N plus 1 S by GB so instead of 3 let us replace it by N plus 1 so you can have you know any number of these resistances coming here so they will keep increasing the error okay why we are doing this is becoming obvious to you now this results in similar stuff that we had written earlier if you take the output here now it will be just getting multiplied by this factor of 1 plus so minus omega naught by S that is V naught 1 by VI into 1 plus okay N plus 1 S by GB divided by 1 plus okay S by GB plus N plus 1 S square by GB square okay so this is what we get here as the phase error so we get this as just is it becomes a now at this point it becomes a non-inverting integrated so this actually is not right this is going to be 3 S square by GB square so N plus 1 is 3 so this is the way we have to modify these integrators in order to use them for frequency compensation is what we have done here integrator with phase error okay because it is using a single stage here we have used composite stage for the other integrator okay so that the phase error here for this integrator if you take the output here for forming the loop is going to be just one S by GB lead there is one S by GB lag compensating perfectly the overall loop phase error thereby preventing the peaking from increasing above H naught into Q or increasing the Q and hunvent is suppressed this is what is called akabat MOS per circuit this is demonstrated very clearly by using uncompensated op amp that means the Q enhancement has occurred what in the simulation what I have done is I have used 2 ideal integrators followed by a summing amplifier which is an op amp based one with 741 as the op amp or summing amplifier so it gives you Q enhancement of because it is going to be 3 omega naught by GB so Q is going to get enhanced to this Q originally used to 5 so that gets enhanced as frequency is progressively increase you can see this similarly the thing is also proportional this error is also going to increase the transmission at the notch because directly proportional to the same thing Q 3 omega naught Q A by GB as far as the notch transmission is concerned from 0 is going to be keeping on increasing as omega naught is increased now with this particular phase error getting compensated that means I am now using the output here where I will adjust the total phase error cumulative phase error that is why this R has been additionally put here so that okay you get here this as 2S by GB this as 3S by GB so it only gives you a phase error of S by GB lead which is compensating for the S by GB lag error with that kind of thing okay I have now used the summing amplifier with zero phase error because I have used 2 integrators which are ideal so that arrangement as mentioned earlier where I have adjusted so that the numerator phase error is same as the denominator phase error for the summing amplifier then I get no Q enhancement at all as the frequency is change over the same range by the control voltage of this voltage control filter so you can see this effect even the notch output remains close to zero okay which is theoretically expected one now switched capacitor filters any filter using LC or RC has its pole frequency directly proportional to pole frequency is proportional to 1 over RC it is inversely proportional to R into C in case of LC it is 1 over root LC so the sensitivity of omega naught to R or C is about minus 1 here this is half here to these components it is okay but tolerance of components definitely has a great influence on this fixing omega naught okay precisely depends upon the tolerance of R into C or L into C tolerance of common as great influence on the accuracy with which it is fixed resistors and capacitors have poor tolerance and large temperature coefficients in integrated circuits whereas ratio of resistors and capacitors are very good tolerance an order of magnitude better than the absolute values so we are not able to design precision filters if you make use of the RC's in monolithic IC's so what to do switched capacitor gives a solution to this what is it let us consider the integrator the basic building block of filters VI is driving a current of VI by R1 into the integrator which is charging the capacitor C1 okay and that is how V naught is equal to 1 over C1 integral IC DT IC is VI by R1 so we have the time constant 1 minus 1 over C1 R1 deciding the integration VI by DT okay so this parameter is of great importance for precision what is done in switched capacitor is that resistance R1 which is troubling us is replaced by a switched capacitor this capacitor receives a charge of C into VI that is the charge received okay in the first clock phase it is connected to the input to receive this charge and that capacitor charges that changes or switches over to the virtual ground in the next phase this is the first phase of the clock the switch connects to input the capacitor to input then the capacitor is connected to the virtual ground in the second phase of the clock within a time period T so what happens the entire charge of this Q is transferred to C1 that is the purpose of the exercise the entire charge that has been accumulated in C is changed to C1 okay instantaneously so the charge transferred per unit time is current that means this is doing the job of an equivalent resistance okay which was earlier put as VI by R equivalent okay so R1 so switched capacitor realizes R equivalent equal to T by C this is the basic principle of switched capacitor network the switching frequency is chosen to be so high okay it should be a much greater than twice F max of the signal that you are processing you can consider therefore that the signal is remaining static okay without any alteration with respect to time during the process of entire charge transfer so these are the two phases of the clock so non-overlapping clock 5 1 during which VI is connected to C 5 2 in which this charge is transferred to the other capacitor so the R equivalent is T by C or omega naught is 1 over R1 C1 is C by C1 into 1 over T C by C1 into the clock frequency that is an important thing so omega naught now becomes ratio dependent ratio of capacitors can be fairly accurately fixed in integrated circuits absolute value of the capacitor may be as bad as 20% 30% tolerance whereas ratio tolerance is of the order of 1 to 2% so there is the trick okay to adopt these RC filters to switch the capacitor versions which can be easily giving precision in integrated circuits for filters so this has the program in facility that once you use clock you can change the clock thereby change the omega naught or tune the omega naught to whatever frequency you want programmable omega naught because omega naught is the normalizing frequency of the filter so the characteristic of the filter remains unaltered Q is what determines the characteristic of the filter and the frequency omega naught can be conveniently varied without Q getting altered okay in the case of our by quad ratio of capacitors have tolerance on order of magnitude better than okay the absolute values temperature coefficient of capacitance is very close to zero so however switches introduce switching noise in the entire system this requires additional band limiting prefilters and smoothening post filters the supply voltage scale getting scaled on the switches themselves are pretty leaky these days and therefore for low voltage application these switcher capacitors are really not dissolution so by part base switcher capacitor filter is MF 10 this is what is manufactured by TI cost of this is only $2 for 1 kilo units center frequency can be varied from 2 hertz to 20 hertz clock frequency FC it can be varied from 10 hertz to 1 mega hertz so F naught to FC ratio is 1 is to 50 you can also therefore make the approximation without any qualms gain bandwidth product of the up to 2.5 mega hertz this is important so we have already said that F naught into 2 product is a important criteria in the selection of filters okay key parameters of slew rate also is an important that has to be considered 7 volts per microsecond what does it do the sine wave is going to get it started around the zero crossover because for a sine wave the slope is maximum at zero crossover so it is slope is equal to omega into A so omega into A is the peak of expected output it should be less than slew rate for no distortion so please bear in mind this depending upon what the peak value of expected output is the maximum frequency is also fixed based on this slew rate limitation so this is normally not taken into consideration in most of the design which results in the distortion okay appearing in filters apart from the fundamental limitation due to the gain bandwidth product which causes Q enhancement which needs frequency compensation technique to be adopted okay to work close to the gain bandwidth product work up to the gain bandwidth product then what happens is the slew rate limitation need to be taken care of so one should be aware of the limitation in amplitude of the output of a filter based on this tuning of filters need for tuning now apart from switching capacitor right technique there is no other technique of making these filters become precise in active RC other than physically tuning the filters so how do we tune this filters with the advantage of DSPs and microcontrollers becoming useful now in electronic systems today most of the analog circuits okay become precise only by letting them get tuned so whether it is amplifier design or filter design okay tuning of these for precise performance parameters to be obtained is a common technique this is digitally assisted analog circuits are the things of future and today need for tuning key parameters characterizing filters are Q which is a ratio H naught is a ratio no problem F naught is the problem okay normalizing frequency is dependent upon absolute values of R and C okay so if you want a precision filter you have to have precision R senses that is not possible in integrated circuits okay so what do we do tuning of filters is what is to be done that means we have to have an arrangement where a reference can be used for tuning the filter precisely to whatever frequency you want and then this filter can be used okay thereafter for actual application digitally programmable analog reconfigurable front end and back end filters or amplifiers are the ones that are currently in both voltage control filter we know that integrator replaced by integrator okay with multiplier making it voltage control right so what happens in this case is if this is the control voltage this is VI earlier this VI or V naught was driving a current of V naught by R now because of the multiplier introduced it is V naught VC by let us say VR which is 10 for precision multipliers standard value of 10 mass or IC multipliers it can be just 1 volt okay so if you use a multiplier like this then the current in this is V naught VC by 10 R that means the R can be replaced by 10 R by VC that is a omega naught which was 1 over RC now becomes omega naught equal to VC by 10 RC so it is directly proportional to VC control voltage now such a VCF is put inside let us say it may be the double integrator loop so this is the control voltage terminal which is controlling the time constant of the two integrator simultaneously like we had shown it earlier so if you use such a filter and use a summing amplifier to sum up HP this is what is called HP high pass filter this is band pass this is low pass these three outputs are available so you can selectively take some of HP and some of BP and some of LP and add then the zero of the entire second order system can be located anywhere on the explain so this is a general voltage control filter not only the omega naught is directly proportional to VC the alpha 1 alpha 2 alpha 3 selection will make it become available as any second order system okay the queue and omega naught can be fixed okay independently alpha 1 equal to H naught alpha 2 equal to 0 alpha 3 equal to 0 it is high pass alpha 1 equal to 0 alpha 2 equal to H minus H naught alpha 3 equal to 0 it is band pass alpha 1 equal to 0 alpha 2 equal to 0 alpha 3 equal to H naught is low pass these are the three standard outputs available apart from that alpha 1 equal to H naught alpha 2 equal to 0 alpha 3 equal to H naught is also available in the case if it is not available you can have the band stop and make it get located at any point as the 0 okay so by having H naught this different from H naught alpha 1 is equal to H naught alpha 2 is equal to minus H naught by Q alpha 3 is equal to H naught it is what is called an all pass an all pass filter actually passes all the frequencies with the same magnitude that is magnitude is independent of frequency only the phase changes right first order all pass for example is 1 minus S by omega naught by 1 plus S by omega naught second order all pass is 1 minus S by omega naught Q plus S squared by omega naught square by 1 plus S by omega naught Q plus S squared by omega naught square. So these coefficient of these all polynomials of S keep changing in the numerator or in terms of poles and zeros okay they are mirror images. So that is the standard design procedure which can be done by this basic building block. Now voltage control filters are also useful in music synthesizers okay voltage controlled oscillators voltage control filters and voltage controlled amplifiers from the core of most of the music synthesizers. Now manual tuning of second order filter so we have to tune this exactly to a specific frequency omega naught that omega naught let us say is a reference frequency VP sign omega reference T is given as input to such a filter first and we have the alternative of okay using the magnitude information or the phase information we would prefer to use the phase information obviously for example if it is a sort of band pass filter how will you tune it exactly to desirable center frequency one things that this is the technique of maximizing this but maxima and minima by definition okay there is no variation of magnitude okay with respect to frequency delta T by delta omega is 0 for maxima or minima so they should not be used mathematically as sensitive measure of whatever you want to tune to. So what changes maximum is the phase for a band pass or high pass or low pass we see that phase at omega naught okay variation delta phi by delta omega we have shown this earlier is directly proportional to Q. So this we are shown earlier in the second order system delta phi by delta omega naught okay delta omega at omega equal to omega naught is minus to Q by omega naught. So this we have demonstrated for the second order high Q system also that as Q varies the phase changes rapidly around omega naught that information is used so that this becomes a phase detector now. So multiplier analog multiplier as a phase detector this is getting VP sign omega T as the input and this is VP dash sin omega T plus phi. So what happens to this phase detector so V average is the multiplier output so we have here VP sin omega T this is VP dash sin omega reference T plus phi so output of this is VP dash by 10 okay sin omega reference T into sin omega reference T plus phi which is cos phi minus cos 2 omega reference T plus phi.  So this green color one is nothing but the sensitivity of the phase detector which is delta V average by delta phi so that is assigned this is going to be therefore delta V average by delta phi which is the sensitivity factor of the phase detector this VP VP dash by 20 sin phi so minus so that is how you get this and it is maximum at phi equal to pi by 2. So that information is used only at this point it can be used as a phase detector very efficiently because the sensitivity is maximum at this point sensitivity is 0 that is 0 phase shift okay and at pi also it is 0 so one tends to use the low pass and high pass output which have a phase shift at omega not equal to pi by 2 rather than a band pass which has a phase shift of 0 or 180 so that in sensitivity of V average the changes in phase shift is maximum at y equal to pi by 2 that average is 0 so we keep on changing the control voltage for a fixed omega reference here keep on changing the way control voltage until this average goes to 0 if this is low pass or high pass low pass or high pass that is how the thing has been built now high pass filter with omega reference F reference at 1 kilo hertz R is equal to 1 kilo ohm C is equal to 0.1 micro farad in the VCF F naught becomes 1.592 VC by 10 into 10 to power 3 hertz the low pass filter has 100K and 1 micro farad to get rid of the 2 omega reference when V average is 0 VC is found to be exactly C.6.3 so VC was varied parametrically here in the simulation software and one could see that this is the low pass filter output for this value of VC which is precisely 6.3 volts it is going to be perfectly tuned to the frequency 1 kilo hertz so this is the band pass output just shown that for 1 volt input with a Q of 5 H naught of 1 it remained at nearly 5 volts for all these roughly so it is insensitive so the peak is insensitive it could have been tuned to this this this or this whereas in phase detector it is precisely getting tuned to this point so this is the advantage of using phase detector which is the best method of tuning and it is demonstrating that magnitude as almost remained close to the peak okay for all these control voltages which are varying around small DC of micro volts right. So multiplying DAC use as a multiplier so you can use instead of analog multiplier DAC as a multiplier so V naught is in situation V reference into the N bit analog output okay based on the switch position okay BI can take 1 or 0 okay so 2 to power – I is equal to 0 to N – 1 in N bit converter so V reference is the variable so VX okay this is VY so this DAC 12 bit DAC 7821 cost about 3.15 dollars okay can be used in place of the analog multiplier and then it becomes a digitally controllable okay tuning of the filter. So in conclusion we have seen that tuning is an important part of the analog systems okay which facilitate digital tuning or DSP control or micro controller based control of analog systems okay we have demonstrated the efficacy of phase detector for tuning all these filters we have also shown how frequency compensation can be letting us use the filter closer to the gain bandwidth product than what was possible earlier because F naught into Q should be earlier without compensation should be made much less than the gain bandwidth product.


All right, folks. We are at the last keynote of EuroPython 2021. And it's with great pleasure and an honor to introduce Joana. Joana is a very well-known member of our community. She was originally born in Uganda, Africa. And she now, I believe, lives in Canada. She is a Python core developer. She is a published author and a director of the Python Software Foundation. She is going to tell us about Python, the bad parts. So I would really like to welcome Joana here. Thank you so much, Joana, for taking the time to prepare your talk and to be here with us. And I leave you the stage. I'll add your slides. This is a 45-minute talk. And we are all very excited about it. And wish you best of luck in delivering it. Take it away, Joana. All right. Thank you. Thank you, everyone. As they've already told you, my name is Joana. And today I'm going to give a talk about Python, titled Python, the bad parts. I'll start with a bit of stuff that has already been said because I've already planned for it. So I'm originally from Africa in a country called Uganda and in a city called Kampala. So I had to put Africa because most people think Africa is a country. Africa is not a country. Uganda is a country. And I left Uganda two years ago to come to New Brunswick in Canada, where I'm currently staying and do my PhD in collaboration with IBM and the University of New Brunswick. In terms of our things, I'm a Python core developer. I've been for around 1.9 years, 1.9, one more month until I become two years as the C Python core developer, director of the PSF. And I will be talking a little bit about my work and my plans for the Python community. But I would love to first take the time to thank everyone that entrusted me with their vote to be a director of the PSF. I do not take it lightly, so I really appreciate the trust you put in me to be a director for this year. And I'm excited for all the many things that we are going to do during my term as a PSF director. In my other life, I hinted that I'm doing a PhD. So my research is on garbage collection in Python. And I look at both garbage collection in general for the reference implementation that is C Python, but also alternative implementations like PIPI. I am funded by IBM under the Center for Advanced Studies at the University of New Brunswick. I authored Python 2 and 3 compatibility some years ago probably when the subject was very hard. I don't know if the subject is still hard right now, but you can check out the book if you want. I'd love to first start by saying I'm really honored to be here. And I would love to thank the organizers of EuroPython. This is my first time to attend a EuroBest Python conference or even speak at one for that matter. I've spoken at a Ruby conference that's called EuroCo like so many years ago, but I'd never spoken at any conference in Europe and Python, per se. So I'm really honored to be a speaker or on the speaker lineup for this year. And I don't take it for granted. So let's start with why are we actually here? Why do we attend conferences specifically? Why do we come for Python? I started to attend Python in 2016. And my first Python was in South Africa. It's called Python. Yes, Python South Africa. And it was held in Cape Town. That was my first encounter at a Python. And I didn't know why I was going for a Python anyway. So anyway, I reached there. And I talked to so many people. And I asked them, why do you come for Python? Why do you come for Python? Why do you even attend conferences in the first place? And a group of people that were there, of course, they were Python users. It was a whole Python community. They're not just community. They're not united by the fact that they use Python. They're also friends in general. And so my conclusion after my very first Python in Cape Town in South Africa was that I think we all come to PyCons, or we attend PyCons to celebrate the old semblance of Python. Python has a language in different ways. Sometimes we come as a trip. It could be a vacation. But if we end up in a Python convention, in a Python hall, we are usually there to celebrate how awesome Python is. And the great things Python as a language has, or as a community, or as an ecosystem, has accorded us the different things we are able to do with the language. So we celebrate Python's old semblance first as a language. I started to use Python in 2013. And actually 2010, 2010, when I was an undergrad student. And then I had different reasons for using Python. But the first reason was initially I was just forced to use the language. It was taught in class. So I was given assignments in Python. It was not fun then, because the whole class failed. The professor taught it very hard. So the whole class failed the assignments. However, after failing two assignments in the class towards our final exam, I read the whole Python book from cover to cover. And then I was able to pass the final exam. That's a story of another day. But I just fell in love with the syntax, the simplicity of the language. And I do not share this belief or notion alone. So many people have talked about how Python is awesome as a language, how it's used everywhere, how it's big enough friendly. I think I initially identified with the second reason. The first reason as I became an expert, yeah, I started to appreciate why people say that. But also the community and then Python as a language has helped us personally. I can speak for myself. But also many people in the audience, it has helped you find a job just because you know a skill and you're able to pay your bills or in your family because you know Python or because you're using Python as a tool for your career or for your employment. Python as a community is also awesome as many people have said. And most popularly, Brett Cannon said, he came to learn Python in the language. Or he was interested in Python in the language. But he ended up staying because of the community. And so many of us can attest to that personally. I also started getting very, I started as a user, I wasn't very interested. And I started getting so much into the language because I had some sort of research. However, I stayed because people in the community were interested in my contribution to the community but also the language as a whole. Personally, I was mentored by Victor Stiner to be a Python co-developer. And he helped, his mentorship did not only help me to be an expert as a Python co-developer but it also helped me to be in my professional life in general. And they have made so many friends not just on a technical level but in general just genuine friends in the community. So the Python community, aside from the language or the technicalities of the things we talk about, the Python community is awesome as well. The Python as an ecosystem is also awesome and I and probably you can attest to it because we are able to use Python in the language mostly because of its ecosystem. Its ecosystem in terms of the different libraries, Python is a very popular language right now with so many libraries literally simplifying our work in industry or academia or anything we're doing. A vast majority of Python libraries for in scientific programming, vast majority of things like alternate implementations like PyPy, PyStorm and so many other things, libraries for the most famous or Danish or cutting-edge technologies like machine learning and deep learning. So the Python ecosystem has empowered us, its users with great tools that are simplifying our lives in our work and on our projects and in our businesses. And so again, at PyCon and in our daily lives as Python users, we also celebrate ecosystem because of how awesome it is and how rich it is and how big it is and how useful, for example, it is. However, today I would love, I want us to take a step back or I want us to talk about a different view of Python. I've talked about its awesomeness and how it's been a great language and we cannot say there is no argument about that. Like Python is already good, even as it is now, it's a good language, but I want to talk about some of the things we could improve as most especially as a language, but also as a community in general. So my original title was Python the Bad Parts and then I thought about it. Well, I had already submitted the title, so I wouldn't change it, but then I was making my talk. I said maybe this title is actually going to trigger some people, mostly maybe Python called developers or because my talk is mostly about the language itself. So I said, okay, I'm going to probably change it a little bit. So instead of us, instead of you or us looking at my talk or whatever I'm going to talk about and really criticizing Python or airing Python 30 laundry, maybe we could change this title and start to look at it like instead a reflection on Python's potential. Like Python is already doing interesting stuff, but today I want you to join me in us reflecting on what Python can be in this time and age. Python is about 30 years old and I'm sure probably Guido, Guido Valrosa probably started working on Python before I was born. So again, I may not be the right person to be criticizing it and I'm sure Guido Valrosa had the best ideas for the language because as time went on we were using it because he made very many good decisions then. However, 30 years, 30 years I've gone since then and right now I think it's also a good time to start talking about what Python can be and what new things, what new things or what path Python could be taking right now. It's not necessarily a criticism. I think it's good love because I'm an avid Python user and I believe all of you are. So the intention of this talk is not to talk down on the people that put a lot of effort in the language. It's to look, to have just a quick reflection of what could it be? What more could Python in the language be? I'll start by a brief discussion on what successful languages are. Best of a paper that was written a couple of years ago by these two authors, Leo and Ariel, they did an empirical analysis of programming languages and they gave us some insight and they said successful programming languages are not successful because of new features or the complex features that are always released every day. Surprise, it's instead there like three key ideas of all things that make a language successful. One is accessible libraries and Python is a successful language, it's a popular language because one is, it also has accessible libraries. PyPI, the Python index where all our, the Python cheese shop where all our libraries are, it's a very rich set and collection of Python libraries that the developers of Python have always have, have used and continue using. Languages are successful because there is proof of usage according to the authors of this paper. There is no denying that Python is successful. Again, it meets this goal because there is Python code running everywhere. There is Python code now running on Mars. NASA is using Python code. There's Python code in machine learning. Python code is being used in all works of life for web and scientific programming. Things of all kinds. So there is proof of usage. So again, by this definition, Python is already a very successful language. It also, there is experience, sorry, sorry for that. So successful languages are also successful because of the experience they give to their programmers. Again, Python has been hailed for its simplicity in terms of syntax because it's allowed beginners to easily experiment but also rapidly prototype ideas and bring up solutions in a very short amount of time. So by this definition, Python is popular and very successful, so we cannot argue with that. However, success, the success we've attained or the success that Python has can only be sustained by relevance. So like I said, the problems we're solving 30 years ago are probably not the same problems we are solving now. So as a language and basically mainly, maybe as a core team of the Python language or as it uses us because Python is open source. So everyone has a responsibility to probably make it better. We need to be looking at how relevant the language remains as time goes by and as things change as different hardware changes, as technology changes, as our needs evolve. The success of Python is only going to be sustained by how it grows to be relevant with the times. 40 years from now, we should not probably be having the same version of Python. And I have hope that we are always evolving. But today I want to talk about a few challenges that Python is facing and I want to talk about all of them because if I wrote out a thread on Twitter and asked people, why do you hate Python? There will probably be a million reasons why people hate Python. Also today I would just talk about five things that I find that where Python could be improving and informed by my own understanding and some discussions that have been on different mailing lists. I don't promise to give an idea of every problem and I don't think these are the only priority problems right now. Also I have to preface this that it's in my view. I love to start with performance. Now, Python is not C, so we are not expecting C level performance in Python. However, being a dynamic language and an interpreter it has also its limitation. But I believe there is still room to improve the performance of Python. We, in Python is in a paradigm that it shares a paradigm with other languages and I believe we can borrow from a lot of research that has been written specific to dynamic languages and find a way of improving the performance, the performance, the performance that Python is able to give its users right now. There is work in the community and I would like to shout out to the Microsoft, the co-developers at Microsoft. They've been spearheading a lot of efforts in ensuring that we have a faster Python interpreter, especially the C Python, the reference implementation.  They've been motivated by the same aspect of performance. So if we are to be relevant and as a language and spearhead or be moved with the times, we have to be, I think right now is a very important time to be looking at where the Python interpreter could be improved. Again, I know there is of course a lot of work happening on even on the reference implementation and alternate implementations. I think this is priority. I think it should be some, there should be some sort of priority given to performance right now. I mean, we could be better, I'm not saying we can be like C, we could be better, so that we do not lose some of our users, obviously. Again, Python was not built to be a language for everything, but we can do something about it. The other challenge that has been talked about has been the standard library. So my first language summit was in 2019 when I came to Python University and one of the heated discussions we were having was the standard library. And so very many talks and discussions happened around the standard library on very many mailing lists and usually most people are talking about, okay, let's, we have to trim the standard library and make sure we just remain with what we need. But I think, yes, I think that's valued. I mean, there is the aspect that we still having very old things in the standard library and things that are not useful right now. However, most of the problem in the standard library is because we are not, what should I say, improving or maintaining the batteries we have in there. I mean, we can trim it as much as we want, but I think we need to, even whatever we remain with in the standard library, we need to find a way of making sure we improve the modules that we still keep there because we are not solving any problems. So what happens again, 10 years from now, will we still just keep trimming off things from the standard library all the time? I think we should just have a pathway towards instead improving some of those, the libraries we feel are important. I'm not against trimming it further, but I think we should be also make sure we handle the underlying problem which is there are maintained in some sort of way. The other aspect is garbage collection. Now, garbage collection as a topic or as a paradigm has lasted for 60 years now. And it has edged as it's as old as six years right now, 60 years. Python is about 30 years. However, and without downgrading anybody and I know most people know about the challenge, I think we should be looking at moving probably to tracing garbage collection and generational garbage collection because the industry has moved, a lot of research has shown. So Python is based on reference counting. We could call it a hybrid because reference counting does not collect cycle. So there is a sort of a tracing like GEC that handles cycles. So GEC research has showed us that tracing garbage collection does well in terms of performance and we can improve it. We can further even optimize it with parallelism and so many other things. So if you had to be relevant and go with that time, I think we should be looking at improving some garbage collection for CPython, the reference implementation at some point. And then this is something that has been discussed for long. It's posed so many, there are so many questions to answer in terms of supporting this but I think this is a good time to start thinking about garbage collection. Because again, if we are to be relevant, I mean, maybe we should be thinking about moving to tracing garbage collection, maybe generational because as it stands, it looks like we are almost 20 years behind behind the landscape or behind in a version or behind research. And they accept the challenges we are still facing. I think, but I still think we can do more in this area. The other interesting aspects that I also touch on in my research but also in general has been the CPI. So we've hailed alternative implementations that have come up. First of all, they've been motivated by performance of the reference implementation. However, they've all been blocked by the aspect that they cannot efficiently support the Python extension modules. So the CPI was built to be very simple. And if we look at the implementation of the CPI and you compare it to the design at that time, the Python was built, they made some good decisions at that time, but now I don't think some of the design decisions in the CPI, as we've seen, it's evolved to be unmaintainable but alternative implementations cannot efficiently support it. I think it's only PyPy that has tried to maybe successfully support the CPI, but as if you, but the way they support it has also come with the performance, some performance degradation. And if you go to the PyPy documentation, you can read about all the challenges they are facing by virtue of how the CPI was designed and could took the things coming to mind.  So it's been a block at so many alternative implementations to successfully support it. I've been reading a couple of papers and from the time I think Blue Hours was implemented, they've been using the Python CPI as an example of how not to implement a CPI. So many people have learned from us in terms of how not to implement a CPI according to those papers, which is unfortunate, and I'm not criticizing anybody. But I think this is something we can also, I think right now start looking at it and try to see if we can find a solution. So those are my key things about the language in general, but I would also love to talk about maybe one thing about the Python ecosystem that some people have probably been grumbling about and it's core development in general. And when I talk about core development, I'm talking about how the language is managed or maintained in general in terms of receiving bugs, how bugs are triaged, how development is managed, the response to pull requests and generally the response to contributions, first of all by the core team, but also from contributors in general. So when you look at core mentorship, recently, so many core developers have tried to, because the core team, it's not as big, but also the active core developers are not as many. So it's too much work for very few people. And I know that there is a lot of effort by core developers like Victor Stina, even Goodman Rossum and other people that have been mentoring very many new members to join the core team. And, but there is still friction around, right now we're having like 1,400 pull requests that are still open on the CPython project and most of them are actually never reviewed. And this is an open problem. It still remains to be open and I don't know how we will effectively solve it. However, right now, I think it's very, in my view, from my two years of joining core development, I'm seeing like so many people are grumbling about the whole how core development is managed, the idea that people are willing to submit peers and people are not there to review them. And I'm not even blaming the core team because I mean, no one is paid besides, people have families and stuff and they do other things after work. And besides the core team is very small. So I'm not even blaming anybody. And then there are other factors, even if you had time as a core developer, you cannot review every pull request because we also, every core developer, we have varying levels of expertise. So it's unrealistic to expect one person to be reviewing everything. I think my point here is that it's a very difficult topic but we need to be looking at it because so many people are grumbling and talking about it. So I think it's high time we started to talk about it because it will affect how people look at the language because if they think they're submitting bugs and no one even triages it or even looks at it or responds to it after 10 years, then it starts to be a problem. Probably people will look for other better places to be which is not a problem to any specific individual but I guess it's something we need to talk about. So what is the way forward? I don't think I have any, I don't think I have solutions to all these problems. And I've just talked about just a few of them. And I don't promise that any, I don't even know if anybody has a single solution for all those challenges but I think the solution or the way forward is in some way among us. In some way the solution to all the problems the Python as a language or ecosystem is facing in some way the solutions live in its community. We just need to uncover them in some sort of way. I don't know, EuroPython I think is having about 1,000 attendees. Python US usually has so many thousands of attendees as well. And I think as a collective unit we have a solution. The solutions are somewhere in us. We just need to find a way of tapping into them organizing ourselves towards having some sort of solutions. And if we think more about some of the problems we're having we could find a way for them. I just have a few tips that I'm going to talk about today. The challenges Python is facing as a language are not unique. Some new languages like I told you, especially Lua because I've read so many papers that have been written especially by the Lua Coroutine. When they started to build Lua they first of all looked at Python and tried to avoid its problems. But also we can learn something from them especially in how they evolved and changed specific aspects of especially Lua. And I'm trying to say Python's problems are not very unique. For example, I've been following the story about Lua's API and they've made drastic changes even changes that we fear we are fearing to make. Some of them that we're fearing to make right now as Python. But we could learn something from them especially on how they evolved the API. They made so many radical decisions in how Lua's API changed. Maybe we could learn from them. And again, take my advice with not so much thought because again we need to look at other things like there's some things we cannot totally compare but I'm saying we can learn from some of these new languages languages like V8 and Rust. The way C8, the V8 garbage collection especially works for both the normal JavaScript but also see extensions for garbage collection. They use handles, I think something that HPI does. Again, there are things we could borrow from some of these new languages. They've written a couple of papers where they're actually using Python as an example. They're using Python's problems that they don't design languages that look like that have the same challenges like Python. So the first place we can look at these languages and we see what we can do borrowing from some of the ideas. Now, I talked about the C API, how it's problematic and problems like garbage collection and maybe other performance related problems. It's not going to be easy to change the C API or to change to Tracing garbage collection and those ideas are very radical. But what we can do is if we can have researchers like me and other people if you're probably doing your PhD or considering to do your PhD and you could start, you could decide to work on some of these problems because I think what we need is people simulating some of these radical ideas that are probably the core team is still afraid to try. And then from the insight that these researchers are simulating we can find a way of to see if some of these ideas will actually flow well with the language. That's one thing we could try because for example, for compatibility reasons there is a big fear of totally changing the C API. Even if we have the solutions but if we have people simulating and creating insight then probably we'll have some confidence in the core team trying to gradually borrow some of these ideas. And some that can be merged into the project as they are. I mean, it wouldn't be bad if they don't pose a serious compatibility or serious problems. I think the idea is that we need to create insight if your research are probably should look at simulating some of these radical ideas. And I have already talked about my whole issue about the standard library is that just streaming stuff is not going to improve unless we have a pathway to saying that even the staff will keep in the standard library if we commit that we shall improve. We have a commitment to improving it otherwise we are not solving the problem. Will we delete or trim the standard library until we only have if else for only? I mean, it won't make sense at some point. I think as we trim, let's find a pathway towards it. And I think the question is if you're trimming stuff and telling people to go to the, to go to PIPI let's have a clear path of where these deleted modules are going. I think that's going to put some confidence in people otherwise if we just delete stuff and we don't have a good way of where to place those things that I was going to leave for users. That's my thing. Again, there's so many efforts around, so when we talk about these problems very many people are engineering solutions. However, I think this is a time to take caution because over engineering is not, over engineering does not always come with performance also the benefits. Let's prioritize guided engineering. And so I think I've read stories elsewhere in the language I want to mention right now. So they over engineered something and removed it later. So over engineering is not helping. I mean, I think the engineering should be guided by the problems we are currently facing at least priority wise. So if it's something is a performance related fix, let's, I mean, let's wait and see if it's really giving us the benefits we're claiming it has. And if it's not, however, even if it's running on top of catching edge technology I think we shouldn't be merging. So let's have a balance between not engineering for the sake of engineering. I think that applies to the core team. And Python has done a lot of work in, right now we have a developer in residence that just works on C Python. So that has been a good step but I also encourage so many other companies to probably think about sponsoring and financing developer in residence roles so that we have more people. This will improve the language because if you're running on Python and we are not investing a lot in it then we are probably building on to crumbling infrastructure per se. So like I said, I would love to, before I end the talk, I would have to say that the solution to all our problems or the bad parts of Python, the solutions leave among us. And if we cooperate, it does not care. It doesn't matter because Python is open source and anyone of us, even if just 2000 of us wanted to get a solution we are enough to improve or make Python better. I think we just need to cooperate and be willing to share all ideas and if we have time, put in the time and for companies, if you have money if you can't put in time then you can put in money to support all the programs that the PSF has in ensuring that Python, the language is relevant in terms of all the activities that surround the language and its ecosystem. And if you want to talk about some of the things you can cooperate on as part of my plan for being a PSF director is I want to highlight some of the research we have in our community. And so if you do research in Python I would love to talk to you. I have a couple of plans I have for us and if you do Python in education you can talk to me after or during the conference and if you're interested in the ambassador program you can also talk to me and we can discuss more about some of the plans I have as an individual and that we can work together with the PSF to achieve the languages in the community. I would love to end by saying the solution is within us in some sort of way we just need to find a way of voicing our solutions in a more practical way per se. Thank you. These are my emails if you want to talk about anything. Yeah, thanks very much. I would love to hand over to the organizers for any questions I may have. All right, thank you so much for the great talk. We just loved it and I'm seeing lots of questions in the question and answer chat so I will try to write down the questions so that they appear on the screen and it will be easier for you also to read them out and to answer them. So we got one question, very interesting question. It's about the standard library. You mentioned that the standard library has been sometimes seen as a problem but what is actually the problem with it? Is it because it's too large or what else? Okay, so the different discussions that have been had around the standard library has been that first of all that the problem is they are old modules but most importantly, most of the modules live in the standard library but they're actually not maintained for some reason. For different reasons that I can't pinpoint even myself but it could be because of resources. Some modules up to now don't even have an expert like nobody knows, understands them at all. So it's too big but also too big for people to maintain. At some point it's grown bigger than us but also some things are obsolete, they are old. Again, we are not the only people, Python is not the only language that has the same problem. I think even Ruby, its standard library has grown to some point to be that it has old stuff but also they found that having things in the language itself, it does not have maintainers and the learning curve to contribute to the core language itself is harder compared to if the library, for example, was on PIPI. So I think it makes more sense if we had a more streamlined standard library and we have a path towards having more modules on PIPI that could probably, maybe we will have that could have better maintenance there. So again, it's too big having obsolete stuff but essentially it also poses a maintenance burden. So PIPI is better in that case, yeah. All right, thank you, great answer. Great question and great answer. We have another very interesting question in the chat. What is the reason for switching from a ref counting to a Tracy Garbage collector? If it were performance, what would be the difference that you would expect from such a switch? So best of research. And again, I do research in garbage collection and if you have, if you, I'm not baddening anybody to read or to have an insight into existing research. Most people, we move away from reference counting for performance reasons because first issues like maintaining reference counts is so can be, can pose an overhead. And the fact that we need to have a hybrid sort of approach to solve all our problems regarding garbage collection, I think it's not very ideal because we can need some sort of tracing garbage collector to manage our cycles per se. I have no prediction of how much difference we are going to have in Python that you can never make. I think predicting performance in such an, I said you can never make right now. But what I think is that best of research, there are things tracing garbage collection could give us sort of parallelism that something that we can't do with reference counting. But we are confident that from insight we've had in other languages and existing research, we are sure tracing garbage collection can give us better benefits than reference counting. Okay, Joanna, fantastic. Thank you so much for your answer, very good question and fantastic answers just like before. And we are running a little bit out of time and so I'm afraid we have to stop here. But I would like to thank you for taking the time to prepare this talk and delivering it. We really enjoyed it. Thank you so much, Joanna.


Facebook is a new name, Metta, and just someone, I forget who it was, and I found a link on the World Economic Forum, they came out at the same time that Facebook was changing their name to Metta and calling for the metaverse, right?  I've talked to people years ago, where I, you know, I tell them, don't, oh Chico, look, we're just doing this, we're just doing this, I go look, man. This is a program brought on about, it's the deep state, it's CIA funded, it was, it was established to control you, to program you, to brainwash you. It is stronger, okay? It is more intricate than you know, and if you stay on that platform, slowly, slowly, you will lose your mind, right?  And people are like, oh Chico, you're exactly, I'm smarter than this, I'm more powerful, I know who I am. Years later, right, I talked to these people, and they're quoting me centralized propaganda, and like one of the places that, first places that you could see it happening on such a crazy level, was Russiagate and Julian Assange. I would talk to people who, who were only getting their news fees from Facebook, right? Turning to me is that saying Russiagate and Trump was a Russian agent, and, and Julian Assange is a Russian agent, and WikiLeaks is, is Russian propaganda, and I, and I turned to my go, you effing morons. I told you not to do this.   And you think you're smart.  Your teeth start falling off, right? And you become schizophrenic. You're talking, you're going down avenues that just doesn't make sense of randomness, right?  You're, you're no longer have, you no longer have a soul, because you are not who you were, right? And that's what they turn into, right?  And hopefully they'll follow suit, right?