• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC Design
  3. How to obtain Discrete-Time (DT) response from a switched...

Stats

  • Locked Locked
  • Replies 52
  • Subscribers 127
  • Views 30942
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

How to obtain Discrete-Time (DT) response from a switched-cap (SC) circuit (integrator)?

bernd2700
bernd2700 over 3 years ago

Hello everybody!

Before I start my questions, first I have to cite from Mr. Ken Kundert’s excellent paper “sc-filters  -  Simulating with Cadence SpectreRF” the following: “Usually, with switched-capacitor circuits, designers are interested in the discrete-time behavior as switched-capacitor filters are embedded in sampled-data systems. SpectreRF is set up to report on the continuous-time behavior. As such, you must take steps to get the discrete-time behavior if that is what you need. The PNoise analysis does provide a built-in feature that can be invoked in order to determine the noise of a filter acting as a discrete-time system. Otherwise you will need to add a idealized sample-and-hold to your circuit.”

 

He wrote to me at forum “designers-guide.org/.../YaBB.pl” the following: “I'm afraid I have no experience with sampled PAC”, because this was implemented later. So I count on you, Cadence guys that hopefully YOU have an answer to me:

 

Q1: I thought (wrongly) I would obtain the DT response of a system if I specify the special option “SAMPLED” of SpectreRF Periodic-AC (PAC). This is not the case. So, if anyone please could tell me what to do to get the DT frequency response for the PAC analysis? (see graphs below)

 

Q2: Do YOU have an idea which feature can be invoked to obtain the DT system response in the PNoise analysis? As you see above, Ken Kundert indicated so, but did not say which feature. Once, he wrote to me: “I think they confused autonomous sampling (sample very T seconds) and triggered sampling (sample at a threshold crossing), and assumed that triggered sampling in PNoise was enough”.

Ad Q1:

You see an CT (Conttinuous-Time) analog Low-Pass-Filter (LPF) which is simulated with Cadence SpectreRF PAC _sampled and the result of it below.

Ok, this time, it's not a SC circuit, but this is not the topic. It rather is: How to obtain the Bode diagram of the _DT_ response of any circuit.

You can recognize the obtained spectrum is NOT symmetrical around half the sampling frequency fs/2, as I was expecting, but it still seems to show the CT response.

Many thanks in advance and best regards,

bernd2700

  • Cancel
