<source:控制器設計與應用 from 曾傳蘆老師>

 一、解題步驟

(一)、撰寫 Notch Filter 的 function 檔案

1.設定頻率範圍

在最小值與最大值間,每個 0.1 rad/sec取1個點,在matlab中表示如下:
>> w = wmin:0.1:wmax

2.計算s = jw

如題意,s = j * w。在 matlab 中,以 j 和 i 表示虛數,sqrt()為開根號的指令,因此在 matlab 中用 sqrt(-1) 表示 j。s = jw  在matlab中表示如下:

>> s = sqrt(-1) * w


3.計算 f(s) 

因為 s 是向量,向量中的元素計算要使用 "點運算",因此  f(s) 在matlab中表示如下:

>> f = (s .^ 2 + w0 ^ 2) ./ (s .^ 2 + wc * s + w0 ^2)


4.計算振幅

Mag = abs(f)

mg = 20 * log10(Mag)


5.計算相位

ph = angle(f) * 180 / pi


(二)、撰寫主程式呼叫 Notch Filter 的 Function 並繪圖

w0為中心抑制頻率,值為50。

wc為頻寬,


二、範例程式

Notch Filter Function

function [mg, ph] = notch(w0, wc, wmin, wmax)
%w0為中心抑制頻率、wc為頻寬
  w = wmin:0.1:wmax; %設定頻率範圍,每隔0.1取一個點
  s = sqrt(-1) * w; % j 為虛數,故以sqrt(-1)表示
  f = (s.^2 + w0^2) ./ (s.^2 + wc*s + w0^2); 
  %s是向量,所以向量中的元素用點運算
  Mag = abs(f);
  mg = 20*log10(Mag);
  ph = angle(f) * 180 / pi;
end

---

Main程式 (test)



clear

wmin = 10;

wmax = 300;

wc = 1:5;

w0 = 50;

for i = 1:5

    [m(i,:), p(i,:)] = notch(w0, wc(i), wmin, wmax);

end


subplot(2,1,1)

semilogx(wmin:0.1:wmax, m) %x軸為對數刻度,y軸為線性刻度

axis([-inf, inf, -inf, inf]) %取x, y軸的最大與最小值

xlabel('\omega (rad/sec)') %x軸的名稱

ylabel('振幅(分貝,dB)') %y軸的名稱

title('Frequence Response of Notch Filter') %圖表名稱

legend('\omega_c=1', '\omega_c=2','\omega_c=3','\omega_c=4',...

    '\omega_c=5')

grid on %顯示格線

subplot(2,1,2)

semilogx(wmin:0.1:wmax, p) %x軸為對數刻度,y軸為線性刻度

axis([-inf, inf, -inf, inf]) %取x, y軸的最大與最小值

xlabel('\omega (rad/sec)') %x軸的名稱

ylabel('相位(角度,^{o})') %上標顯示,使用^

legend('\omega_c=1', '\omega_c=2','\omega_c=3','\omega_c=4',...

    '\omega_c=5') %下標顯示,使用_。

grid on %顯示格線


---

參考資料:


#notch_filter 

0 留言