跳轉到內容

MATLAB 程式設計/伯德圖

來自華夏公益教科書,開放的書籍,用於開放的世界

本文介紹了在 MATLAB 中建立伯德圖的主題。簡而言之,使用 bode 命令。但是,bode 命令有幾個選項,並且由 bode 命令生成的圖難以重新格式化。大多數 MATLAB 圖的預設格式對於分析來說很好,但對於插入 Word 和 PowerPoint 文件甚至本網站來說不太理想。因此,本文介紹了一種替代方法,它需要更多程式碼行,但提供通用 plot 命令的完全格式化靈活性。

MATLAB 的 Bode 命令

[編輯 | 編輯原始碼]

基本的 bode 命令如下

>> bode(LTI_SYS)

其中

  • LTI_SYS 是一個 LTI 物件 - TFSSZPKFRD

bode 命令將自動呼叫 gcf,它將把伯德圖放在當前的 figure 上。如果不存在 figure,則 gcf 會建立一個。

如果您想指定繪製 LTI_SYS 的頻率點,則使用 logspacelinspace 建立一個頻率向量,如下所示

>> freqVec = logspace(-1, 3, 5000);
>> bode(LTI_SYS, freqVec * (2*pi))

其中

  • freqVec 是一個包含 5000 個頻率的向量,以赫茲為單位,在對數刻度上從 10-1 到 103 均勻間隔
  • pi 是一個 MATLAB 常量,等於 的值,在本例中,它用於將 freqVec 轉換為 rad/sec,因為它被傳遞給 bode 命令

為了獲得每個頻率點的幅度和相位,bode 命令必須使用輸出引數呼叫,例如

>> [mag, phase] = bode(LTI_SYS);

或者

>> [mag, phase] = bode(LTI_SYS, freqVec * (2*pi));

其中

  • mag 是每個 freqVec 點的幅度(不是以 dB 為單位)
  • phase 是每個 freqVec 點的相位(以度為單位)

mag 和 phase 變數必須作為 3D 陣列出現。假設 LTI_SYS 是 SISO,則以下命令將 mag 和 phase 轉換為您預期的向量

>> mag = mag(:);
>> phase = phase(:);
>> mag = db(mag);                % to get the magnitude in 20log dB

bode 命令的問題

[編輯 | 編輯原始碼]

bode 命令的主要問題是圖的重新格式化。bode 命令似乎使用了一個普通的 semilogx 圖,然後對 figure 應用補丁或類似的東西。這會導致在嘗試建立多行標題、重新格式化線寬或字型大小等時出現奇怪的行為。軸與 figure 的正常關係並不完全存在。

[編輯 | 編輯原始碼]
華夏公益教科書