Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2012-01-27
帖子: 3
声望力: 0 ![]() |
![]()
一个三角波电压输入一个二阶振荡系统后的位移响应如图1所示,但对位移进行傅立叶反变换反过来验证其输入电压时,得到的却不是三角波的电压如图2。请问怎么会产生这种情况呢?输入电压的数据见附件voltage.txt
![]() 图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'); |
![]() |
![]() |