首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用MATLAB中的fft绘制信号的波纹图?

如何用MATLAB中的fft绘制信号的波纹图?
EN

Stack Overflow用户
提问于 2015-02-02 09:39:14
回答 1查看 6.5K关注 0票数 1

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

代码语言:javascript
复制
%// 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来绘制bode方法:

代码语言:javascript
复制
figure(6); dbode(num,den,1) %// 1 is sampling time Ts

由于我想从fft方法中执行此操作,它会出错:

代码语言:javascript
复制
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)

EN

回答 1

Stack Overflow用户

发布于 2015-02-02 11:11:31

我查看了您的数据,并将其与时域中的理论传递函数进行了比较,如果忽略了一些数据,那么它并不是一个不合适的

代码语言:javascript
复制
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时做同样的事情:

代码语言:javascript
复制
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将是一个更好的选择,以估计传输的基础上的测量数据(再次记住,前处理的方式,就像我刚才做的)。它是信号处理工具箱的一部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28274717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档