Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

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

Status
Not open for further replies.

pavel47

Member level 4
Joined
Nov 8, 2005
Messages
68
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,286
Location
Switzerland
Activity points
1,790
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
 

Attachments

  • Sample_and_Hold_test.zip
    18.4 KB · Views: 112

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.
 

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.
 

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.
 

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
 

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.
 

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
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top