|
songzy41 发表于 2008-4-15 18:18
我认为两条线没有重合,其原因是这语句
Xk=sqrt((N/(2*l))*GxC(k*no)).*exp(j*fik)
中乘了((N/(2*l)), ...
我根据上面大家讨论的东西,自己写了一个由一直psd计算时间序列的程序。
PSD的方程是PSD=1.93 (HP24)^2 (LP24)^2
(LP24) = 1/(1 + 2,613S + 3,414S2 + 2,613S3+ S4)
(HP24) = S4/(1 + 2,613S + 3,414S2 + 2,613S3 + S4)
S = j f / fc; j = -1
程序如下
clc;
clear all;
f=(0:0.001:12)'; % cut-off frequency 0-12 hz
L=length(f);
% calculate the PSD according to the equations
for i=1:L
Slp(i,1)=f(i,1)/3*(-1)^0.5;
Shp(i,1)=f(i,1)/1.5*(-1)^0.5;
HP(i,1)=Shp(i,1)^4/(1+2.613*Shp(i,1)+3.414*Shp(i,1)^2+2.613*Shp(i,1)^3+Shp(i,1)^4);
LP(i,1)=1/(1+2.613*Slp(i,1)+3.414*Slp(i,1)^2+2.613*Slp(i,1)^3+Slp(i,1)^4);
Gpf(i,1)=1.93*(HP(i,1)^2)*(LP(i,1)^2);
G(i,1)=abs(Gpf(i,1));
end
% calculate the time signal based on the PSD
L=60;
l=0.005;
N=L/l;
no=1/N;
fik=unifrnd(0,2*pi,1,N+1)';
k=0:N/2;
Xk=sqrt(G).*exp(j*fik);
Xk(1)=sqrt(G(1));
Xk(N/2+1)=sqrt(G(N/2+1));
Xk=[Xk(1:6001);conj(Xk(6000:-1:1))];
Xm=ifft(Xk);
x=linspace(0,60,length(Xm));
subplot(211);
plot(x,real(Xm));
xlabel('time/s');
ylabel('acceleration/m s^-^2');
Pxr=abs(fft(real(Xm))).^2;
Pxr=Pxr(1:N/2+1);
subplot(212);
n1=linspace(0,6,N/2+1);
plot(f,G,'r','linewidth',3); hold on;
plot(n1,Pxr);
legend('G','Pxr')
但是计算出来的结果很奇怪。
请大家帮忙看看哪里不对
也有朋友说可以根据psd曲线设计一个相同形状的滤波器,然后让一个随机信号通过滤波器。但是设计滤波器不是很懂。 |
|