Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

modalfrf

모드 해석을 위한 주파수-응답 함수

설명

예제

frf = modalfrf(x,y,fs,window)는 샘플 레이트 fs로 샘플링된 가진 신호 x와 응답 신호 y에서 주파수 응답 함수 frf의 행렬을 추정합니다. 출력값 frf는 Welch 방법과 window 함수를 신호에 윈도우로 적용하여 계산한 H1 추정값입니다. xy는 행 개수가 같아야 합니다. x 또는 y가 행렬이면 각 열은 신호를 나타냅니다.

시스템 응답 y는 가속도 측정값을 포함한다고 가정합니다. 변위 또는 속도 측정값에서 시작하는 주파수-응답 함수를 계산하려면 'Sensor' 인수를 사용하십시오. modalfrf 함수는 센서 유형에 관계없이 항상 동적 유연성(리셉턴스) 형식으로 주파수-응답 함수를 출력합니다.

frf = modalfrf(x,y,fs,window,noverlap)은 인접 세그먼트 간에 noverlap개의 샘플이 중첩되도록 지정합니다.

예제

frf = modalfrf(___,Name,Value)는 이름-값 인수를 사용하여 옵션을 지정하며 이전 구문의 입력값 조합을 사용합니다. 옵션으로는 추정량, 측정값 구성, 시스템 응답을 측정하는 센서 유형 등이 있습니다.

예제

[frf,f,coh] = modalfrf(___)는 각 주파수-응답 함수에 해당하는 주파수 벡터뿐만 아니라 다중 코히어런스 행렬도 반환합니다.

[frf,f] = modalfrf(sys)는 식별된 모델 sys의 주파수-응답 함수를 계산합니다. ssest (System Identification Toolbox), n4sid (System Identification Toolbox) 또는 tfest (System Identification Toolbox) 같은 추정 명령을 사용하여 시간 영역 입력 신호와 출력 신호에서 sys를 생성할 수 있습니다. 이 구문에는 'Sensor' 이름-값 인수만 사용할 수 있습니다. 이 구문을 사용하려면 System Identification Toolbox™ 라이선스가 있어야 합니다.

frf = modalfrf(sys,f)frf를 계산할 주파수를 지정합니다. 이 구문에는 'Sensor' 이름-값 인수만 사용할 수 있습니다. 이 구문을 사용하려면 System Identification Toolbox 라이선스가 있어야 합니다.

예제

modalfrf(___)(출력 인수 없음)는 현재 Figure에 주파수 응답 함수를 플로팅합니다. 플롯은 처음 4개의 가진 신호와 4개의 응답을 그리는 것으로 제한됩니다.

예제

모두 축소

SISO(단일 입력 단일 출력) 해머 가진의 주파수-응답 함수를 시각화합니다.

다음이 포함된 데이터 파일을 불러옵니다.

  • Xhammer 규칙적인 5번의 해머 타격으로 구성된 입력 가진 신호.

  • Yhammer 입력값에 대한 시스템 응답. Yhammer는 변위로 측정됩니다.

신호는 4kHz로 샘플링되었습니다. 가진 신호와 출력 신호를 플로팅합니다.

load modaldata

subplot(2,1,1)
plot(thammer,Xhammer(:))
ylabel('Force (N)')
subplot(2,1,2)
plot(thammer,Yhammer(:))
ylabel('Displacement (m)')
xlabel('Time (s)')

Figure contains 2 axes objects. Axes object 1 with ylabel Force (N) contains an object of type line. Axes object 2 with xlabel Time (s), ylabel Displacement (m) contains an object of type line.

주파수-응답 함수를 계산하고 표시합니다. 사각 윈도우를 사용하여 신호에 윈도우를 적용합니다. 해머 타격 주기를 윈도우 길이로 지정합니다.

clf
winlen = size(Xhammer,1);
modalfrf(Xhammer(:),Yhammer(:),fs,winlen,'Sensor','dis')

Figure contains 2 axes objects. Axes object 1 with title FRF11 contains an object of type line. Axes object 2 with xlabel Frequency (kHz) contains an object of type line.

랜덤 잡음이 가해진, 2입력/2출력 시스템의 주파수-응답 함수를 계산합니다.

입력 가진 신호 Xrand와 시스템 응답 Yrand가 포함된 데이터 파일을 불러옵니다. 5000개 샘플 길이의 핸 윈도우를 사용하고 인접 데이터 세그먼트 간에 50% 중첩되는 주파수-응답 함수를 계산합니다. 출력 측정값이 변위임을 지정합니다.

load modaldata
winlen = 5000;

frf = modalfrf(Xrand,Yrand,fs,hann(winlen),0.5*winlen,'Sensor','dis');

modalfrf의 플로팅 기능을 사용하여 응답을 시각화합니다.

modalfrf(Xrand,Yrand,fs,hann(winlen),0.5*winlen,'Sensor','dis')

Figure contains 8 axes objects. Axes object 1 with title FRF11 contains an object of type line. Axes object 2 contains an object of type line. Axes object 3 with title FRF12 contains an object of type line. Axes object 4 contains an object of type line. Axes object 5 with title FRF21 contains an object of type line. Axes object 6 with xlabel Frequency (kHz) contains an object of type line. Axes object 7 with title FRF22 contains an object of type line. Axes object 8 with xlabel Frequency (kHz) contains an object of type line.

간단한 SISO(단일 입력 단일 출력) 시스템에 대한 주파수-응답 함수를 추정하고 이를 정의와 비교합니다.

1차원의 이산시간 진동 시스템은 탄성 상수 k=1을 갖는 스프링으로 벽에 연결된 단위 질량 m으로 구성됩니다. 센서가 질량의 변위를 Fs=1Hz로 샘플링합니다. 댐퍼는 감쇠 상수 b=0.01을 사용하여 속도에 비례하는 힘을 가해 질량의 운동을 저해합니다.

3000개의 시간 샘플을 생성합니다. 샘플링 간격을 Δt=1/Fs로 정의합니다.

Fs = 1;
dt = 1/Fs;
N = 3000;
t = dt*(0:N-1);
b = 0.01;

시스템은 다음 상태공간 모델로 설명할 수 있습니다.

x(k+1)=Ax(k)+Bu(k),y(k)=Cx(k)+Du(k),

여기서 x=[rv]T는 상태 벡터로, rv는 질량의 변위와 속도를 각각 나타내고, u는 구동력이며, y=r은 측정된 출력값입니다. 상태공간 행렬은 다음과 같습니다.

A=exp(AcΔt),B=Ac-1(A-I)Bc,C=[10],D=0,

I2×2 단위 행렬이고, 연속시간 상태공간 행렬은 다음과 같습니다.

Ac=[01-1-b],Bc=[01].

Ac = [0 1;-1 -b];
A = expm(Ac*dt);

Bc = [0;1];
B = Ac\(A-eye(2))*Bc;

C = [1 0];
D = 0;

처음 2000초 동안은 임의의 입력값으로 질량을 구동시키고 그다음에는 자유롭게 움직이도록 둡니다. 상태공간 모델을 사용하여 모든 초기 상태값이 0인 시공간 시스템의 변화를 계산합니다. 질량의 변위를 시간 함수로 플로팅합니다.

rng default
u = randn(1,N)/2;
u(2001:end) = 0;

y = 0;
x = [0;0];
for k = 1:N
    y(k) = C*x + D*u(k);
    x = A*x + B*u(k);
end

plot(t,y)

Figure contains an axes object. The axes object contains an object of type line.

시스템의 모드 주파수-응답 함수를 추정합니다. 측정된 신호 길이의 1/2인 핸 윈도우를 사용합니다. 출력값이 질량의 변위임을 지정합니다.

wind = hann(N/2);

[frf,f] = modalfrf(u',y',Fs,wind,'Sensor','dis');

이산시간 시스템의 주파수-응답 함수는 단위원에서 계산된, 시스템의 시간 영역 전달 함수에 대한 Z 변환으로 표현할 수 있습니다. modalfrf 추정값을 정의와 비교합니다.

[b,a] = ss2tf(A,B,C,D);

