|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
本帖最后由 yuxinpeng 于 2012-2-19 01:24 编辑
一个三角波电压输入一个二阶振荡系统后的位移响应如图1所示,但对位移进行傅立叶反变换反过来验证其输入电压时,得到的却不是三角波的电压如图2。请问怎么会产生这种情况呢?输入电压的数据见附件voltage.txt
voltage.txt
(1.11 KB, 下载次数: 1)
图1
图2
求位移响应的程序:
%初始条件
n=100;%数据点数
f=20000;%电压频率[Hz]
zp=0.18;%二阶系统阻尼系数
wn=283000;%二阶系统固有圆频率[rad/s]
df=0:f:(n-1)*f;%二阶系统传递函数用
%电压输入
fp = fopen('voltage.txt');
x = fscanf(fp,'%f',[1 n]);
fclose(fp);
X=fft(x,n);%n点fft
Xg=abs(X)/sum(x);%幅值
Xp=angle(X)*180/pi;%相位
%二阶传递函数
E=ones(1,n);
A=wn^2*E;%分子
B=wn^2-4*pi^2*df.*df;%分母实部
C=j*4*pi*zp*wn*df;%分母虚部
G=A./(B+C);%传递函数
Gg=abs(G);%幅值
Gp=angle(G)*180/pi;%相位
%求位移输出
Yg=Xg.*Gg;%幅值
Yp=Xp+Gp;%相位
Y=sum(x)*Yg.*(cos(Yp*pi/180)+i*sin(Yp*pi/180));
y=ifft(Y);%逆fft
fp2= fopen('displacement.txt','wt');%将数据输出到文件
fprintf(fp2,'%f\n',y);
fclose(fp2);
%绘图
dt=(0:n-1)/f/n;%采样周期
subplot(1,2,1);
plot(dt,x,'r');
title('v(t)')
xlabel('Time s');
ylabel('Applied voltage V');
subplot(1,2,2);
plot(dt,y,'r');
title('x(t)')
xlabel('Time s');
ylabel('Displacement um');
反求系统输入电压的程序:
%初始条件
n=100;%数据点数
f=20000;%电压频率[Hz]
zp=0.18;%二阶系统阻尼系数
wn=283000;%二阶系统固有圆频率[rad/s]
df=0:f:(n-1)*f;%二阶系统传递函数用
%位移输出
fp=fopen('displacement.txt');%读取文件数据
y=fscanf(fp,'%f',[1 n]);
fclose(fp);
Y=fft(y,n);%n点fft
Yg=abs(Y)/sum(y);%幅值
Yp=angle(Y)*180/pi;%相位
%二阶传递函数
E=ones(1,n);
A=wn^2*E;%分子
B=wn^2-4*pi^2*df.*df;%分母实部
C=j*4*pi*zp*wn*df;%分母虚部
G=A./(B+C);%传递函数
Gg=abs(G);%幅值
Gp=angle(G)*180/pi;%相位
%ifft反求电压输入
Xg=Yg./Gg;%幅值
Xp=Yp-Gp;%相位
X=sum(x)*Xg.*(cos(Xp*pi/180)+i*sin(Xp*pi/180));%逆fft
x=ifft(X);
fp3= fopen('ifftvoltage.txt','wt');%将数据输出到文件
fprintf(fp3,'%f\n',y);
fclose(fp3);
%绘图
dt=(0:n-1)/f/n;
subplot(1,2,1);
plot(dt,y,'r');
title('v(t)')
xlabel('Time s');
ylabel('Applied voltage V');
subplot(1,2,2);
plot(dt,x,'r');
title('x(t)')
xlabel('Time s');
ylabel('Displacement um');
|
|