新主题发表不成功,我把程序写在这里吧。求解的思路参考的“刘献栋等,公路路面不平度的数值模拟方法研究[J]北京航空航天大学学报,2003,29(9)”。与songzy41提示的方法基本一致。
不知是不是我的程序有问题,恢复的随机序列的功率谱密度与理论值相差很大,希望论坛的朋友多多指点。
function Gx=GxC(n)
%求C级路面功率谱
Gx0=256; %参考空间频率n0下的路面功率谱密度
n0=0.1; %参考空间频率n0
L=409.6;
l=0.1;
N=L/l; %采样点数
n1=0.01; %空间频率范围n1--nu
nu=3;
w=2; %频率指数
n=linspace(0.01,3,N);
Gx=Gx0*(n/n0).^(-w);
function Xm=XmC(n)
Gx0=256; %参考空间频率n0下的路面功率谱密度
n0=0.1; %参考空间频率n0
L=409.6;
l=0.1;
N=L/l; %采样点数
n1=0.01; %空间频率范围n1--nu
nu=3;
w=2; %频率指数
no=1/L; %空间频率间隔
Xk=[];
Xm=[];
Nn=N;
k=0:N/2;
fik=unifrnd(0,2*pi,1,N); %产生0到2pi的均匀分布的随机序列
Xk=sqrt((N/(2*l))*GxC(k*no)).*exp(j*fik);%调用函数GxC(n)
for k=0:N/2
Xk(Nn-1)=conj(Xk(k+1)); %补齐N/2+1到N-1的项
Nn=Nn-1;
end
Xk=[Xk, Xk(Nn)];
Xm=ifft(Xk); %逆傅立叶变换后得到复数形式随机序列
x=linspace(0,409.6,length(Xm));
subplot(211);
plot(x,real(Xm)); %取实部
xlabel('行驶距离/m');
ylabel('路面不平度/mm');
Pxr=abs(fft(real(Xm))).^2/N; %恢复序列的功率谱
Pxr=Pxr(1:N/2+1);
subplot(212);
n=linspace(0.01,3,length(Pxr));
n1=linspace(0.01,3,N);
loglog(n,Pxr,'r',n1,GxC(n1)); %恢复序列的功率谱与原功率谱值比较
xlabel('空间频率n');
ylabel('功率谱密度Gx(n)'); |