nfs = 2048;
fz = 0:1/nfs:1/2-1/nfs;
z = exp(2j*pi*fz);
ztf = polyval(b,z)./polyval(a,z);

plot(f,20*log10(abs(frf)))
hold on
plot(fz*Fs,20*log10(abs(ztf)))
hold off
grid
ylim([-60 40])

Figure contains an axes object. The axes object contains 2 objects of type line.

진동 모드의 고유 주파수와 감쇠비를 추정합니다.

[fn,dr] = modalfit(frf,f,Fs,1,'FitMethod','PP')
fn = 0.1593
dr = 0.0043

고유 주파수를 비감쇠 시스템의 이론상 값인 1/2π와 비교합니다.

theo = 1/(2*pi)
theo = 0.1592

간단한 MIMO(다중 입력/다중 출력) 시스템에 대해 주파수-응답 함수와 모드 파라미터를 추정합니다.

이상적인 1차원 진동 시스템은 두 벽 사이에 있는 두 개의 질량 m1m2로 구성됩니다. 각각은 m1=1이고 m2=μ입니다. 각 질량은 탄성 상수 k를 갖는 스프링으로 가장 가까운 벽에 연결됩니다. 동일한 스프링이 두 질량을 연결합니다. 세 개의 댐퍼가 감쇠 상수 b를 사용하여 속도에 비례하는 힘을 가해 질량의 운동을 저해합니다. 센서가 질량의 변위인 r1r2Fs=50Hz로 샘플링합니다.

600초에 해당하는 30,000개 시간 샘플을 생성합니다. 샘플링 간격을 Δt=1/Fs로 정의합니다.

Fs = 50;
dt = 1/Fs;
N = 30000;
t = dt*(0:N-1);

시스템은 다음 상태공간 모델로 설명할 수 있습니다.

x(k+1)=Ax(k)+Bu(k),y(k)=Cx(k)+Du(k),

x=[r1v1r2v2]T는 상태 벡터, rivi는 각각 i번째 질량의 위치와 속도, u=[u1u2]T는 입력 구동력의 벡터, y=[r1r2]T는 출력 벡터입니다. 상태공간 행렬은 다음과 같습니다.

A=exp(AcΔt),B=Ac-1(A-I)Bc,C=[10000010],D=[0000],

I4×4 단위 행렬이고, 연속시간 상태공간 행렬은 다음과 같습니다.

Ac=[0100-2k-2bkb0001k/μb/μ-2k/μ-2b/μ],Bc=[00100001/μ].

k=400, b=0.1, μ=1/10로 설정합니다.

k = 400;
b = 0.1;
m = 1/10;

Ac = [0 1 0 0;-2*k -2*b k b;0 0 0 1;k/m b/m -2*k/m -2*b/m];
A = expm(Ac*dt);
Bc = [0 0;1 0;0 0;0 1/m];
B = Ac\(A-eye(4))*Bc;
C = [1 0 0 0;0 0 1 0];
D = zeros(2);

질량은 전체 측정에서 임의의 입력값으로 구동됩니다. 상태공간 모델을 사용하여 모든 초기 상태값이 0인 시공간 시스템의 변화를 계산합니다.

rng default
u = randn(2,N);

y = [0;0];
x = [0;0;0;0];
for kk = 1:N
    y(:,kk) = C*x + D*u(:,kk);
    x = A*x + B*u(:,kk);
end

입력 데이터와 출력 데이터를 사용하여 시스템의 전달 함수를 주파수 함수로 추정합니다. 인접 세그먼트 간에 9000개 샘플이 중첩되는, 15000개 샘플로 구성된 핸 윈도우를 사용합니다. 측정된 출력값이 변위임을 지정합니다.

wind = hann(15000);
nove = 9000;
[FRF,f] = modalfrf(u',y',Fs,wind,nove,'Sensor','dis');

단위원에서 계산된, 시간 영역 전달 함수의 Z 변환으로 이론상의 전달 함수를 계산합니다.

nfs = 2048;
fz = 0:1/nfs:1/2-1/nfs;
z = exp(2j*pi*fz);

[b1,a1] = ss2tf(A,B,C,D,1);
[b2,a2] = ss2tf(A,B,C,D,2);

