繁体   English   中英

如何在MATLAB中使用fft绘制信号的波特图?

[英]How to plot bode diagram of a signal using fft in MATLAB?

我想使用bodefft绘制以下系统的bode图:

%// 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绘制了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 Bode图:

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

任何想法

这是我的数据(u和ym)

我查看了您的数据,并将其与时域中的理论传递函数进行了比较, 如果您忽略了一些数据 ,这并不是一个很好的选择:

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。 这给出了以下图(以八度为单位):

在此处输入图片说明

我建议您在进行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)))

在此处输入图片说明

传递函数的直流电平是正确的,但是较差的FFT技术在(相对)较高的频率上会产生过多的噪声。 tfestimate是根据测量数据估算传输量的更好选择(再次记住,要像我在这里一样对数据进行预处理)。 它是信号处理工具箱的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM