具有随机时间依赖输入的ODE

时间:2014-12-13 13:12:58

标签: matlab ode stochastic

我想重复一篇文章中的例子。

我必须解决这个ODE:

25 a + 15 v + 330000 x = p(t)

其中 p(t)是一个白噪声序列,限制在10-25 Hz范围内; a 是加速度, v 是速度, x 是位移。

然后它说使用Runge-Kutta程序模拟系统。采样频率设置为1000 Hz,并将高斯白噪声添加到数据中,使噪声占信号r.m.s值的5%(如何使用此最后信息?)。

主要问题与带限白噪声有关。我按照我在https://dsp.stackexchange.com/questions/9654/how-to-generate-band-limited-gaussian-white-noise找到的说明进行操作,并编写了以下代码:

% White noise excitation
% design FIR filter to filter noise in the range [10-25] Hz
Fs = 1000; % sampling frequency

% Time infos (for white noise)
T = 1/Fs;
tspan = 0:T:4; % I saw from the plots in the paper that the simulation last 4 seconds
tstart = tspan(1);
tend = tspan (end);

b = fir1(64, [10/(Fs/2) 25/(Fs/2)]);
% generate Gaussian (normally-distributed) white noise
noise = randn(length(tspan), 1);
% apply filter to yield bandlimited noise
p = filter(b,1,noise);

现在我必须为ode定义函数,但我不知道如何给它 p (白噪声)......我试过这样:

function [y] = p(t)
    b = fir1(64, [10/(Fs/2) 25/(Fs/2)]);
    % generate Gaussian (normally-distributed) white noise
    noise = randn(length(t), 1);
    % apply filter to yield bandlimited noise
    y = filter(b,1,noise);
end

odefun = @(t,u,m,k1,c,p)[u(2); 1/m*(-k1*u(1)-c*u(2)+p(t))];

[t,q,te,qe,ie] = ode45(@(t,u)odefun2(t,u,m,k2,c,@p),tspan,q0,options);

事实是输入激励不能正常工作:方程的固有频率约为14 Hz,所以我希望看到响应中的共振,因为白噪声在10-25 Hz范围内。 / p>

我也看过这个Q / A,但我还是不能让它起作用:

How solve a system of ordinary differntial equation with time-dependent parameters

Solving an ODE when the function is given as discrete values -matlab-

0 个答案:

没有答案