frf(1,:,1) = polyval(b1(1,:),z)./polyval(a1,z);
frf(1,:,2) = polyval(b1(2,:),z)./polyval(a1,z);
frf(2,:,1) = polyval(b2(1,:),z)./polyval(a2,z);
frf(2,:,2) = polyval(b2(2,:),z)./polyval(a2,z);

추정값과 이론상의 예측값을 중첩하여 플로팅합니다.

for jk = 1:2
    for kj = 1:2
        subplot(2,2,2*(jk-1)+kj)
        plot(f,20*log10(abs(FRF(:,jk,kj))))
        hold on
        plot(fz*Fs,20*log10(abs(frf(jk,:,kj))))
        hold off
        axis([0 Fs/2 -100 0])
        title(sprintf('Input %d, Output %d',jk,kj))
    end
end

Figure contains 4 axes objects. Axes object 1 with title Input 1, Output 1 contains 2 objects of type line. Axes object 2 with title Input 1, Output 2 contains 2 objects of type line. Axes object 3 with title Input 2, Output 1 contains 2 objects of type line. Axes object 4 with title Input 2, Output 2 contains 2 objects of type line.

출력 인수 없이 modalfrf 구문을 사용하여 추정값을 플로팅합니다.

figure
modalfrf(u',y',Fs,wind,nove,'Sensor','dis')

Figure contains 8 axes objects. Axes object 1 with title FRF11 contains an object of type line. Axes object 2 contains an object of type line. Axes object 3 with title FRF12 contains an object of type line. Axes object 4 contains an object of type line. Axes object 5 with title FRF21 contains an object of type line. Axes object 6 with xlabel Frequency (Hz) contains an object of type line. Axes object 7 with title FRF22 contains an object of type line. Axes object 8 with xlabel Frequency (Hz) contains an object of type line.

시스템의 고유 주파수, 감쇠비, 모드 형상을 추정합니다. 피크 추출(peak-picking) 방법을 사용하여 계산합니다.

[fn,dr,ms] = modalfit(FRF,f,Fs,2,'FitMethod','pp');
fn
fn = 
fn(:,:,1) =

    3.8466    3.8466
    3.8495    3.8495


fn(:,:,2) =

    3.8492    3.8490
    3.8552   14.4684

고유 주파수를 비감쇠 시스템의 이론상 예측값과 비교합니다.

undamped = sqrt(eig([2*k -k;-k/m 2*k/m]))/2/pi
undamped = 2×1

    3.8470
   14.4259

철골에 해당하는 2입력/6출력 데이터 세트의 주파수-응답 함수를 계산합니다.

입력 가진과 출력 가속도계 측정값이 포함된 구조체를 불러옵니다. 시스템은 약 3.9초 동안 1024Hz로 샘플링되었습니다.

load modaldata SteelFrame
X = SteelFrame.Input;
Y = SteelFrame.Output;
fs = SteelFrame.Fs;

부분공간 방법을 사용하여 주파수-응답 함수를 계산합니다. 입력 신호와 출력 신호를 겹치지 않는 1000개의 샘플로 구성된 세그먼트로 나눕니다. 사각 윈도우를 사용하여 각 세그먼트에 윈도우를 적용합니다. 모델 차수를 36으로 지정합니다.

[frf,f] = modalfrf(X,Y,fs,1000,'Estimator','subspace','Order',36);

시스템의 안정화 다이어그램을 시각화합니다. 최대 15개의 물리적 모드를 식별합니다.

modalsd(frf,f,fs,'MaxModes',15)

Figure contains an axes object. The axes object with title Stabilization Diagram, xlabel Frequency (Hz), ylabel Model Order contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent Stable in frequency, Stable in frequency and damping, Not stable in frequency, Averaged response function.

입력 인수

모두 축소

가진 신호(excitation signal)로, 벡터나 행렬로 지정됩니다.

데이터형: single | double

응답 신호로, 벡터나 행렬로 지정됩니다.

데이터형: single | double

샘플 레이트로, 헤르츠를 단위로 하는 양의 스칼라로 지정됩니다.

데이터형: single | double

