How to change the default x-axis unit in a Bode diagram to Hertz?

581 ビュー (過去 30 日間)
marcel hendrix
marcel hendrix 2018 年 9 月 22 日
コメント済み: Paul 2025 年 1 月 6 日
Rad/s is nice for mechanical people, but I'm an EE, and I much prefer Hertz. It should be something simple, but I can't find it in the help.
  2 件のコメント
dpb
dpb 2018 年 9 月 22 日
Don't believe there is a way in the base routine; it's built entirely around rad/timeunits per the system object.
You could write a wrapper routine to convert frequency units and update the plot labels.
Chris
Chris 2025 年 1 月 4 日
Actually you can, click on the plot tab from linearization manager, click plot properties, click units. Change to whatever units you need.

サインインしてコメントする。

採用された回答

Star Strider
Star Strider 2018 年 9 月 22 日
Use bodeplot (link) instead of bode.
It gives you that option, and the documentation specifically mentions that.
  4 件のコメント
marcel hendrix
marcel hendrix 2018 年 9 月 22 日
I've put the below function in my userpath . It'll do for now.
% a new bode() command that has Hz as default
function h = bodef(x)
P = bodeoptions; P.FreqUnits = 'Hz';
h = bodeplot(x,P);
Star Strider
Star Strider 2018 年 9 月 22 日
編集済み: Star Strider 2018 年 9 月 22 日
That is what I would do.
I defer to bodeplot because it allows some customization. I use and plot the bode outputs only if I want other options.
EDIT
I add that this was my original recommendation!

サインインしてコメントする。

その他の回答 (3 件)

Tjeerd Ickenroth
Tjeerd Ickenroth 2023 年 5 月 31 日
Type 'ltiview' in your command window. The Linear System Analyzer will pop up. Click on: File --> Toolbox Preferences... --> Units --> Frequency: Hz
  3 件のコメント
Tjeerd Ickenroth
Tjeerd Ickenroth 2023 年 5 月 31 日
You need to change it once in the GUI and you always obtain bode plots in Hz. The setting remains even when you restart Matlab.
marcel hendrix
marcel hendrix 2023 年 5 月 31 日
And what when I share my function/script with others? Or use different (older) versions of MATLAB?

サインインしてコメントする。


Dimitris Kalogiros
Dimitris Kalogiros 2018 年 9 月 22 日
clc;close all; clc
% test system
s=tf('s');
H=(s-1)/((s-3)*(s-2))
% bode
[mag,phase,wout] = bode(H);
%plot results, with frequency expressed at Hz
figure;
subplot(2,1,1);
semilogx(wout(:,1)/(2*pi), 20*log10(squeeze(mag)), '-b'); zoom on; grid on;
title('magnitude'); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)');
subplot(2,1,2);
semilogx(wout(:,1)/(2*pi), squeeze(phase), '-r'); zoom on; grid on;
title('Phase'); xlabel('Frequecy (Hz)'); ylabel('Phase (deg)');
  2 件のコメント
Charl
Charl 2024 年 3 月 15 日
編集済み: Charl 2024 年 3 月 15 日
This is the correct answer. Some of the others simply change the label to Hz without rescaling.
Meth Hai
Meth Hai 2024 年 7 月 15 日
%%% G1 & and G2 is your TFs
[mag1, phase1, wout1] = bode(G1);
[mag2, phase2, wout2] = bode(G2);
% Convert angular frequency (rad/s) to frequency (Hz)
freq1 = wout1 / (2 * pi);
freq2 = wout2 / (2 * pi);
% Plot the magnitude response
figure;
subplot(2,1,1);
semilogx(freq1, 20*log10(squeeze(mag1)), '-b');
hold on;
semilogx(freq2, 20*log10(squeeze(mag2)), '-g');
grid on;
title('Magnitude');
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
legend('G1', 'G2');
%%%%%%%%%%%%
% Plot the phase response
subplot(2,1,2);
semilogx(freq1, squeeze(phase1), '-r');
hold on;
semilogx(freq2, squeeze(phase2), '-m');
grid on;
title('Phase');
xlabel('Frequency (Hz)');
ylabel('Phase (deg)');
legend('G1', 'G2');

サインインしてコメントする。


Paul
Paul 2025 年 1 月 5 日
ctrlpref allows one to change the default units for frequency axis when plotting with bode and bodeplot (among other defaults in the Control System Toolbox). As far as I know, this preference only affects the plot, it doesn't affect the the third output from bode if using output arguments.
  4 件のコメント
marcel hendrix
marcel hendrix 2025 年 1 月 5 日
This is fine, but I wanted thet getter/setters to make sure that my programs work as intended when I share the file with somebody else, or when I work on a different machine in a different location under a different account. I am not a fan of storing everything in the cloud on potentially hostile servers, so I'd like to store these things explicitly in the code. The features I mentioned would help help in (re)setting the environment, which is always a huge hassle.
Paul
Paul 2025 年 1 月 6 日
Some things can be controlled programatically via settings. See Access and Modify Settings. Unfortunately, these don't cover the Control System Toolbox (why not?). As far as I know, the only way to deal with the CST is via ctrlpref, for which there is no programmatic interface (why not?), as far as I know. Those CST preferences are saved to disk somewhere somehow, so it might be possible copy them from one machine to another. You may want to open up a new question on this topic.
s = settings
s =
SettingsGroup with properties: drivingscenario: [1x1 SettingsGroup] matlab: [1x1 SettingsGroup] kits_common: [1x1 SettingsGroup] Simulink: [1x1 SettingsGroup] database: [1x1 SettingsGroup] roadrunner: [1x1 SettingsGroup] driving: [1x1 SettingsGroup] comparisons: [1x1 SettingsGroup] parallel: [1x1 SettingsGroup]

サインインしてコメントする。

カテゴリ

Help Center および File ExchangePlot Customization についてさらに検索

製品


リリース

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by