作者:趙兵
日期:2020-02-17
目錄
單自由度系統中質量、阻尼和剛度變化對頻率響應函數(FRF)影響圖的繪制
1. 背景
2. VISIO繪制
3. Matlab繪制
(1) M變化時
(2) K變化時
(3) C變化時
4. 參考文章
1. 背景
寫文章時需要用到幾張圖,下面是從PDF上截圖截出來的,用來表示單自由度系統在沖擊激勵下的頻率響應曲線,當K(剛度),C(阻尼),M(質量)變化時,頻率響應曲線的變化情況。
![]() |
![]() |
![]() |
| 圖 1 單自由度系統剛度,阻尼,質量影響曲線 |
||
用圖1放在文章中,不太美觀,一看就是影印的,要是一般的文章還好,如果用來發表的就拉下檔次了。所以就嘗試了下重繪,重繪有兩個方案,
(1)用PPT、visio或者Adobe Illustrator等繪圖工具自己繪制
(2)用matlab先得到曲線的函數,進一步把函數顯示出來
2. Visio繪制
嘗試了一下,質量變化影響曲線圖相對還好畫一些,但阻尼變化的曲線就不是那么容易畫了,畫出來總覺得差點意思。很難保證各曲線之間的間隔均勻;當然肯定是能做到,但自己非此方面的熟手,所以有兩個解決方案,一個是嘗試用Adobe Illustrator進行一定時間的專門學習,但時間成本太高;或者是淘寶上尋求供外包解決,也是能解決的;但最終我還是決定先嘗試下第二種方案,先得到曲線的函數,然后用軟件把函數繪出來。
|
| 圖 2 Visio繪制曲線圖 |
3. Matlab繪制
單自由度系統的物理模型如圖 3 所示,
![]() |
| 圖 3單自由度系統模型 |
它的動力學方程為

其中
$M$:質量; $C$:阻尼; $K$:剛度; $\ddot{x}$:加速度;$\dot{x}$:速度; $x$:位移; $f$:外力; $t$:時間。
這里的f(t)為脈沖激勵:
使用漢寧窗生成:$ f(t<T_c)= \frac{A}{2} * cos(\frac{2*\pi* t(t<T_c)}{T_c}) $
% % 激勵采用脈沖激勵,脈沖激勵為Hanning函數
function f = hanning_imp(t, Tc, A)
f = zeros(size(t));
f(t < Tc) = A / 2 * (1 - cos(2*pi * t(t < Tc) / Tc));
end
可以根據這個函數得到一個脈沖激勵
畫圖此圖:
dt = 0.00001;
t = 0:dt:200;
Tc = 0.001;
A = 10;
u = hanning_imp(t, Tc, A);
plot(t,u,'LineWidth',1.5 );
axis([-5 200 -0.1 10.5 ]);
xlabel('t/s')
ylabel('Amp/N')
text(75,8,'Impact Force');
|
(a)整體圖 |
(b)局部放大圖 |
|
| 圖 4 沖擊力
|
|
|
建立系統方程,求解頻率響應函數(FRF)
function [freq_x , amp_y]=frf_bing(m,k,c) % m 質量 % k 剛度 % c 阻尼 num = 1; den = [m c k]; sys = tf(num, den); %采樣頻率(Hz) 100Hz 實際並不需要這么高的采樣頻率,但是如果采樣時間太小,hanning脈沖不完整 % 為了得到准確的響應dt一定要小,否則做出的相位可能不對 dt = 0.00001; fs = 1/dt; t = 0:dt:200; Tc = 0.001; A = 10; u = hanning_imp(t, Tc, A); y = lsim(sys, u, t); y = y'; N = length(u); fy = fft(y); fu = fft(u); ft = fy ./ fu; f = (0:N-1) * fs ./ N; ft_r = real(ft); ft_i = imag(ft); part = (f < 30); freq_x=f(part); amp_y= abs(ft(part)); End
(1) M變化時
取m=100,120,140,160,180,200分別繪制FRF的響應曲線。
clc;
clear;
close all;
%%
k = 1000; %初始化k
c=100; %初始化c
M=100:20:200; %初始化m, 取m=100,120,140,160,180,200分別繪圖
f1= figure(1);
hold on
for i= 1:length(M)
[a(:,i) , b(:,i)]=frf_bing(M(i),k,c);
end
plot(a,log(b),'b');
axis([0 1 -8.2 -5.3]);
title('Log(FRF)');
xlabel('Frequency')
ylabel('Amplitude')
set(gca,'XTick',[],'YTick',[]);
text(0.3,-7,'M↑');
annotation('arrow',[0.7 0.3],[0.6 0.8]) ;
f1.Position=([ 0 0 400 300])
% 保存為emf 矢量格式
set(gcf,'unit','centimeters','position',[10 5 6.5 4.8]);
print(f1,'-dmeta','M.emf')
可以生成一幅想要的曲線,並且可以保存為矢量格式,無論放大多少倍,圖片還是很清晰。
|
| 圖 5 質量變化的影響 |
(2) K變化時
取K=1000,1200,1400,1600,1800,2000分別繪制FRF的響應曲線。
clc;
clear;
close all;
%%
k = 1000:200:2000;
c=100;
M=100;
f1= figure(1);
hold on
for i= 1:length(k)
[a(:,i) , b(:,i)]=frf_bing(M,k(i),c);
end
plot(a,log(b),'b');
axis([0 1 -8.2 -5.3]);
title('Log(FRF)');
xlabel('Frequency')
ylabel('Amplitude')
set(gca,'XTick',[],'YTick',[]);
text(0.6,-7,'K↑');
annotation('arrow',[0.4 0.8],[0.63 0.6]) ;
f1.Position=([ 0 0 400 300])
% 保存為emf 矢量格式
set(gcf,'unit','centimeters','position',[10 5 6.5 4.8]);
print(f1,'-dmeta','K.emf')
|
|
| 圖 6剛度變化的影響 |
(3) C變化時
取K=1000,1200,1400,1600,1800,2000分別繪制FRF的響應曲線。
clc; clear; close all; %%
fontsizevalue=18; c=100:20:200; f1= figure(1); hold on for i= 1:length(c) [a(:,i) , b(:,i)]=frf_bing(c(i)); end plot(a,log(b),'b'); axis([0 1 -8 -5.5]); t1=title('Log(FRF)'); xl=xlabel('Frequency') y1=ylabel('Amplitude') t1.FontSize =fontsizevalue; y1.FontSize =fontsizevalue; xl.FontSize =fontsizevalue; set(gca,'XTick',[],'YTick',[]); text(0.5,-7,'C↑'); annotation('arrow',[0.5 0.5],[0.9 0.5]) ; f1.Position=([ 0 0 400 300]) % 保存為emf 矢量格式 set(gcf,'unit','centimeters','position',[10 5 6.5 4.8]); print(f1,'-dmeta','K.emf')
![]() |
| 圖 7阻尼變化的影響 |
4. 參考文章
1. CSDN博主「whoispo」文 https://blog.csdn.net/WhoisPo/article/details/46865401









