Troubles in simulating sharp edges

Started by Peter Mairhofer November 17, 2017
Hi,

I am fighting this problem for two days now: I want to simulate a
passive mixer (50% and 25% Duty Cycle) which is basically a switch and
hence can be modeled by multiplying the input with a rectangular
waveform (or less harmonics).

Suppose I have a clean sinusoidal LO x0 = sin(2*pi*100MHz*t).

If I have sign(x0) (or alternatively Zero-Order-Hold with 2 samples per
period) then I get a rectangular waveform containing all odd-order
harmonics (3rd, 5th, 7th, ...).

Now if I do Zero-Order-Hold with 4 samples per period, theory tells me I
should get rid of the 3rd harmonic, i.e. I should have 1st, 5th, 9th, ...

Now consider this sinple simulation setup: https://snag.gy/5YpQ8X.jpg
with the expected time domain outputs: https://snag.gy/MRkcNi.jpg

However, if I take the FFT of it, it can be clearly seen that BOTH
out0/out1 contain all the harmonics (including 3rd):
https://snag.gy/q7mMt0.jpg

How is that possible?

* I tried increasing the sampling ratio and number of periods. No changes
* I tried adding steep Butterworth filter (and getting rid of the
transoients) because I thought it's because of implicit harmonic folding
when sampling. No change
* I tried fixed and variable step solvers in Simulink (always sampling
the output signals 1000x higher) with arbitrary accuracy. No change.

Thanks,
Peter











On 17.11.17 20.54, Peter Mairhofer wrote:
> I am fighting this problem for two days now: I want to simulate a > passive mixer (50% and 25% Duty Cycle) which is basically a switch and > hence can be modeled by multiplying the input with a rectangular > waveform (or less harmonics). > > Suppose I have a clean sinusoidal LO x0 = sin(2*pi*100MHz*t). > > If I have sign(x0) (or alternatively Zero-Order-Hold with 2 samples per > period) then I get a rectangular waveform containing all odd-order > harmonics (3rd, 5th, 7th, ...). > > Now if I do Zero-Order-Hold with 4 samples per period, theory tells me I > should get rid of the 3rd harmonic, i.e. I should have 1st, 5th, 9th, ... > > Now consider this sinple simulation setup: https://snag.gy/5YpQ8X.jpg > with the expected time domain outputs: https://snag.gy/MRkcNi.jpg > > However, if I take the FFT of it, it can be clearly seen that BOTH > out0/out1 contain all the harmonics (including 3rd): > https://snag.gy/q7mMt0.jpg > > How is that possible?
You are missing the reconstruction filter. Using a sample and hold function puts many rectangular shapes into your wave from. They have many harmonics. Marcel
Marcel Mueller  <news.5.maazl@spamgourmet.org> wrote:

>> However, if I take the FFT of it, it can be clearly seen that BOTH >> out0/out1 contain all the harmonics (including 3rd): >> https://snag.gy/q7mMt0.jpg
>> How is that possible?
>You are missing the reconstruction filter. >Using a sample and hold function puts many rectangular shapes into your >wave from. They have many harmonics.
Equivalently, an FFT is not a spectral estimate it is a transform. You need a window/filter to get a meaningful spectrum... lots of discussions on computing power spectral density here in the past. Steve
>On 17.11.17 20.54, Peter Mairhofer wrote: >> I am fighting this problem for two days now: I want to simulate a >> passive mixer (50% and 25% Duty Cycle) which is basically a switch and >> hence can be modeled by multiplying the input with a rectangular >> waveform (or less harmonics). >> >> Suppose I have a clean sinusoidal LO x0 = sin(2*pi*100MHz*t). >> >> If I have sign(x0) (or alternatively Zero-Order-Hold with 2 samples
per
>> period) then I get a rectangular waveform containing all odd-order >> harmonics (3rd, 5th, 7th, ...). >> >> Now if I do Zero-Order-Hold with 4 samples per period, theory tells me
I
>> should get rid of the 3rd harmonic, i.e. I should have 1st, 5th, 9th,
...
>> >> Now consider this sinple simulation setup: https://snag.gy/5YpQ8X.jpg >> with the expected time domain outputs: https://snag.gy/MRkcNi.jpg >> >> However, if I take the FFT of it, it can be clearly seen that BOTH >> out0/out1 contain all the harmonics (including 3rd): >> https://snag.gy/q7mMt0.jpg >> >> How is that possible? > >You are missing the reconstruction filter. >Using a sample and hold function puts many rectangular shapes into your >wave from. They have many harmonics.
No. Unfortunately not. Re-quoting from my original post:
> * I tried adding steep Butterworth filter (and getting rid of the > transoients) because I thought it's because of implicit harmonic
folding
> when sampling. No change
Again, the time-domain and frequency domain plots for this case: https://snag.gy/DvNVkd.jpg https://snag.gy/RfOpkP.jpg Now I also provide the waveforms: https://www.dropbox.com/s/i8y89lvkq3i97kt/data.mat?dl=0 And the DFT code: N1 = 15; N2 = 25; O0 = fft(out0(N1*1000+1:N2*1000))+eps; O1 = fft(out1(N1*1000+1:N2*1000))+eps; O2 = fft(out2(N1*1000+1:N2*1000))+eps; f = linspace(0, 100e6*1000, length(O0)); plot(f, dB20([ O0 , O1 , O2 ])); Thanks. --------------------------------------- Posted through http://www.DSPRelated.com
>Marcel Mueller <news.5.maazl@spamgourmet.org> wrote: > >>> However, if I take the FFT of it, it can be clearly seen that BOTH >>> out0/out1 contain all the harmonics (including 3rd): >>> https://snag.gy/q7mMt0.jpg > >>> How is that possible? > >>You are missing the reconstruction filter. >>Using a sample and hold function puts many rectangular shapes into your
>>wave from. They have many harmonics.
As replied above: No, I added the filter:
> * I tried adding steep Butterworth filter (and getting rid of the > transoients) because I thought it's because of implicit harmonic
folding
> when sampling. No change
I actually tried all different kinds of filters.
>Equivalently, an FFT is not a spectral estimate it is a transform. >You need a window/filter to get a meaningful spectrum... lots of >discussions on computing power spectral density here in the past.
I do not even want a spectral estimate - I want the transform. Hence I excercise much care that I take an exact even number of cycles and when using the filter to skip initial transient. The transform also tells me that the third coefficient has to be zero. Using a circuit simulator (Cadence spectre) to do the same thing, the result is as expected: Third harmonic zero. With spectre I also use the DFT, in the same way. It only shows up if I want to simulate the same thing in Simulink (or MATLAB using zero-order-hold upsampling). --------------------------------------- Posted through http://www.DSPRelated.com
Is your y-axis in the FFT in dB ?

If so you have like a 300 dB attenuation between the first and the 3rd harmonic,
basically no 3rd harmonic...