⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prony.txt

📁 在进行原始数据拟合时
💻 TXT
字号:
%prony法模态参数识别
%%%%%%%%%%%%%%%%%%%%%
%clear
clc
close all hidden
format long
%%%%%%%%%%%%%%%%%%%%%%%%%%%
fni=input('prony模式识别数据文件名:','s');
%fni=out2.signals.values, 'DisplayName', 'out2.signals.values', 'YDataSource', 'out2.signals.values'
fid=fopen(fni,'r');
%mn=9
%fid=out2.signals.values(1:386,1);
mn=fscanf(fid,'%d',1); %模态阶数
%[A,mn]=fscanf(fid,'%d',1);
%定义输出实测数据类型;
%ig=1时域数据如冲击响应,自由振动,互相关函数,随即减量法处理结果;
%ig=2频域数据如频响函数实部虚部数据;
ig=fscanf(fid,'%d',1);
%ig=1时f为采样频率sf,ig=2时,f为频率间隔df
f=fscanf(fid,'%f',1);
fno=fscanf(fid,'%s',1);%输出数据文件名
b=fscanf(fid,'%f',[ig,inf]);%实测时域或者频域数据
status=fclose(fid);
%建立复指数函数的阶数
nm=2*mn;
%组织识别计算所用的时域数据及参数
if ig==1%实测时域数据
    %取采样频率 
    sf=f;
    %取时域长度1/2的长度 
    n=fix(length(b)/2);           
    %将输入时域数据赋值给列向量h
    h=b(1,1:2*n)';
   % h=b(1:2*n,1);%%%%%%%
    %计算时间间隔
    dt=1/sf;
    %建立离散时间向量
    t=0:dt:(2*n-1)*dt;
else %实测频域数据
    %取频率间隔
    df=f;
    %取实测频响函数的长度
    n=length(b(1,:));
    f=0:df:(n-1)*df;
    %建立对应正负频率的实测频响函数向量
    H=b(1,:)'+b(2,:)'*i;
    H(n+1)=real(H(n));
    H(n+2:2*n)=conj(H(n:-1:2));
    %频响函数经IFFT并取实部变换成脉冲响应函数
    h=real(ifft(H));
    t=linspace(0,1/df,2*n);
    dt=t(2)-t(1);
end
L=length(h);
M=L/2;
for k=1:nm
   X1(:,k)=h(k:M-1+k);
end;
for k=1:M
  X2(k,:)=-h(nm+k);
end
%用最小二乘法求解待定系数的列向量
%B=X1\X2;
B=inv(X1'*X1)*(X1'*X2);
B(nm+1)=1;
%将B转换成降幂排列的列向量
B1=B(nm+1:-1:1);
%幂多项式求根
V=roots(B1);%求出特征方程的根
%计算模态频率向量
F1=abs(log(V))/(2*pi*dt); %初步计算频率
%计算阻尼比向量
D1=sqrt(1./(((imag(log(V))./real(log(V))).^2)+1));
%计算振型系数向量
for k=0:(2*n-1)
Va(k+1,:)=[conj(V').^k]; %生成范德梦矩阵
end
S1=(inv(conj(Va')*Va)*conj(Va')*h);
%计算拟合的脉冲响应函数
h1=real(Va*S1);
%绘制脉冲响应函数拟合曲线图
figure(1)
plot(t,h,'r:',t,h1);
xlabel('时间’(s)');
ylabel('幅值');
legend('实测','拟合');
grid on ;
%for z=1:1:2*n    
%a=((h(z)-h1(z))/h(z))/100;
%plot(a)
%end
if ig>1
    %计算生成的频响函数
    H1=fft(Va*S1);
    %绘制频响函数实部拟合曲线图
    figure(2)
    nn=1:n;
    subplot(2,1,1);
 %  plot(f,b(1,:),':',f,real(H1(nn)),'r');    
plot(f,real(H(nn)),':',f,real(H1(nn)),'r');      
    xlabel('频率’(Hz)');
ylabel('实部');
legend('实测','拟合');
grid on;
%绘制频响函数虚部拟合曲线图
    subplot(2,1,2);
    plot(f,b(2,:),':',f,imag(H1(nn)),'r');
    xlabel('频率’(Hz)');
ylabel('虚部');
legend('实测','拟合');
grid on;
end
%将自振频率从小到大排序
[F2,I]=sort(F1);
%剔除方程解中的非模态项(非共轭根)和共轭相
m=0;
for k=1:nm-1
    if F2(k)~=F2(k+1) %消除其中的共轭相
continue;
    end
m=m+1;
II=I(k);
F(m)=F1(II);%自振频率
D(m)=D1(II);%阻尼比
S(m)=S1(II);%振型系数
A(m)=abs(S1(II));%振幅
theta(m)=angle(S1(II));%相角
%a=((h-h1)/h)/100
end
%打开文件输出模态参数数据
fid=fopen(fno,'w');
fprintf(fid,'  频率(Hz) 阻尼比(%%)振型系数 振幅 相角\n');
for k=1:m
    fprintf(fid,'%10.4f %10.4f %10.6f %10.4f %10.4f,\r\n',F(k),D(k)*100.0,imag(S(k)),A(k),theta(k));
end
status=fclose(fid)






    
    
    
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -