画单自由度系统传递函数(实频,虚频,幅频,相位,导纳)
生活随笔
收集整理的這篇文章主要介紹了
画单自由度系统传递函数(实频,虚频,幅频,相位,导纳)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
激勵采用脈沖激勵,脈沖激勵為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
下面是計算單自由度系統響應的Matlab程序,計算傳遞函數,畫實頻、虛頻、幅頻、相位、導納圖
m = 100; k = 1000; c = 100;num = 1; den = [m c k]; sys = tf(num, den); dt = 0.00001; fs = 1/dt; %采樣頻率(Hz) 100Hz 實際并不需要這么高的采樣頻率,但是如果采樣時間太小,hanning脈沖不完整 % 為了得到準確的響應dt一定要小,否則做出的相位可能不對t = 0:dt:200; Tc = 0.001; A = 10; u = hanning_imp(t, Tc, A); y = lsim(sys, u, t); % y = impulse(sys, 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);figure('name', '實頻'); plot(f(part), ft_r(part)); figure('name', '虛頻'); plot(f(part), ft_i(part)); figure('name', '幅值'); plot(f(part), abs(ft(part))); figure('name', '相位'); plot(f(part), phase(ft(part)) * 180 / pi); figure('name', '導納圓'); plot(ft_r(part), ft_i(part), '.'); axis equal; hold on; xk = [-0.00011650.00028578.297e-50.00048690.000682]; xk1 = [-0.0008017-0.00030820.00028570.0011940.001451]; yk1 = [-0.002817-0.003095-0.003185-0.002869-0.002633];yk = [-0.003149-0.003185-0.003179-0.003165-0.003121]; k = 5; A = [sum(xk.^2) sum(xk .* yk) sum(xk)sum(xk.*yk) sum(yk.^2) sum(yk)sum(xk) sum(yk) k]; B = -[sum(xk.^3 + xk.* yk.^2)sum(xk.^2.*yk + yk.^3)sum(xk.^2+yk.^2)]; rlt = A\B; x0 = rlt(1)*(-0.5); y0 = rlt(2)*(-0.5); r = sqrt(rlt(1)^2/4+rlt(2)^2/4-rlt(3)); fai = 0:0.01:2*pi; x = x0 + r * cos(fai); y = y0 + r * sin(fai); plot(x,y, 'r');
(1) 導納圖(還有擬合的圓,采用的擬合數據沒有更新,不是這個導納圓的)
(2)幅頻圖
(3)相頻圖
(4)實頻圖
(5)虛頻圖
總結
以上是生活随笔為你收集整理的画单自由度系统传递函数(实频,虚频,幅频,相位,导纳)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 选带傅里叶变换(zoom-fft)
- 下一篇: 根据刚体上若干个点的加速度确定任意点的加