ztx106 发表于 2011-6-22 16:04

利用三角级数法在MATLAB里编程实现路面功率谱的数值模拟

本帖最后由 牛小贱 于 2014-3-18 18:13 编辑

各位好,小弟最近在做关于将路面功率谱转换为时域信号,然后进行傅里叶变换,将得到的功率谱与原功率谱作对比,从而验证该模拟方法的正确性。但是二者并不是重合,而是有一个平移量,想问问大家怎么解决?下面是我的程序。谢谢各位指点
% 参考《频域采样三角级数法模拟轨道不平顺信号》,以公路C级路面为例
Gq0=256e-6;
n0=0.1;    % 参考空间频率n0
f_min=0.3;
f_max=30;
T=10;
delta_f=1/T;                  
N=floor((f_max-f_min)/delta_f);   % 采样点数
delta_t=T/N;
time=linspace(0,T,N);
V=20;
sita=unifrnd(0,2*pi,1,N);    % 产生内随机数

f=zeros(size(sita));
w=zeros(size(sita));
Gq=zeros(size(sita));
Q=zeros(size(sita));
Z=zeros(size(sita));

for k=1:N
    f(k)=f_min+(k-1)*delta_f;% 频率
    w(k)=2*pi/T*(k-1);         % 角频率,w=2*pi*f
    Gq(k)=Gq0.*(f(k)./n0).^(-2)*V;   % Gq(f)=Gq0.*(f/n0).^(-w)*V.^(w-1),其中w=2;
end

for l=1:length(time)
    for k=1:N
      Gq(k)=Gq0.*(f(k)./n0).^(-2)*V;
      Q(k)=2*sqrt(Gq(k)*delta_f)*cos(w(k)*time(l)+sita(k));
    end
    Z(l)=sum(Q);
end

figure(1)
subplot(211);
plot(time,Z,'r');    % 时域信号
xlabel('时间t');ylabel('路面不平度Z');grid on;

subplot(212);
loglog(f,Gq,'r');    % 功率谱函数
xlabel('频率 Hz');ylabel('功率谱密度 PSD');hold on;grid on;
y=(abs(fft(Z))).^2/N; %时域信号FFT变换得到的功率谱函数
loglog(f,y,'b');


ztx106 发表于 2011-6-22 16:04

求帮助啊,小弟先谢谢啦

wanyeqing2003 发表于 2011-6-23 14:20

回复 1 # ztx106 的帖子

我对MATLAB不是太熟悉,用的不多。
从你的图形来看,我估计是时间单位和空间单位转换的问题。
路面谱是空间坐标,你需要把信号根据速度,将时间坐标转变到空间坐标上来。应该是吻合的。

ztx106 发表于 2011-6-24 08:43

回复 3 # wanyeqing2003 的帖子

你好,谢谢你的回复。我直接用的就是原功率谱函数的空间坐标,没有从时间坐标转换到空间坐标。我先是把标准功率谱画出来,然后三角级数法得到时域信号,再将时域信号傅里叶变换得到模拟的功率谱密度(图中蓝线),它的横坐标和标准功率谱的一样。而且从图上看到高频的时候偏离的太大了,这是怎么回事 啊?

wanyeqing2003 发表于 2011-6-24 11:23

回复 4 # ztx106 的帖子

1、没有转换成空间坐标是不行的;
2、高频部分偏离大是正常的。路面谱主要体现低频。

ztx106 发表于 2011-6-24 13:39

回复 5 # wanyeqing2003 的帖子

我再调试调试,谢谢

mgh_nx 发表于 2011-9-21 20:11

wanyeqing2003 发表于 2011-6-24 11:23 static/image/common/back.gif
回复 4 # ztx106 的帖子

1、没有转换成空间坐标是不行的;


回答是正确的。

mgh_nx 发表于 2011-9-21 20:18

保持单位的一致性。

ztx106 发表于 2011-10-15 10:17

回复 8 # mgh_nx 的帖子

你好,你也用这种方法做路谱的分析吗?能和你具体聊聊吗?

yunchang75 发表于 2012-2-25 19:10

多多学习一下了

354510647 发表于 2012-3-3 11:32

楼主的程序太有用了

deanbller 发表于 2012-3-3 11:55

顶一下!!谢谢

桌子不会哭 发表于 2012-3-26 11:48

非常有用,谢谢楼主

905lili 发表于 2012-10-10 11:24

我也学习学习

kyu16866 发表于 2012-11-8 20:39

会不会是程序中幅值谱没有*2/N
页: [1] 2
查看完整版本: 利用三角级数法在MATLAB里编程实现路面功率谱的数值模拟