2013-10-19 36 views
4

我已經獲得了系統的波特圖。該系統似乎有一個非常複雜的幅度和相位圖。無法手動找到傳輸功能。在Matlab中有沒有一種方法可以從幅度和相位數據中找到傳遞函數?在matlab中查找波特圖的傳遞函數

這裏是我的代碼:

%%FFT method for finding Transfer Function 
load testdata2.mat; 
input = fft(signal(:,1)); 
% FFT of input data 
output = fft(signal(:,2)); 
% FFT of output data 
fft_ratio = output ./ input; 

subplot(2,1,1) 

%Magnitude 
semilogx(20*log10(abs(fft_ratio))) 

subplot(2,1,2) 

%Phase 
semilogx((180/pi)*angle(fft_ratio)) 
mag = 20*log10(abs(fft_ratio)); 
phase = (180/pi)*angle(fft_ratio); 

Here's my data.

+0

你是如何獲得沒有傳遞函數的波特圖的?你可以添加一些示例代碼? – ishmael

+1

波德圖是沒有別的,然後是頻率的幅度。因此,您可以使用[tfest](http://www.mathworks.co.uk/help/ident/ref/tfest.html#inputarg_data)和[頻率響應對象](http://www.mathworks.co。 uk/help/ident/ref/idfrd.html) - 如果你仍然有問題,你需要提供你的數據。 – thewaywewalk

+0

這裏是我的代碼:尋找傳遞函數的%% FFT方法 load testdata2.mat; input = fft(signal(:,1));輸入數據的%FFT output = fft(signal(:,2));輸出數據的%FFT fft_ratio =輸出./輸入; 副區(2,1,1) %幅值圖 semilogx(20 *日誌10(ABS(fft_ratio))) 副區(2,1,2) %相情節 semilogx((180/PI)*角( fft_ratio)) mag = 20 * log10(abs(fft_ratio)); phase =(180/pi)* angle(fft_ratio)下面是我的數據:(http://www.fileconvoy.com/dfl.php?id=g84ba16b5278fbf059993953737f2412b28c0b41ba) –

回答

0

我不這麼認爲,這不是Matlab的錯。這個問題在數學上是非平凡的,因爲傳遞函數的極點和零點可能處於大的假想頻率。這些可能不會顯着影響波德圖,但你會如何排除它們的存在?

我認爲你最好的選擇是將波德圖擬合成一個合理的傳遞函數,並且只是在傳遞函數中不斷增加極點和零點的數量,直到得到可接受的一致爲止。