윈도우로, 정수로 지정되거나 행 벡터 또는 열 벡터로 지정됩니다. window를 사용하여 신호를 여러 세그먼트로 나눕니다.

  • window가 정수이면 modalfrfxy를 길이가 window인 세그먼트로 나누고 각 세그먼트에 해당 길이의 사각 윈도우를 적용합니다.

  • window가 벡터이면 modalfrfxy를 벡터와 길이가 같은 세그먼트로 나누고 window를 사용하여 각 세그먼트에 윈도우를 적용합니다.

  • 'Estimator''subspace'로 지정하면, modalfrf는 반환된 주파수-응답 함수에서 window의 형태를 무시하고 길이를 사용하여 주파수 지점 개수를 확인합니다.

xy의 길이를 noverlap개의 샘플이 중첩된 정수 개수의 세그먼트로 정확히 나눌 수 없는 경우 신호가 이에 맞게 적절하게 잘립니다.

사용 가능한 윈도우 목록은 윈도우 항목을 참조하십시오.

예: hann(N+1)(1-cos(2*pi*(0:N)'/N))/2는 모두 길이가 N + 1인 핸 윈도우를 지정합니다.

데이터형: single | double

중첩(Overlap) 샘플의 개수로, 양의 정수로 지정됩니다.

  • window가 스칼라이면 noverlapwindow보다 작아야 합니다.

  • window가 벡터이면 noverlapwindow의 길이보다 작아야 합니다.

데이터형: double | single

식별된 시스템으로, 식별된 파라미터를 가진 모델로 지정됩니다. ssest (System Identification Toolbox), n4sid (System Identification Toolbox) 또는 tfest (System Identification Toolbox) 같은 추정 명령을 사용하여 시간 영역 입력 신호와 출력 신호에서 sys를 생성할 수 있습니다. 이에 대한 예제는 Modal Analysis of Identified Models 항목을 참조하십시오. 일반적으로 sys를 사용하는 구문은 비모수적 방법을 사용하는 구문보다 데이터를 더 적게 필요로 합니다. 이 입력 인수를 사용하려면 System Identification Toolbox 라이선스가 있어야 합니다.

예: idss([0.5418 0.8373;-0.8373 0.5334],[0.4852;0.8373],[1 0],0,[0;0],[0;0],1)은 식별된 상태공간 모델을 생성합니다. 생성된 모델은 단위 탄성 상수를 갖는 스프링과 상수 0.01을 갖는 댐퍼로 벽에 연결된 단위 질량에 해당합니다. 질량 변위는 1Hz로 샘플링됩니다.

예: idtf([0 0.4582 0.4566],[1 -1.0752 0.99],1)은 식별된 전달 함수 모델을 생성합니다. 생성된 모델은 단위 탄성 상수를 갖는 스프링과 상수 0.01을 갖는 댐퍼로 벽에 연결된 단위 질량에 해당합니다. 질량 변위는 1Hz로 샘플링됩니다.

주파수로, Hz를 단위로 하는 벡터로 지정됩니다.

데이터형: single | double

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: 'Sensor','vel','Est','H1'은 입력 신호가 속도 측정값으로 구성되고 선택한 추정량이 H1임을 지정합니다.

추정량으로, 'H1', 'H2', 'Hv' 또는 'subspace'로 지정됩니다. H1 추정량과 H2 추정량에 대한 자세한 내용은 전달 함수 항목을 참조하십시오.

  • 잡음이 가진 신호와 상관 관계가 없는 경우 'H1'을 사용합니다.

  • 잡음이 응답 신호와 상관 관계가 없는 경우 'H2'를 사용합니다. 이 경우, 가진 신호의 개수는 응답 신호의 개수와 같아야 합니다.

  • 오차 행렬의 추적을 최소화하여, 모델링된 응답 데이터와 추정된 응답 데이터 간의 차이를 최소화하려면 'Hv'를 사용합니다. HvH1H2의 기하 평균입니다. Hv = (H1H2)1/2

    측정값은 SISO(단일 입력 단일 출력)여야 합니다.

  • 상태공간 모델을 사용하여 주파수-응답 함수를 계산하려면 'subspace'를 사용합니다. 이 경우 noverlap 인수는 무시됩니다. 일반적으로 이 방법은 비모수적 방법을 사용하는 구문보다 데이터를 더 적게 필요로 합니다. 자세한 내용은 n4sid (System Identification Toolbox)를 참조하십시오.

상태공간 모델에 피드스루가 있는지 여부로, 논리값으로 지정됩니다. 이 인수는 'Estimator''subspace'로 지정된 경우에만 사용할 수 있습니다.

데이터형: logical

가진 채널과 응답 채널의 개수가 같아지는 측정값 구성으로, 'fixed', 'rovinginput' 또는 'rovingoutput'으로 지정됩니다.

  • 시스템의 고정된 위치에 가진 소스와 센서가 있는 경우 'fixed'를 사용합니다. 각 가진은 모든 응답에 영향을 줍니다.

  • 측정값이 이동 가진(또는 이동 해머) 테스트를 수행한 결과인 경우 'rovinginput'을 사용합니다. 단일 센서가 시스템의 고정 위치에서 유지됩니다. 단일 가진 소스가 여러 위치에 놓이고 위치별로 한 개의 센서 응답을 생성합니다. 함수 출력값 frf(:,:,i) = modalfrf(x(:,i),y(:,i))입니다.

  • 측정값이 이동 센서 테스트를 수행한 결과인 경우 'rovingoutput'을 사용합니다. 단일 가진 소스가 시스템의 고정 위치에서 유지됩니다. 단일 센서가 여러 위치에 놓이고 위치별로 한 개의 가진에 응답합니다. 함수 출력값 frf(:,i) = modalfrf(x(:,i),y(:,i))입니다.

상태공간 모델 차수로, 정수나 정수로 구성된 행 벡터로 지정됩니다. 정수로 구성된 벡터를 지정하는 경우 이 함수는 지정된 범위에서 최적의 차수 값을 선택합니다. 이 인수는 'Estimator''subspace'로 지정된 경우에만 사용할 수 있습니다.

데이터형: single | double

센서 유형으로, 'acc', 'vel' 또는 'dis'로 지정됩니다.

  • 'acc' — 시스템의 응답 신호는 가속도에 비례함을 지정합니다.

  • 'vel' — 시스템의 응답 신호는 속도에 비례함을 지정합니다.

  • 'dis' — 시스템의 응답 신호는 변위에 비례함을 지정합니다.

modalfrf 함수는 센서 유형에 관계없이 항상 동적 유연성(리셉턴스) 형식으로 주파수-응답 함수를 출력합니다.

예제: 비감쇠 조화 진동자

출력 인수

모두 축소

주파수-응답 함수로, 벡터, 행렬 또는 3차원 배열로 반환됩니다. frf는 p×m×n의 크기를 갖습니다. 여기서 p는 주파수 Bin의 개수이고, m은 응답 개수이고, n은 가진 신호 개수입니다.

modalfrf 함수는 센서 유형에 관계없이 항상 동적 유연성(리셉턴스) 형식으로 주파수-응답 함수를 출력합니다.

주파수로, 벡터로 반환됩니다.

다중 코히어런스 행렬로, 행렬로 반환됩니다. coh의 각 열은 각 응답 신호에 대응합니다.

참고 문헌

[1] "Dynamic Stiffness, Compliance, Mobility, and more..." Siemens, last modified 2019, https://community.sw.siemens.com/s/article/dynamic-stiffness-compliance-mobility-and-more.

[2] Brandt, Anders. Noise and Vibration Analysis: Signal Analysis and Experimental Procedures. Chichester, UK: John Wiley & Sons, 2011.

[3] Irvine, Tom. "An Introduction to Frequency Response Functions," Vibrationdata, 2000, https://vibrationdata.com/tutorials2/frf.pdf.

[4] Vold, Håvard, John Crowley, and G. Thomas Rocklin. "New Ways of Estimating Frequency Response Functions." Sound and Vibration. Vol. 18, November 1984, pp. 34–38.

버전 내역

R2017a에 개발됨

참고 항목

| | (System Identification Toolbox) |

도움말 항목