我想使用bode
和fft
绘制以下系统的波德图:
%// System info
num=[0 1]; %// Numerator of z-transform of impulse response of system
den=[1 -0.8]; %// Denominator of z-transform of impulse response of system
我用dbode
绘制了波特方法:
figure(6); dbode(num,den,1) %// 1 is sampling time Ts
正如我想用fft
方法做的那样,它出错了:
Ts=1;
Fs=1/Ts;
L=length(ym);
NFFT = 2^nextpow2(L); %// Next power of 2 from length of ym
H2=fft(ym,NFFT)./fft(u,NFFT);
f=Fs/2*linspace(0,1,NFFT/2+1);
ww=f*2*pi;
figure(7)
semilogx(20*log10(abs(H2(1:NFFT/2+1))))
figure(10)
semilogx((180/pi)*angle(H2(1:NFFT/2+1)))
使用bode
:
任何想法
答案 0 :(得分:1)
我查看了您的数据,并将其与时域中的理论传递函数进行了比较,如果您忽略了某些数据,那么就不合适:
t = 1:length(u);
num=[0 1]; %// Numerator of z-transform of impulse response of system
den=[1 -0.8]; %// Denominator of z-transform of impulse response of system
H = tf(num,den,1)
[yy,tt,xx] = step(H,max(t));
plot(t-10,ym-2.2,tt,yy)
您会注意到我在10之前丢弃了时间值,并将响应值向下移动了大约2.2。这给出了以下图(在Octave中):
我建议你在进行FFT时做同样的事情:
L = length(ym(t>=10));
NFFT = 2^nextpow2(L);
H2 = fft(ym(t>=10)-2.2,NFFT)./fft(u(t>=10),NFFT);
f=Fs/2*linspace(0,1,NFFT/2+1);ww=f*2*pi;
[mag,ph,w ] = bode(H);
semilogx(ww,20*log10(abs(H2(1:NFFT/2+1))),w,20*log10(abs(mag)))
传递函数的DC电平是正确的,但是差的FFT技术在(相对)较高频率处产生太多噪声。 tfestimate
是根据测量数据估算传输的更好选择(再次记住按照我刚才的方式预处理数据)。它是信号处理工具箱的一部分。