+ Post New Thread
Results 1 to 7 of 7
  1. #1
    Member level 4
    Points: 2,320, Level: 11

    Join Date
    Nov 2005
    Location
    Switzerland
    Posts
    68
    Helped
    0 / 0
    Points
    2,320
    Level
    11

    How to simulate in Simulink the FFT of "Sample-and-Hold"

    Hello,

    I've met difficulties while trying to simulate sinusoidal waveform passed through "Sample-and-Hold" module.
    On the snapshot below my model. When I run simulation, the error occurs:
    Error in 'Sample_and_Hold_test/Buffer': All sample times must be discrete. No continuous or constant sample times are allowed
    "Sample-and-Hold" block outputs continuous signal, but "Buffer" requires discrete one.
    How to proceed ?
    Thanks in advance.
    P.S. Model is in attachment.


    sample_and_hold_simulation_simulink.jpg

    •   Alt13th November 2016, 19:09

      advertising

        
       

  2. #2
    Super Moderator
    Points: 21,745, Level: 35
    andre_teprom's Avatar
    Join Date
    Nov 2006
    Location
    Rio de Janeiro, Brazil
    Posts
    6,661
    Helped
    809 / 809
    Points
    21,745
    Level
    35
    Blog Entries
    5

    Re: How to simulate in Simulink the FFT of "Sample-and-Hold"

    I had a similar issue some time ago, and I solved by replacing all the blocks before S/H ( including itself ) by a discrete input, more precisely an array of discrete values. The reason behind this error seems like the DSP blocks are generating discrete outputs, but in the continuous domain.
    --------------------------------------------------------------------------------------------------
    Part of the world that you live in, You are the part that you're giving ( Renaissance )



  3. #3
    Member level 4
    Points: 2,320, Level: 11

    Join Date
    Nov 2005
    Location
    Switzerland
    Posts
    68
    Helped
    0 / 0
    Points
    2,320
    Level
    11

    Re: How to simulate in Simulink the FFT of "Sample-and-Hold"

    Can you, please, attach some screenshot ... frankly speaking I didn't properly understood what you mean.
    Thanks.



    •   Alt13th November 2016, 20:41

      advertising

        
       

  4. #4
    Super Moderator
    Points: 21,745, Level: 35
    andre_teprom's Avatar
    Join Date
    Nov 2006
    Location
    Rio de Janeiro, Brazil
    Posts
    6,661
    Helped
    809 / 809
    Points
    21,745
    Level
    35
    Blog Entries
    5

    Re: How to simulate in Simulink the FFT of "Sample-and-Hold"

    There should be better alternatives to fix that issue, but the only one I see based on my previous experiments, could be by replacing all the stuffs before S/H blocks by an 1-D vector, in you case with the length of 4096 values. Don't know exactly what function could do that, but discretizer is the first one which come to mind.
    --------------------------------------------------------------------------------------------------
    Part of the world that you live in, You are the part that you're giving ( Renaissance )



  5. #5
    Member level 4
    Points: 2,320, Level: 11

    Join Date
    Nov 2005
    Location
    Switzerland
    Posts
    68
    Helped
    0 / 0
    Points
    2,320
    Level
    11

    Re: How to simulate in Simulink the FFT of "Sample-and-Hold"

    Quote Originally Posted by andre_teprom View Post
    There should be better alternatives to fix that issue, but the only one I see based on my previous experiments, could be by replacing all the stuffs before S/H blocks by an 1-D vector, in you case with the length of 4096 values. Don't know exactly what function could do that, but discretizer is the first one which come to mind.
    Yes, it would be a solution ... i.e. transform the train of continuous values into 1-D vector in order to apply it to FFT, but unfortunately I didn't find any Simulink block capable to do it.
    I turned my attention to "Zero-Order Hold" from Simulink "Discrete" library and also modified sinusoidal waveform output type from Discrete to Continuous.

    This way "Zero-Order Hold" can be considered as "sampler".
    Indeed it is the case - after "Zero-Order Hold" I can place "Buffer" and simulation runs, i.e. no error is generated.

    Then I returned to my original task - simulate "Sample-and-Hold" behavior and its impact on incoming signal.
    According to textbook (please see screenshot below), the "Sample-and-Hold" acts as filter having a characteristic sinc(x).
    So if I apply, let say, 3 sinusoidal waveforms to such "Sample-and-Hold", it should filter out frequencies that close to Nyquist frequency.
    But in my setup it doesn't ... all 3 sinusoidal waveforms manifest the same levels at the output of "Sample-and-Hold".
    In correct simulation output of Sin_f3 < output of Sin_f2 < output of Sin_f1.

    So, the conclusion is: "Zero-Order Hold" cant transform continuous signal into discrete , but can't "emulate" real "Sample-and-Hold"

    So, the problem apparently quite simple ... persists.

    sample_and_hold_from_book.jpg
    sample_and_hold_simulation_simulink-4-.jpg



  6. #6
    Super Moderator
    Points: 21,745, Level: 35
    andre_teprom's Avatar
    Join Date
    Nov 2006
    Location
    Rio de Janeiro, Brazil
    Posts
    6,661
    Helped
    809 / 809
    Points
    21,745
    Level
    35
    Blog Entries
    5

    Re: How to simulate in Simulink the FFT of "Sample-and-Hold"

    Perhaps the Lookup Tables Block Library could make the job. There is already a 1-D Sin generator function there. According to the initial picture, this is exactly what you want to sample.
    --------------------------------------------------------------------------------------------------
    Part of the world that you live in, You are the part that you're giving ( Renaissance )



    •   Alt14th November 2016, 13:20

      advertising

        
       

  7. #7
    Member level 4
    Points: 2,320, Level: 11

    Join Date
    Nov 2005
    Location
    Switzerland
    Posts
    68
    Helped
    0 / 0
    Points
    2,320
    Level
    11

    Re: How to simulate in Simulink the FFT of "Sample-and-Hold"

    I've just tried your suggestion (at least as I understood it).
    Unfortunately doesn't work ... well it works, but as in previous case "Sample-and-Hold" block doesn't manifest any filtering action ... i.e. the power level upon FFT doesn't change when input frequency changes.
    Here below the results of 2 simulations:
    • f1 = 233Hz
    • f1 = 27133Hz

    As you can see both have the same level, whereas the FFT output of 27133Hz must be much lower than 233Hz.

    Fig.1 Model
    sine_lookuptable_simulation_setup.jpg

    Fig.2 Simulation with f1 = 233Hz
    sine_lookuptable_simulation_f1_233hz.jpg

    Fig.3 Simulation with f1 = 27133Hz
    sine_lookuptable_simulation_f1_27133hz.jpg



+ Post New Thread
Please login
--[[ ]]--