Parents
  • SpiceMonkey
    SpiceMonkey over 3 years ago

    You have got the right DT bode plot.

    For time-averaged PAC, you have got a response looks like sinc function (green one, it looks right)
    For sampled PAC, you should get a replica response in every Fs frequecncy (blue one, it also looks right)

    The blue one seems not that accurate, if you change you frequncy display type, or try linear with smaller step, or logrithm with 100 points per decade, you will get a more accurate response: exact replica every fs and each has fs/2-symmetry .

    For CT circut, I think you could also get a sampled PAC: just place a vpulse without any connection,  then use vpulse's frequecy as pss-beat-frequency and use it's posedge as sampled event. (make sure your circuit is periodic or just simply set the input transient signal = zero).

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bernd2700
    bernd2700 over 3 years ago in reply to SpiceMonkey

    Dear SpiceMonkey,

    Thank you for your reply!

    You write “For sampled PAC, you should get a replica response in every Fs frequecncy (blue one, it also looks right)”. Yes, you are exactly correct, I “SHOULD GET”, but I think I unfortunately “do NOT get” if I watch the blue curve. Why? Because a DT spectrum must be symmetrical around fs/2, and fs/2 in my case is 500 Hz. So I would have expected that the line is up at 0 dB again at fs = 1kHz in the Bode diagram, as it is also 0 dB for DC (here at e.g. 1 mHz since it’s a log plot). But it does NOT show 0 dB at fs = 1kHz. Instead, it goes further down with e.g. -20dB/dec, which, as a consequence, tells me, it is NOT the DT spectrum / response what I get but something else. Which simulator setup do I miss, or what I am doing wrong here? So, what to do, in order to obtain the Bode plot’s DT response, since Mr. Kundert perfectly has written in an article: “... you must understand upfront if you are interested in the CT or in the DT response of a system” => And yes, I am interested in the DT response and was thinking: This, I will get with the “PAC _sampled_” analysis at a specific (e.g. rising or falling) edge (every 1 ms), but as the Bode plot reveals, for me ( = not being symm. around fs/2) I still did NOT obtain the DT response.

    I even have 1000 points per decade, and from the below picture, you see, it is NOT symm. around fs/2 = 500 Hz, therefore your first sentence “You have got the right DT bode plot” confuses me.

    If you look at my schematic, it is exactly what I already did what you propose: I added a vpulse with 1kHz and used it for the PSS, see voltage “v1” and node “p1” there.

    Above Fig.: SpectreRF PAC sampled analysis, e.g. at rising edge (@ 500us): There is NO line going up to 0 dB again at fs=1kHz => No DT Bode plot!

    Thanks a lot so far and I am curious about your answer(s),

    bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bernd2700
    bernd2700 over 3 years ago in reply to Frank Wiedmann

    Dear Frank,

    Yes, you write it spot-on!

    The optimum for me would be a ready-made Matlab command called for instance “freqresp_EquivSpectrePAC”, and well documented what hides beneath it.

    Unfortunately, this doesn’t seem to be available yet.

    It simply would have the following enormous advantage: If I do in Matlab a model of my circuit, then call this command, and the result does not match the real circuit’s Cadence PAC result, I know automatically it is the model of my circuit which needs correction, because the (PAC) analysis method is (approx.) the same.

     

    Let’s assume, I only have a “pure analog circuit”, such as e.g. this RC-LPF (no SC. things). Let’s further call now the normal “AC” analysis from Cadence, and on the Matlab side, I do “freqresp” of my model in “s”. Here, it’s simple and I think I can easily state: If the Bode plot results Cadence <=> Matlab are different, it is the model of the circuit which needs correction.

    ==> For that reason, I would like to have the same for the SC. / PAC stuff, as described above.

     

    As you write: “Matlab is not a circuit simulator” - which indicates to me, that, PAC internally, things are possibly calculated completely differently, but: Is there really no way to do a model of the Cadence PAC analysis itself, so to “just write some Matlab commands / equations” which are executed when calling my invented command “freqresp_EquivSpectrePAC” which will do similar (with maybe some limitations) when a model in “s” is feeded to it? A là: “[ H , w_out ] = freqresp_EquivSpectrePAC( sys , w , ‘sampled’ , ‘rising’ )” ?

     

    I am convinced it would be extremely useful, not only for me but also for a lot of other people!

     

    Best regards,

    bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Frank Wiedmann
    Frank Wiedmann over 3 years ago in reply to bernd2700

    I don't know a simple way to exactly model the PAC analysis in MATLAB, but I am not really an expert here. You should better ask this question at https://mathworks.com/matlabcentral/answers/ . I have already described above how the PAC analysis works conceptually.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bernd2700
    bernd2700 over 3 years ago in reply to Frank Wiedmann

    Dear Frank,

     

    I think I cannot ask this question there, since it is not a question about (a) specific Matlab command(s). For me it seems to be rather a question to re-type the necessary just conventional equations in ANY other program to re-produce how Cadence has implemented the PAC. And this, Mathworks cannot know. But Cadence of course knows how they did it, therefore my question in a Cadence forum.

    You write, you ”have already described above how the PAC analysis works conceptually”. Of course I remember that you wrote about that PAC uses this “ideal Dirac sampling” (for other readers, refer to forum topic “51410”). As I said, I try to read all your answers carefully, but it seems, that I am mathematically unfortunately a bit too weak that I can produce out of this, what does it mean in terms of concrete equations to type if I start searching the internet.

    As a perfect example, you have written me a _concrete_ netlist for a circuit and the _concrete_ equation: “pac_normal=pac_sampled.*sinc(f*ts);”, where I really was able to re-simulate it on my own at home and also could plug in some values in your concrete equations and see the output results and can compare. That’s the level I need and where I can follow how it is done correctly. And I thank you 1000 times for that concrete example! I am sure, many other people will find it helpful, too!

     

    And this concrete example from you permits me to be able to ask specific questions, where the following ones remain:

    Q1.: What I still didn’t understand is why you did a multiplication with the sinc function in Frequency-Domain (FD). I know already that convolution in Time-Domain (TD) automatically means multiplication in FD and vice versa. But what is telling you that multiplication in FD is here the right way to chose?

     

    Q2.: Is there now a convenient way (e.g. over the PAC menu or Spectre settings anywhere else) to force the PAC analysis to get a Bode plot in Discrete-Time (DT) domain of ANY circuit (also e.g. for the RC-LPF)?

     

    Q3.: If the PAC does perform this “ideal Dirac sampling”, I mean it’s also “sampling”, so taking values at every “n*Ts”, correct? Why I do not get then automatically a real DT response?

     

    Thanks a lot,

    bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Frank Wiedmann
    Frank Wiedmann over 3 years ago in reply to bernd2700

    I am going to repeat some relevant quotes here that will hopefully help you find the answers to your questions yourself.

    Frank Wiedmann said:
    The repetition in the frequency domain comes from the circuit, not from the sampled PAC analysis by itself. After the first sampler, the circuit can no longer distinguish between a frequency f and a frequency n*fs+f or n*fs-f where fs is the sampling frequency and n is an integer. You will still see differences in the result due to circuit components up to the first sampler. However, you will not get the sinc shaping from the zero-order hold at the output (or effects from anything else that happens between the sampled points).
    Frank Wiedmann said:
    Conceptually, you can get the amplitude of the result of a sampled PAC analysis result in the following way: Apply a sine with the frequency of interest at the input (with an amplitude that is still within the linear range of the circuit), then note all the values of the output signal at the sampling timepoints (given by the threshold crossings of the sampling signal). The difference between the maximum and the minimum of these values is twice the output amplitude (because you are measuring peak-to-peak). As a result, you will get the response of the CT circuit up to the first sampler multiplied by the response of the following DT circuit. If you have a pure CT circuit, you will get the same result as from a normal PAC analysis (or a simple AC analysis, for that matter).
    Frank Wiedmann said:
    The normal PAC analysis result of a DT circuit with a piecewise constant response at the output (also called zero-order hold) is simply the result of the sampled PAC analysis multiplied by the sinc function (see https://en.wikipedia.org/wiki/Zero-order_hold for details).

    This Wikipedia page explains why going from a signal consisting of Dirac impulses to a piecewise constant signal in the time domain corresponds to a multiplication by the sinc function in the frequency domain.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bernd2700
    bernd2700 over 3 years ago in reply to Frank Wiedmann

    Dear Frank,

     

    Yes, I have already read through these answers felt 100 times before , and honestly, I couldn’t get all the ideas out of those specific ones (there are other answers from you where I could get out 100%). Why so? :

     

    ------------

    “After the first sampler, the circuit can no longer distinguish between a frequency f and a frequency n*fs+f or n*fs-f”

    If I am correct, the reverse conclusion out of this sentence is: As soon as I use a sampler in the circuit, it automatically must follow a DT signal on its output.  –  However, this doesn’t seem to be the case if you watch my circuit at the very top at this post and follow the blue curve ( = node “Vo_sh1” , after the sampler): The spectrum is NOT being DT.

    I have understood:

    *) You basically say:      Install a sampler in the circuit and its output is DT.         <== This would be also logical to “my theory”!

    *) PAC sampled, however, says:      Although a sampler installed in the circuit, its output is still CT (blue curve).

    For me this is a contradiction. Where is the error??

     

    ------------

     “However, you will not get the sinc shaping from the zero-order hold at the output (or effects from anything else that happens between the sampled points).”

    Ok, clear is for me the 2nd part in the parentheses. Not clear is the first part:  Why from DC to fs/2 I shouldn’t see the first sampler’s sinc. shaping effect (e.g. its attenuation of already non-negligible ca. 4 dB at fs/2)??

     

    ------------

    I have also re-visited the topic how conceptionally the PAC sampled is done, and now really have found perfect matching between doing in praxis your verbal description and the real PAC sampled output result. I’m sorry that you had to repeat here an already given answer, but now I got it.

    For the other readers, I show here clearly the result what Frank means:

    In the source V1 I included the AC source “pacm = 1” as well as a sinusoid of 1V with 500 MHz ( = fs/2 here):

     

    So I take the output "out" and do (max-min)/2, so: Manual calculation: “20*log10( 9.887E-3 / 2 ) = -46.12 dB”

    I found out that the small difference from -46.12 dB to -46.06 dB to the “real PAC” comes from the non-steady-state condition where the marker points are taken from.

    So including steady-state-condition it perfectly fits to what Frank has written (not shown here).

     

    What for me is still NOT clear, as written already above, is: As soon as I take the regularly sampled values (here the red curve) why the response is not automatically DT? (here it is, but not in all the cases, as e.g. for my pure analog RC-LPF at the very top).

     

    ------------

    You write: “The normal PAC result of a DT circuit with a ZOH at the output is the sampled PAC * sinc”

    So the equation “pac_normal=pac_sampled.*sinc(f*ts);” seems only valid for above type of circuit. If I would put the same equation but when simulating a CT circuit, as the RC-LPF, I would get wrong results.

    So, I would like to have a general valid statement between the relation of the normal PAC and sampled PAC. Is it maybe just to leave away the “sample” command and take the normal output (e.g. in above picture to take the cyan instead of the red curve) ?

     

    ------------

    “In order to be entirely precise, sampled PAC analysis does not generate a sampled output spectrum, but it samples the transfer function”

    Although I have found it to be for sure a very important info, I am also not completely sure about what you meant here exactly with “samples the tf.” How can something sample a tf? If my tf is e.g. in CT domain, e.g. “mytf = 1/(s+1)”, how can you “sample” that thing? A tf is an equation in my opinion, either in s or in z I know. You also could not mean to do a la: “sample( freqresp ( mytf ))”, because the freqresp is what just the PAC tries to generate.

     

    ------------

    “Wikipedia explains why going from a signal consisting of Dirac impulses to a piecewise constant signal in the time domain corresponds to a multiplication by the sinc function in the frequency domain."

    But I do not have a signal consisting of Dirac impulses. I have an analog sinusoid input source and on the output a ZOH. For me this Wikipedia page is not answering my specific question here, or I do not get the point all the time – could be!

     

    In the other forum topic (goto: “51410”), you write: “if you sample a signal in the time domain (by multiplying it with the sampling function), you need to convolute the spectra …” So yes, we sample in TD. But in your Matlab example you still do a multiplication in FD “... = pac_sampled.*sinc( ...” and the result seems to be correct.

     

    ------------

    Last: Can I force SpectreRF to produce a DT Bode diagram? (Independently of the schematics)

    I guess: “Possibly No”, because I already searched some weeks ago before I asked this question inside the PAC menu options for a while but I didn’t find any hint about forcing a DT response and maybe a conversion method to it , BUT: Just because _ I _ did not find, it does NOT mean: There isn’t any available!!! Often, things are hidden or one can apply some tricks. So, here I just can repeat myself: It would be nice, if some-one from Cadence could make a clarifying statement: “YES” or “NO”, and if “yes”, how!

     

     

    Thanks a lot, mainly to you Frank of course for all your effort, but you see, I already came huge steps forward because of you!

    Many nice greetings,

    bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Frank Wiedmann
    Frank Wiedmann over 3 years ago in reply to bernd2700

    I don't really have the time to answer all your questions in detail right now, but here is a quick suggestion: Take your example circuit where you have examined with a TRAN analysis how the sampled PAC analysis conceptually works and compare the results for the switched-capacitor (SC) lowpass filter to those for the equivalent RC lowpass filter. I suggest that you use a frequency above fs/2 for this, because it will make the differences much clearer. The key is that in the SC circuit, the filter function is applied to the aliased signal.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Frank Wiedmann
    Frank Wiedmann over 3 years ago in reply to Frank Wiedmann
    bernd2700 said:

    “After the first sampler, the circuit can no longer distinguish between a frequency f and a frequency n*fs+f or n*fs-f”

    If I am correct, the reverse conclusion out of this sentence is: As soon as I use a sampler in the circuit, it automatically must follow a DT signal on its output.  –  However, this doesn’t seem to be the case if you watch my circuit at the very top at this post and follow the blue curve ( = node “Vo_sh1” , after the sampler): The spectrum is NOT being DT.

    I have understood:

    *) You basically say:      Install a sampler in the circuit and its output is DT.         <== This would be also logical to “my theory”!

    *) PAC sampled, however, says:      Although a sampler installed in the circuit, its output is still CT (blue curve).

    For me this is a contradiction. Where is the error??

    The first sampler does cause aliasing, but you will only see an effect of this if you have a frequency-dependent circuit after the first sampler, not if you sample its output directly.

    bernd2700 said:
    So, I would like to have a general valid statement between the relation of the normal PAC and sampled PAC.

    There is no such statement, because the relation depends on the shape of the output signal. For a piecewise constant signal, the results are related by the sinc function; for a sinusoidal signal, they are the same.

    bernd2700 said:

    “In order to be entirely precise, sampled PAC analysis does not generate a sampled output spectrum, but it samples the transfer function”

    Although I have found it to be for sure a very important info, I am also not completely sure about what you meant here exactly with “samples the tf.” How can something sample a tf?

    Ok, a better formulation would be: "The sampled PAC analysis samples the output signal and uses the result (consisting of Dirac impulses) to calculate the transfer function."

    bernd2700 said:

    “Wikipedia explains why going from a signal consisting of Dirac impulses to a piecewise constant signal in the time domain corresponds to a multiplication by the sinc function in the frequency domain."

    But I do not have a signal consisting of Dirac impulses. I have an analog sinusoid input source and on the output a ZOH. For me this Wikipedia page is not answering my specific question here, or I do not get the point all the time – could be!

    What we are comparing here is the result of a sampled PAC (Dirac impulses) and a normal PAC (piecewise constant signal).

    bernd2700 said:
    In the other forum topic (goto: “51410”), you write: “if you sample a signal in the time domain (by multiplying it with the sampling function), you need to convolute the spectra …” So yes, we sample in TD. But in your Matlab example you still do a multiplication in FD “... = pac_sampled.*sinc( ...” and the result seems to be correct.

    When you go from Dirac impulses to a piecewise constant signal, you convolute in the time domain (with the rect function), so you need to multiply in the frequency domain.

    bernd2700 said:
    Last: Can I force SpectreRF to produce a DT Bode diagram? (Independently of the schematics)

    Not if you have a CT circuit like a simple RC filter.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bernd2700
    bernd2700 over 3 years ago in reply to Frank Wiedmann

    Dear Frank,

    Many thanks for your detailed reply!

    You write: “The first sampler does cause aliasing, but you will only see an effect of this if you have a frequency-dependent circuit after the first sampler, not if you sample its output directly.”

    It seems to be again an important answer from you. Ok, clear is the first part: That it does aliasing, because it’s a sampler.

    Not clear:

    1. Which “effect” do I see? You probably mean the effect of getting a “DT” response instead of getting a “CT”?
    2. And why there is a difference between if I sample the output directly or if I have an additional frequency-dependent circuit AFTER the first sampler?? I tried to imagine this, but I couldn’t. Please, Frank, could you explain this in a bit more detail what is going on here?
    3. More a rhetorical question is: "What would happen if I have an additional circuit after the 1st sampler but not a frequency-dependent one, like a gain block (e.g. a resistor divider)?" Because I think, if once I fully have understood it, I can give the answer by myself what happens for any type of circuit installed after the first sampler.

    ---------------

    You write: “the relation” (between the normal PAC and PAC sampled) “depends on the shape of the output signal”.

    I had this fear, that this is the case. But this maybe explains why I’m having difficulties to find a general flow diagram in frequency-domain for the PAC analysis stuff. E.g. I therefore canNOT generally write “pac_normal=pac_sampled.*sinc(f*ts);”, because it seems circuit dependent if this equation holds true or not. That’s a pity, because I would have liked to write general valid equations for the relation. But you clearly write: “There is no such statement”.

    ---------------

    You write: “What we are comparing here is the result of a sampled PAC (Dirac impulses) and a normal PAC (piecewise constant signal).”

    So from this section, I understand:

    1. a) Sampled PAC = Dirac impulses
    2. b) Normal PAC = Piecewise constant signal

    What I’ve learned from you and from Wikipedia is: The procedure clearly is:

    ==> “In order to come from a) to b), install a ZOH in-between”!

    For me, from this section here, this clearly looks to be circuit INdependent, because to get from a) to b), one MUST install the ZOH, there is no other way to obtain a piecewise constant signal out of Dirac impulses, is there?

    As a consequence, it’s still a contradiction for me! : From this section it seems to be generally valid, from the very above section it depends on the circuit I use, if I do need a ZOH not to go from Sampled to Normal PAC. Fu**, I am again confused now about this.

    ---------------

    You write: “The sampled PAC analysis samples the output signal and uses the result (consisting of Dirac impulses) to calculate the transfer function.”

    Did you try to just express in other words, what we do anyway, or is there more to it which I maybe miss? :  Ok, the PAC samples the output, and then for the tf. calculation, it just does “(max-min)/2” (if the input is normalized to “1”), correct? Or do I miss something here for the “calculation of the tf.”? There is no additional tf. calculation inside the PAC, correct?

    ---------------

    And why: As soon as I take the regularly sampled values (at n*Ts), why then in Cadence PAC sampled the response is not automatically forced DT?

    Isn’t a DT spectrum just a consequence out of regularly sampled points in time? Obviously in Cadence PAC sampled: No (Otherwise I couldn’t get out a CT response of my normal RC-LPF circuit.)

    But, if in contrast, I do a DFT (in Matlab e.g.), the spectrum IS automatically DT ( = being symm. around fs/2), and I guess, it’s not the “fft” process itself which makes it DT, but it’s the regularly sampling process which is responsible for the DT spectrum. So ???

    ---------------

    Ok, this point is solved now: I cannot _schematic-independently_ FORCE a DT response from the Spectre PAC. Up to now, there is no such selectable option in its menu implemented to do so. => Thanks for stating this very clearly!! (Would be nice for the future to see such a thing there.)

     

     

    Again, “1000 * Thank you”, Frank to bring some clarity on this, as it seems for me that no book in this world is able to write this nicely and in simple sentences, so that everyone can understand.

    bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Frank Wiedmann
    Frank Wiedmann over 3 years ago in reply to bernd2700
    bernd2700 said:
    What would happen if I have an additional circuit after the 1st sampler but not a frequency-dependent one, like a gain block (e.g. a resistor divider)?

    How do you want to see a repeating gain pattern as the result of aliasing if your DT circuit has a gain that is constant over frequency?

    bernd2700 said:
    There is no additional tf. calculation inside the PAC, correct?

    There is an important difference between the spectrum of a sampled signal and the result of a sampled PAC analysis. For a sampled signal, due to aliasing you generally don't know the original frequency of the signal (unless its bandwidth was limited before the sampler). Due to this, all possible frequencies are often shown in the spectrum, which automatically leads to the well-known repeating and symmetrical spectrum of a sampled signal.

    In sampled PAC analysis, however, the frequency of the input signal is known and is used as the x-axis for plotting the result. As a consequence, you will only see a repeating and symmetrical pattern if it is caused by the circuit itself, for example by a frequency-dependent circuit after aliasing by a sampler.

    bernd2700 said:
    Normal PAC = Piecewise constant signal

    The normal PAC of course uses whatever shape the output signal actually has. For many DT circuits (like the example used here), this is a piecewise constant signal, so you get the sinc relation. For a CT circuit like a simple RC filter, with a sinusoidal input you will of course also get a sinusoidal output, which is why normal PAC, sampled PAC and AC analysis will all give the same result in this case.

    bernd2700 said:
    Ok, this point is solved now: I cannot _schematic-independently_ FORCE a DT response from the Spectre PAC. Up to now, there is no such selectable option in its menu implemented to do so. => Thanks for stating this very clearly!! (Would be nice for the future to see such a thing there.)

    A CT circuit like a simple RC filter does not produce a DT response, so I doubt that you will ever see this.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bernd2700
    bernd2700 over 3 years ago in reply to Frank Wiedmann

    Dear Frank,

    Thank you VERY much for your answer containing some other important info and clarifications!!! Now, just please gimme some time again. I do and try now a lot of different things, and I need time to digest all this in combination with your answers.  As said, I do not like to "only ask a question" to the audience here, just in order to create work on you. So the better choice is: I will come back with well prepaired questions (if not everything is solved in the meantime, hahaha) but it needs a while...

    Again, many thanks so far,

    bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • bernd2700
    bernd2700 over 3 years ago in reply to Frank Wiedmann

    Dear Frank,

    Thank you VERY much for your answer containing some other important info and clarifications!!! Now, just please gimme some time again. I do and try now a lot of different things, and I need time to digest all this in combination with your answers.  As said, I do not like to "only ask a question" to the audience here, just in order to create work on you. So the better choice is: I will come back with well prepaired questions (if not everything is solved in the meantime, hahaha) but it needs a while...

    Again, many thanks so far,

    bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • bernd2700
    bernd2700 over 3 years ago in reply to bernd2700

    Dear Frank,

    I made an additional graphical representation of my subsequent verbal description. It’s maybe easier to follow then.

    From below figure, you can see: I simulated 2 circuits as Device Under Test (DUT): A) Ken Kundert’s “Ideal S&H”, and B) Your SC-Filter (with modified frequencies, Period = 1ms instead).

    For both, I did the Cadence internal PAC sampled as well as an own generated AC analysis & compared the results of all.

    Explanation of my own AC analysis: It works as follows: At the input of the DUT, I fed a Multi-Tone (MT) stimulus, that are hundreds of automatically stacked sinusoid sources with each 1V amplitude and frequencies reaching from ca. 10mHz until 5 kHz (log. spaced). With the exported transient data over Cadence’s calculator command “sample”, I then do a DFT from both, the input node “u”, as well as from the concerned output nodes. Then I do a division of the 2 DFT results and a Bode diagram of it. (It was some work to get everything done correctly.)

                                                                                        (click to enlarge)

    For both cases A) and B), I honestly would have expected a DT Bode diagram = a repeating pattern around the circuit’s sampling frequencies of 1 kHz, as there is both existent, namely *) no band-limitation before the first sampler (thus aliasing) and also *) equidistant sampling “n*Ts”.

    For case A), you see: Although Aliasing + Equidistant sampled („n*Ts“) signal => I do NOT get a DT Bode plot.

    I was thinking: I always automatically get a DT response ( = a repeating gain pattern around the sampling freq.) as soon as I start doing equidistant sampling in time “n*Ts”, and moreover, regardless of if I have additional aliasing caused by anything or not. Both is obviously wrong: Neither do I get a DT Bode plot when just doing equidistant sampling “n*Ts”, nor when doing equidistant sampling plus aliased signal.

    How then will I obtain a DT response? => You will say: If the circuit itself doesn’t give it, then I won’t get it. Which sounds true to me especially now after those experiments, and as you have written, too: “... you will only see a repeating and symmetrical pattern if it is caused by the circuit itself ...”.

    But why the hell then Mr. Kundert has written in his (already above cited) article: “You must understand up front the difference between the continuous-time and discrete time behavior of your circuit, and you must decide which behavior you are interested in.”. But it now seems, if the circuit is fixed, I do not have anymore the freedom to decide, if I want to see the circuit’s CT or DT behaviour, do I? It seems now, that either the circuit gives a DT Bode plot or not. Thus, for me, your statement ( = you will only get DT if caused by the circuit, no “user” decision) is then in contradiction to Ken Kundert’s statement ( = think and decide already upfront if you want to see the CT or DT response of a circuit). I am sure, you both are somehow correct, but:

    => Where is my thinking error which causes this contradiction?

     

    You wrote: “you will only see a repeating and symmetrical pattern if it is caused by the circuit itself, for example by a frequency-dependent circuit after aliasing by a sampler”.

    Perhaps this is the key message and I read 100 times this. If I only could understand it! The only thing I can think of how to do this, is to add some transfer-function in “z” after the sampler, because I am already now in digital domain, because I have values which are valid only at n*Ts. But then, this DT behaviour is not caused by the circuit itself but by this another added tf. . For instance: Of course, if I add after the first sampler a discrete integrator “1/(1-z^-1)”, I surely get a DT answer. Acc. to you, I really would not get it, if I just add a non freq. dep. tf. (in magnitude you mean, I guess), such as a plain delay "z^-1", correct? Or possibly I think in the wrong direction...

     

    And: Both A) and B) are sample and hold circuits with each 1kHz (or 1ms sampling period) and for both the input stimuli are up to at least 5 kHz, so both should produce aliasing.

    => Why for case A) I obviously get a CT Bode plot, whereas for B) I get a DT Bode plot (Of course, I also remember what you have written: The cyan curve here looks “very similar to the result of the time-continuous filter, but it is really the red curve multiplied by the sinc function due to the zero-order hold at the output”. => Is the cyan curve here now a CT or a DT response? At least, the pattern is not repeating.

     

    Thus, is my following statement true or false:

    *) Repeating pattern => DT response

    *) No repeating pattern => CT response

    In my head (until now) the following statement does NOT exist:

    *) No repeating pattern => Nevertheless possibly a DT response

     

    And: E.g. for case B) : What / where is the difference between: [“PAC sample: n*Ts” (red, green curve)] and [“Calculator sample: n*TS” with DFT (blue)] ? If I manually sample and do DFTs, I get the blue curve, if do the PAC sampled, I get the red or green curve. Both do "n*Ts" sampling, but the results are very different.

     

    Thanks a lot for your help in advance & best regards,

    bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Frank Wiedmann
    Frank Wiedmann over 3 years ago in reply to bernd2700
    bernd2700 said:

    Thus, is my following statement true or false:

    *) Repeating pattern => DT response

    *) No repeating pattern => CT response

    If by "DT response" you mean the result of a sampled PAC analysis, it is clearly false (as you have shown with your own experiments). Also, your transient analysis does not really represent what a sampled PAC analysis does, because you sample a piecewise constant signal with a period of 1 ms every 0.1 ms, getting 10 equal samples in a row each time. I am not going to try and interpret the results of this strange setup.

    You really need to distinguish between the spectrum of a sampled signal and the transfer function resulting from a sampled PAC analyisis:

    Frank Wiedmann said:

    There is an important difference between the spectrum of a sampled signal and the result of a sampled PAC analysis. For a sampled signal, due to aliasing you generally don't know the original frequency of the signal (unless its bandwidth was limited before the sampler). Due to this, all possible frequencies are often shown in the spectrum, which automatically leads to the well-known repeating and symmetrical spectrum of a sampled signal.

    In sampled PAC analysis, however, the frequency of the input signal is known and is used as the x-axis for plotting the result. As a consequence, you will only see a repeating and symmetrical pattern if it is caused by the circuit itself, for example by a frequency-dependent circuit after aliasing by a sampler.

    The sampled PAC analysis only looks at the output at the input frequency (because I chose maxsideband=0 as a parameter) and only plots it at this frequency. The fact that the sampled output signal could also be interpreted as coming from different (aliased) frequencies is not taken into account here. If you also want to see the result at the aliased frequencies, you can set maxsideband to a larger value, which will give you copies of the result shifted by multiples of the pss fundamental frequency.

    By the way, the normal PAC analysis with maxsideband=0 like in my example also only looks at the output signal at the input frequency. For a piecewise constant signal, there will be additional frequency components in the spectrum, possibly with much larger amplitudes.

    bernd2700 said:
    But why the hell then Mr. Kundert has written in his (already above cited) article: “You must understand up front the difference between the continuous-time and discrete time behavior of your circuit, and you must decide which behavior you are interested in.”.

    I believe that he was talking about the difference between a track-and-hold and a sample-and-hold. Sampled PAC analysis with Dirac impulses did not exist back then. At that time, I was emulating it with sampled PNOISE analysis and separate noise sources for every Nyquist band.

    bernd2700 said:
    Of course, if I add after the first sampler a discrete integrator “1/(1-z^-1)”, I surely get a DT answer. Acc. to you, I really would not get it, if I just add a non freq. dep. tf. (in magnitude you mean, I guess), such as a plain delay "z^-1", correct?

    Correct. This is also the reason why you get a straight line at 0 dB if you do a sampled PAC analysis at the output of an ideal S&H (and the result of the normal PAC analysis is simply the sinc function in this case). By the way, you will also get a repeating and symmetrical result of the sampled PAC analysis if you add an RC filter after the ideal S&H.

    bernd2700 said:
    Is the cyan curve here now a CT or a DT response? At least, the pattern is not repeating.

    It is the result of a normal PAC analysis of a switched-capacitor (and thus sampling) lowpass filter with a piecewise constant output signal, looking only at the frequency component at the input frequency.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bernd2700
    bernd2700 over 3 years ago in reply to Frank Wiedmann

    Dear Frank,

    Just very quickly to the point difference "Spectrum of sampled signal" and "PAC sampled":

    You wrote: “Ok, a better formulation would be: "The sampled PAC analysis samples the output signal and uses the result (consisting of Dirac impulses) to calculate the transfer function." ” , and “In sampled PAC analysis, however, the frequency of the input signal is known and is used as the x-axis for plotting the result ”

     

    In my opinion, with my “MT AC analysis” I do like Cadence “PAC sampled” does, therefore I did all this experiments (and so, the necessary equations I can type and port to any mathematical program, whereas e.g. in Matlab I cannot say: “Please perform a ‘PAC sampled’ analysis.”):

    *) “PAC sampled” samples the output signal. => Also my “MT AC analysis” samples the output signal. (Over Cadence’s calculator command “sample”).

    *) “PAC sampled” calculates the tf. => Also my “MT AC analysis” calculates the tf. (by dividing the 2 DFTs “output/input”). (And I tested my script to be sure that it works properly!)

    *) “PAC sampled” knows its input frequency and uses it as x-axis for plotting. => Also my “MT AC analysis” knows the input frequency and uses it as x-axis for the Bode plot (as of course I also have plotted the values ONLY at those input frequencies of the MT stimulus, not at all the others as well).

    *) “PAC sampled” even looks until 100 kHz which is far above the circuit’s fs = 1kHz. => Also my “MT AC analysis” looks far above 1 kHz, namely at least until 5 kHz (the transient analysis for this took already approx. 1 hour), to also be able to “see” what happens above 500 Hz ( = fs/2 of the circuits), so which spectrum I will obtain, a repeating one or not. (I do not have a clue, why you call this “strange setup”, because I think, this is also what the “PAC sampled” does, just that this even goes further until 100 kHz in this case.)

    => Where is the difference between “PAC sampled” and my “MT AC analysis” then?? (Apart from “PAC sampled” is much faster and only needs approx. 1 minute).

    Thx,

    bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Frank Wiedmann
    Frank Wiedmann over 3 years ago in reply to bernd2700

    The problem I see with your approach is that you are trying to simulate all input frequencies at once and are going beyond the Nyquist frequency of the circuit at the same time. A sine at the input of these circuits will not just cause a frequency component at the input frequency in the output signal, but also at other frequencies (where you also might have an input signal). Have you already looked at the output spectrum when you just have a single frequency at the input?

    But the reason why you are not seeing a repetition in the result for circuit B) is probably that you are sampling the piecewise constant output signal, which causes a multiplication by the sinc function and gives you the cyan curve as a result. You could try to model Dirac sampling by only keeping every 10th sample and setting the other 9 identical samples to zero. Maybe this will give you the result you are looking for.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bernd2700
    bernd2700 over 3 years ago in reply to Frank Wiedmann

    Dear Frank,

     

    Aaahhhhhhhh, Yeeeesssssssss, clear!! How easy! As you proposed, I will check with 1 freq. at a time only.

    (I would like to also do this freq. sweep automatically, but for this, I would also need then hundreds of transient sims in Cadence (1 takes currently ca. 1 hour) + DFTs + manually export the data hundreds of times + combine all this into 1 plot. Is there maybe another way what I do not think of in this moment?)

     

    Also one other thing is now clear (For the other readers, here clearly stated): By sampling with 10 kHz an already sampled signal with 1 kHz, I get, as Frank correctly said, 10 times the same value, before it changes to the next one. That can be called a “Repeater”. And a “repeater” is mathematically identical, as far as I know, with zero stuffing ( = as you propose, set the other 9 identical values to 0) PLUS a comb filter of first order, so “(1+z^-1+z^-2 ... z^-9)^1”, which causes this sinc. behaviour. I will do this (need a bit of time to do properly).

    So I obviously INADVERTEDLY created an additional, 2nd sinc. filter by doing the repeater (the first one is already inside the “DUT”), killing my expected repeating spectrum at 1 kHz at the output. Things are getting much clearer now!

     

    However, what I also need to think about in more detail, is, when now looking quickly at once glance to the following: With the 2 times in series sinc. filter for e.g. (also?) circuit A), I would expect either:

    *) Because of my 2nd inadvertedly indroduced sinc filter by doing repeating upsampling, shouldn’t for case A) the blue curve be attenuated more than the green one from the PAC (see zoomed fig. below), or:

    *) The result from the Cadence “PAC sampled time averaged” (green) should exactly match the blue, if e.g. the “PAC sampled time average” does the same effect, so to also introduce a sinc (I don’t know what does “time average” exactly)

    Or maybe this ca. 3 dB difference (from -19.82 dB to -22.98) already close to "DFT fs/2" comes from another effect?

                           (Case A, zoomed)

     

    And then, why I see a constant line with ca. 0 dB for “PAC sampled edge ris. or fal.” (not shown in this graph)? Because 1x sinc. filter should still be present from the DUT, only the 2nd one from upsampling is gone when performing the internal Cadence “PAC sampled ris./fal. edge”, because this is doing, I learned from you “ideal Dirac sampling” which doesn't show sinc behaviour. You wrote “This is also the reason why you get a straight line at 0 dB if you do a sampled PAC analysis at the output of an ideal S&H (and the result of the normal PAC analysis is simply the sinc function in this case)”. But I solely did a “PAC sampled”, not a “normal PAC”, and I still can chose to either get a “sinc.” shape (with option “time averaged” or approx. a straight line (with option rising or falling edge). But BOTH are “PAC sampled” analysis (only sub-options to select). Or, as my question from previous, I may repeat: Is statement: “PAC sampled, time avg.” = “normal PAC”, true or false? So ???

    But one step after the other ...

     

    Anyway, 1000 thanks - Very nice, Frank, that you bring it to the point!!

    bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Frank Wiedmann
    Frank Wiedmann over 3 years ago in reply to bernd2700
    bernd2700 said:
    Is there maybe another way what I do not think of in this moment?

    There will be no problem with your approach if all input sources are in the same Nyquist zone, so you don't need one simulation per input frequency, just one per Nyquist zone. And of course this method will only work for a linear circuit.

    bernd2700 said:
    Or maybe this ca. 3 dB difference (from -19.82 dB to -22.98) already close to "DFT fs/2" comes from another effect?

    Without analyzing this in further detail, I would guess that it is the same effect that you see at fs/2 in this plot:

    Frank Wiedmann said:

    Here are the simulation results:

    bernd2700 said:
    And then, why I see a constant line with ca. 0 dB for “PAC sampled edge ris. or fal.” (not shown in this graph)?

    If you perform Dirac sampling at the output of an ideal S&H with the same sampling frequency, you will get exactly the same samples as if you perform Dirac sampling at the input of the ideal S&H.

    bernd2700 said:
    Or, as my question from previous, I may repeat: Is statement: “PAC sampled, time avg.” = “normal PAC”, true or false?

    True, as far as I know (Andrew, please correct me if I'm wrong).

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bernd2700
    bernd2700 over 3 years ago in reply to Frank Wiedmann

    Dear Frank ( & others),

     

    As said, thank you for pointing this out with the zero-stuffing. For all: Here is the proof, at least now for case B) : In the graphs below, the blue curve is the sampled data (with Cadence’s calculator “sample” command) with period = 100us (and thus the same values are repeated 10 times, because the period of the circuit’s switches is 1ms), and we do NOT see a DT spectrum. That is, because it was filtered away by the inherent comb filter which exists when doing repeating. If I do zero-stuffing (so as Frank proposed: set the other 9 values to 0) and thus only do “Ideal Dirac sampling”, I really get my expected DT response (red curve = symm. around the circuit’s fs/2 = 500 Hz, repeating pattern with 1 kHz)! As theory predicted, by subsequent comb-filtering the red curve, I finally get the magenta curve, which is again identical to the blue, q.e.d. .

    And if we compare this to the internal Cadence PAC (green and cyan), everything now fits nicely!

    It was a lot of work to come to this point, but everything definitely was worth it to do, and so: “Thanks Frank!” Without your help, I would not have been able to do all this completely alone by myself.

    Side info: You have to be careful with the things: DFT, zero-stuffing, comb-filtering, shifting, to do all this very properly (otherwise you easily can get sinc. behaviour at wrong frequencies, etc.). But also here is the advantage of doing this completely by oneself: You understand what's going on behind the scenes, because you know exactly what you did. (I cannot show all the details here, since it would explode the frame of this post, but at least this hint from my side.)

     

    I will now apply the same procedure for the other cases (for case A) and for the purely analog RC-LPF) and check, if finally everything fits to my expectation. 

     

    Many nice greetings so far,

    Bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bernd2700
    bernd2700 over 3 years ago in reply to bernd2700

    Dear Frank ( & others),

     

    As said, I did now the same game for test-case “A)”. And I like it! : My manually applied procedure also here is fitting pretty well to the internal Cadence PAC, as you can see below: The blue curve is the sampled data at fs_DFT = 10kHz with repeated 10x values, because the circuit’s “fs_S&H = 1kHz. The red curve is the zero-stuffed out of the blue, so “Ideal Dirac sampling” done and thus fits to the internal “Cadence PAC sampled: ris. or fal. edge”. The cyan is the comb-filtered red and thus perfectly fits to the blue again (as previously explained). And I think, the red line can be called a DT response (everywhere 0dB is thus also symm. around fs/2!)

    What fits perfectly at lower frequencies and deviates more and more apart as frequency is increasing, is the (blue or cyan) compared to the green PAC sampled, time averaged. Around 4.5 kHz, I get a difference of 3 dB (ca. -20 dB for the blue and cyan, and -23 dB for the green). But as you said, Frank, it might be the same what you were  showing, when going close to DFT fs/2 = 5 kHz, and things would maybe resolve, if I do the game with fs_DFT sampling up to 100 kHz and thus getting the spectrum up to 50 kHz, instead of only up to 5 kHz. (Then, the transient sim. would be probably very long, so I did not do it. However what I quickly did, is to do a PAC only until 10 kHz (thus showing a spectrum until 5 kHz), but it is exactly the green curve, just plotted until 5 kHz.)

                                                          (click to enlarge)

    --------

    For my curiosity, I now input instead of a MT, only exactly 1 tone, namely with ca. 4559 Hz, and the result is:

    Here, everything sounds logical: I get alias components at fs – fin = 5 kHz – ca. 4559 Hz = ca. 441 Hz, and all its replica. As it should be now, exactly as the Cadence PAC does, only 1 input tone, I was expecting to see at 4559 Hz also this -23 dB. But instead, I see -20.07 dB.

    I also now tried to look what the PAC does. As you proposed, I take the output from the transient analysis with only that input tone of ca. 4559 Hz (in steady state condition, so close at the end of the sim. at 104.8 s) and again do “(max-min)/2” from the values. As we also see at one glance, I roughly get this 0 dB (exactly being: 20*log10(1.9556/2) = -0.19 dB), as the PAC sampled: ris. / fal. edge delivers (the straight line at 0 dB). But how does the PAC sampled, option “time averaged” work here? What to measure to get the -23 dB instead? For sure, there is also a way, but how?

    Thanks,

    bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Frank Wiedmann
    Frank Wiedmann over 3 years ago in reply to bernd2700
    bernd2700 said:
    But as you said, Frank, it might be the same what you were  showing, when going close to DFT fs/2 = 5 kHz, and things would maybe resolve, if I do the game with fs_DFT sampling up to 100 kHz and thus getting the spectrum up to 50 kHz, instead of only up to 5 kHz. (Then, the transient sim. would be probably very long, so I did not do it.

    I don't think that you actually need to run the simulation. Just modify your sampled signal so that you now have 100 identical samples instead of 10 indentical samples in a row.

    bernd2700 said:
    But how does the PAC sampled, option “time averaged” work here?

    This is just the nomal PAC analysis without any sampling, so you simply need to run an FFT on the output signal in order to get the result in the frequency domain.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bernd2700
    bernd2700 over 3 years ago in reply to Frank Wiedmann

    Dear Frank,

     

    In principle, a good idea to do every 100th sample, but I think it will not work, as I really do not produce input tones above 5 kHz, and so my AC analysis will divide then just mathematical “noise”. Moreover, I think if I set just the parameter “fs = 100 kHz”, all the frequency vectors with the real injected sinusoids will get misaligned then (or if I increase all by factor 10, everything is just shifted by factor 10, or… ).

    --------------

    What is much more important, is:

    The following procedure EVERYTIME perfectly (almost) fits to the Cadence PAC sampled, time averaged analysis: Generate multi-sinusoids, then run a tran. analysis of the DUT, then sample the transient data (calc. command “sample”), then doing the DFTs and divide output/input. So this is my blue curve. And, I think I can summarize and state with confidence now:

     

         [ My manual MT AC analysis over the 2 DFTs ( = blue curve) ] matches [ PAC sampled, time averaged ]

     

    --------------

    However, what did only work out for test-case “A)” and B), is: By further manually doing zero-stuffing out of the blue curve, and so doing “Ideal Dirac sampling”, this (my red curves) then fits to the “Cadence PAC sampled, e.g. rising edge”, because:

    --------------

    I now tried to apply the same procedure - as completely successfully done with test-case “A)” and B) - also now for the purely analog RC-LPF circuit, and it does not fit to the PAC sampled, e.g. rising edge. The results can be seen in below graph:

    My blue curve again fits perfectly to the Cadence PAC sampled (green), e.g. time-averaged option. But this time, all options of PAC sampled produce the very same result: “rising edge”, “falling edge”, “time averaged”.

    And so, by blindly applying the same procedure again as done with the previous test cases A and B, (Sampling, DFTs, then zero-stuffing, then comb filtering), this time I get garbage (red and cyan), because the circuit this time does NOT have an (inherent) ZOH at its output where the data is repeated 10 times the same value.

    --------------

    My problem now is: I of course cannot include “switch - case” statements in my analysis, depending on a circuit! A la: If there is a ZOH-like-thing in the circuit, then the red line will fit to PAC sampled rising edge; if not, the blue curve already will fit to PAC sampled rising edge. The analysis itself is stupid and cannot know the circuit (and the circuit’s fs), and thus, the procedure has to work for EVERY circuit analyzed with it, as the Cadence PAC does!

     

    => So what can I do about that I not only get a more or less perfect matching to the “PAC sampled, time avg. option” with my own analysis, but also for the “PAC sampled, ris. or fal. edge option”, regardless of the DUT I have?

     

    Pleeeeeeaaase, give me an advice.

     

    Thanks a lot,

    bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information