Apostolos Fanakis
6 years ago
2 changed files with 44 additions and 0 deletions
@ -0,0 +1,44 @@ |
|||
function plot_transfer_function( tf, frequency_markers ) |
|||
%PLOT_TRANSFER_FUNCTION Plots bode of a transfer function with markers |
|||
% |
|||
% tf - The transfer function (created using tf) |
|||
% frequency_markers - A matrix of frequencies in Hz |
|||
% |
|||
% Example: |
|||
% plot_transfer_function( tf([1000], [1 1000]), [10 1000 10000] ); |
|||
|
|||
figure; |
|||
x_space = logspace(1,5,1000); % 1000 points between 10^1 and 10^5 |
|||
x_space = 2 * pi * x_space; % to rad / sec |
|||
[mag,~,wout] = bode(tf,x_space); |
|||
mag = squeeze(mag); |
|||
wout = squeeze(wout); |
|||
mag = 20*log10(mag); |
|||
wout = wout/2/pi; |
|||
semilogx(wout,mag,'-b'); |
|||
axis([min(wout) max(wout) min(mag)-10 max(mag)+10]); |
|||
[num,den] = tfdata(tf); |
|||
syms s; |
|||
d1 = digits(5); |
|||
ltx = latex(vpa(poly2sym(cell2mat(num),s)/poly2sym(cell2mat(den),s))); |
|||
digits(d1); |
|||
title(strcat('$',ltx,'$'), 'Interpreter','latex', 'FontSize', 24); |
|||
xlabel('Frequency (Hz)', 'FontSize', 18); |
|||
ylabel('Magnitude (dB)', 'FontSize', 18); |
|||
grid on; |
|||
hold on; |
|||
[dbMarks,~,frequency_markers] = bode(tf,2 * pi * frequency_markers); |
|||
dbMarks = squeeze(dbMarks); |
|||
frequency_markers = squeeze(frequency_markers); |
|||
dbMarks = 20*log10(dbMarks); |
|||
frequency_markers = frequency_markers/2/pi; |
|||
Aw = cell(size(frequency_markers, 1) + 1, 1); |
|||
Aw{1} = 'Transfer function'; |
|||
for i = 1 : size(frequency_markers, 1) |
|||
semilogx(frequency_markers(i),dbMarks(i),'o'); |
|||
Aw{i+1} = sprintf('Attenuation at %.2f Hz is %.2f dB', ... |
|||
frequency_markers(i), dbMarks(i)); |
|||
end |
|||
legend(Aw,'Location','best','FontSize',12); |
|||
set(gca,'FontSize',14); |
|||
end |
Loading…
Reference in new issue