# Why doesn't magnitude plot from simulated output match my transfer function's expected bode plot?

16 views (last 30 days)

Show older comments

Hi all,

I have a transfer function. I can create its bode plot. I should be able to reproduce this plot by averaging the frequency-converted time-response from many simulations of the system. However, when I do so, the results don't match up.

My code is given below. I create transfer function object, get its bode plot, and then run simulations with random input data in an attempt to reproduce the bode plot. Any idea why this isn't working?

Thanks!

Code:

sys=tf([.073 0 0 0], [1 357/250 259899/250000 71393/2500000 39993/100000000 1407/500000000 1/100000000]);

% Bode Plot (Magnitude)

figure(1);

bodemag(sys);

axis([.001 10 -140 20])

% Simulation parameters

fs = 100; % Sampling frequency (Hz)

L = fs*1000; % Number of samples

t = 0: 1/fs : 1000-1/fs; % time vector

f = 0 : fs/L : fs/2; % frequency range

avg_out = zeros(L/2+1,1); % intialize avg output

avg_in = zeros(L/2+1,1); % intialize avg input

% Run 1000 simulations and take the average results

for i = 1:100

% Simulation

input = randn(L, 1); % random input

[y,t] = lsim(sys, input, t); % time-response

% Output

Y = abs(fft(y))/L; % FFT and scale

avg_out = avg_out + mag2db(4*Y(1:end/2+1)); % convert to dB, accumulate

end

avg_in = avg_in / i; % compute average input

avg_out = avg_out / i; % compute average output

% Plot avg output

figure(4); semilogx(f,avg_out);

axis([.001 10 -140 20])

title('Average Frequency Response')

xlabel('Frequency (Hz)')

ylabel('Magnitude (dB)')

### Accepted Answer

Arkadiy Turevskiy
on 25 Mar 2014

##### 2 Comments

Arkadiy Turevskiy
on 25 Mar 2014

### More Answers (0)

### See Also

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!