2014-01-05 5 views
2

나는 밴드 패스 필터에 대한 전달 함수 [H (f)]에 대한 그래프를 그리기위한 스크립트를 작성하고 싶다. | H (f) | 주파수 및 H (f) (위상) 주파수에 대해, 아주 새로운 MATLAB 그래서 구문이 100 %가 아니므로, 모든 것이 자동으로 행렬 형태로 포맷되기 때문에 혼란스러워지고 있습니다. ,Matlab에서 대역 통과 필터의 전달 함수에 대한 주파수 응답을 플로팅하는 방법은 무엇입니까?

% RCL circuit: band-pass filter 
R=55590; L=0.9571; C=48.811*10.^(-9);  % values of the Resistor and Capacitor 
f=(0:60e3); w=2*pi*f;      % frequency (f) range of measurements 
H=(R./(sqrt(R^2+(w*L-(1./(w*C))).^2))); % Transfer Function 

% Magnitude (absolute value) of the transfer function 
plot(f,abs(H),'LineWidth',2); grid on; hold on 
xlabel('Frequency [Hz]','FontSize',20); ylabel('|H(f)|','FontSize',20) 

도면이 전달 함수 식 메신저 enter image description here

를 사용

plot(f,angle(H)*180/pi,'LineWidth',2); grid on; hold on 
xlabel('Frequency [Hz]','FontSize',18); 
ylabel('phase of H(f) [degrees]','FontSize',20) 

아래 내 실험의 결과는 어떤 다른 그림과 예상 그래프이다 아래 내 스크립트 나는 왜 내가 원하는 것을 플로팅하지 않는지 MATLAB이 이해하지 못한다. enter image description here

+0

따라서 H를 계산하고 절대 값 대 주파수를 플롯합니다. 질문이 뭐야? –

+0

내 질문에 왜 그것을하지 않는 것입니까? – Theo

답변

5

bodeplot 기능을 알고 있습니까?

간단한 2 차 대역 통과에 대한 전달 함수는 다음과 같습니다

enter image description here

그냥 bodeplot 그것을 matlab에의 tf 기능으로 값을 삽입하고 플롯 할 필요가

:

R = 55590; 
L = 0.9571; 
C = 48.811*10.^(-9); 

% tf creates transfer function object 
sys = tf([R*C 0] , [L*C R*C 1]);  % [R*C 0] vector of numerator coeffcients 
             % R*C*s + 0*1 
             % [L*C R*C 1] vector of denominator coeff. 
             % L*C*s^2 + R*C*s + 0*1 

bodeplot(sys)       % plot command to plot frequency response 
             % of magnitude and phase 

하고 플롯 :

enter image description here

변수로 크기 및 위상과 같은 출력이 더 필요하면 bode을 사용하면 플롯이 동일합니다. 그러나 bodeplot은 더 많은 플롯 사용자 정의 옵션을 제공합니다.

그냥 플롯 명령 앞에 다음 줄을 추가 할 필요가

: 다음과 같이

P = bodeoptions;   % handle to plot options 
P.MagScale = 'linear'; 
P.MagUnits = 'abs'; 
bodeplot(sys,P)   % plot command with custom options 

그렇게 보이는 :

당신은 선형 축이 필요하다는 의견에 대해서는


,

enter image description here

주파수 축 조정 제한, 사용

P.XLim = [1 60e3]; 

또는 크기에 대한 아날로그 :

P.YLim = [0 1]; 
내가 선형 주파수 축에 무리를 줄 것이다, 그러나 당신이 정말 원한다면, 당신이 사용할 수있는

:

P.FreqScale = 'linear'; 
P.FreqUnits = 'Hz';  % optional 

위의 그림과 함께 실험 데이터를 플로팅하려면을 따르십시오..

사용 bode는 실험 데이터와 같은, 당신의 전달 함수에서 동일하게 포맷 된 데이터를 얻을하고 음모 semilogx를 사용합니다.

freqVec = logspace(-1, 3, 5000); 
[mag, phs] = bode(sys, freqVec * (2*pi)); 
mag = db(mag(:)); 
phs = phs(:); 
figure; 
subplot(211) 
semilogx(freqVec, mag); hold on 
semilogx(freqVec, experimentalDataMagnitude); hold off 
grid on 
title('System Bode Plot') 
ylabel('Magnitude (dB)') 
subplot(212) 
semilogx(freqVec, phs); hold on 
semilogx(freqVec, experimentalDataPhase); hold off 
grid on 
ylabel('Phase (deg)') 
xlabel('Frequency (Hz)') 
+0

아니 내가 아니지만 사실 그 중 하나 후, 나는 그래프가 내 실험 데이터와 유사해야하기 때문에 선형 축이 필요합니다. – Theo

+0

@Theo 선형 주파수 축은 매우 드물다. 선형 크기는 내 편집을 봐야하기 때문이다. – thewaywewalk

+0

고맙습니다. 그러나 많은 새 기능이 있으므로 스크립트에 주석을 달 수 있으며, 전달 함수 방정식은 어디에서 입력 했습니까? 또는 미리 정의 된 함수의 일부입니까? 덕분에 – Theo

관련 문제