利用三角级数法在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');
求帮助啊,小弟先谢谢啦 回复 1 # ztx106 的帖子
我对MATLAB不是太熟悉,用的不多。
从你的图形来看,我估计是时间单位和空间单位转换的问题。
路面谱是空间坐标,你需要把信号根据速度,将时间坐标转变到空间坐标上来。应该是吻合的。 回复 3 # wanyeqing2003 的帖子
你好,谢谢你的回复。我直接用的就是原功率谱函数的空间坐标,没有从时间坐标转换到空间坐标。我先是把标准功率谱画出来,然后三角级数法得到时域信号,再将时域信号傅里叶变换得到模拟的功率谱密度(图中蓝线),它的横坐标和标准功率谱的一样。而且从图上看到高频的时候偏离的太大了,这是怎么回事 啊? 回复 4 # ztx106 的帖子
1、没有转换成空间坐标是不行的;
2、高频部分偏离大是正常的。路面谱主要体现低频。 回复 5 # wanyeqing2003 的帖子
我再调试调试,谢谢 wanyeqing2003 发表于 2011-6-24 11:23 static/image/common/back.gif
回复 4 # ztx106 的帖子
1、没有转换成空间坐标是不行的;
回答是正确的。 保持单位的一致性。 回复 8 # mgh_nx 的帖子
你好,你也用这种方法做路谱的分析吗?能和你具体聊聊吗? 多多学习一下了 楼主的程序太有用了 顶一下!!谢谢
非常有用,谢谢楼主 我也学习学习 会不会是程序中幅值谱没有*2/N
页:
[1]
2