yannanr 发表于 2007-4-2 15:57

求助:在matlab中怎样用fft求非线性方程数值解后的频谱特性?

:@( 向大家请教:
一个非线性系统,振动方程是达芬方程D2x+uDx+w^2*x+a*x^3=f(wt)
用龙格-库塔法求解它的数值解后,在画出它的频谱特性,fft可以用吗?
数值求解之后得到的x是一系列的数值,fft可以对这个数值向量进行频谱变换吗?

yingjie328 发表于 2007-4-3 08:19

这是一个朋友传给我的,不知道对你有用不,我打算学matlab,还没开始呢,呵呵


%    This demonstration uses the FFT function to analyze the variations of
%    the EI.centro seismic wave
load EL.dat
time=EL(:,1);
acceler=EL(:,2);
figure(1)
subplot(1,2,1)
plot(time,acceler,'k')
xlabel('t/s')
ylabel('acceleration')
t=time(1:400);
a=acceler(1:400);
subplot(1,2,2)
plot(t,a,'b.-');
figure(2)
f=0:0.125:25-0.125;
Y=fft(a);
Y=Y(1:200);
plot(f,Y,'r')

yannanr 发表于 2007-4-3 15:09

还没问你这段程序是干什么用的?

yejet 发表于 2007-4-3 20:43

原帖由 yannanr 于 2007-4-3 15:09 发表
还没问你这段程序是干什么用的?

从程序上看,这段代码就是对已知数据作FFT分析的

Seventy721 发表于 2007-4-6 15:29

ff=90; %(Hz)
N=1024*16;
n=4; % how many period

grid=';
incre= 1/ff/(N-1);
t = incre*grid*n;

% plot the original signal
y=1.75*cos(2*pi*ff*t) + 2.3*sin(4*pi*ff*t);
figure(1);
plot(t,y);
title('Signal');
xlabel('time');
ylabel('signal');

% FFT
Y = fft(y)/N*2;
Pyy = abs(Y);

% plot the FFT
f = 1/incre*grid/n/(length(Pyy)-1);
figure(2);
plot(f(1:N/2),Pyy(1:N/2))
title('Frequency content of y');
xlabel('frequency (Hz)');
ylabel('magnitude (Hz)');

“我们一直都用它,效果还挺好!”

dujunmin 发表于 2007-4-18 20:41

当然可以了,求解这个微分方程后,得出该非线性系统在时域的响应,再利用matlib中的fft函数即可方便地求出在频域内的响应了。
需要说明的是,如果激励力f(wt)是一个频率一定的激励时,就没有必要如此麻烦了,此时系统的响应频率就是激励频率。

shenyongjun 发表于 2007-4-19 17:00

原帖由 dujunmin 于 2007-4-18 20:41 发表
需要说明的是,如果激励力f(wt)是一个频率一定的激励时,就没有必要如此麻烦了, ...

感觉楼上说的有问题。实际上非线性系统的响应是比较复杂的,即使只有单频激励,但是响应中可能包含多种频率的成分,如各种倍频、分频等。如果系统处于混沌状态频率成分就更多了。因此分析响应时作一作FFT还是必要的。

chuandong418 发表于 2007-4-20 10:43

问下 Seventy721
你程序中的ff代表?采样频率吗?
还有这段f = 1/incre*grid/n/(length(Pyy)-1);
是不是求频率的固定算法啊?

yejet 发表于 2007-4-22 18:03

本帖最后由 VibInfo 于 2016-5-11 15:53 编辑

原帖由 chuandong418 于 2007-4-20 10:43 发表
问下 Seventy721
你程序中的ff代表?采样频率吗?
还有这段f = 1/incre*grid/n/(length(Pyy)-1);
是不是求频率的固定算法啊?
显然这是求个阶谐波的幅值的
其实这个问题你只需要看一下matlab的帮助就行了

yejet 发表于 2007-4-22 18:05

本帖最后由 VibInfo 于 2016-5-11 15:53 编辑

原帖由 shenyongjun 于 2007-4-19 17:00 发表
感觉楼上说的有问题。实际上非线性系统的响应是比较复杂的,即使只有单频激励,但是响应中可能包含多种频率的成分,如各种倍频、分频等。如果系统处于混沌状态频率成分就更多了。因此分析响应时作一作FFT还 ...
考虑非线性问题的话,确实这种说法有问题

不过个人也有一个疑问,在混沌状态下,用FFT还有意义吗?或者说是否是正确的?

Seventy721 发表于 2007-6-4 04:12

本帖最后由 VibInfo 于 2016-5-11 15:53 编辑

原帖由 chuandong418 于 2007-4-20 10:44 发表
问下 Seventy721
你程序中的ff代表?采样频率吗?
还有这段f = 1/incre*grid/n/(length(Pyy)-1);
是不是求频率的固定算法啊?

Sorry,好久没来看贴,不知有人提问。这个怪我当初没有解释一下程序。现在补充如下:

这段程序是一个带有示例的fft程序。首先由函数y=1.75*cos(2*pi*ff*t) + 2.3*sin(4*pi*ff*t)产生一个采样信号,包含90Hz和180Hz两个频率成分,然后对这个信号做fft并显示。对结果进行系数变换,使得那两个频率成分的幅值与原信号一致。

ff=90; %(Hz)例子信号的频率
N=1024*16;   采样点数
n=4;            采样范围(几个周期)

Seventy721 发表于 2007-6-4 04:25

赞成yejet的问题。

关于非线性问题,我觉得能不能用fft主要看解是否为周期函数。如果是周期的,再复杂也没问题,如果不是周期的,那就改用相图或者Poincaré 图吧。至于混沌,我所知甚少,就不乱发言了。呵呵。

无水1324 发表于 2007-6-4 10:05

只是对数值积分的解数据进行FFT变换,不管解的性质是什么,直接用FFT就可以了
页: [1]
查看完整版本: 求助:在matlab中怎样用fft求非线性方程数值解后的频谱特性?