# 블록선도 기본 개념 및 표현법

블록선도는 제어계의 동작을 직관적으로 파악하기 위한 강력한 시각적 도구로서, 입력과 출력의 흐름을 나타내는 선과 시스템 내부 연산을 나타내는 블록으로 구성된다. 블록선도는 미분방정식이나 상태방정식을 직접 다루지 않고도 계 전체의 거동을 간편하게 분석할 수 있도록 해 준다. 블록 내부는 주로 전달함수를 포함하며, 블록 간 신호 흐름 방향은 화살표로 표시한다. 이를 통해 서로 다른 구성 요소가 어떻게 연결되고, 전체 시스템에 어떤 영향을 미치는지를 쉽게 살펴볼 수 있다.

블록선도에서 가장 기본이 되는 요소는 전달함수이다. 전달함수는 복소수 영역(주로 라플라스 영역)에서 한 신호의 입력과 출력 사이의 비율로 정의된다. 예를 들어 단일입력 단일출력(SISO) 시스템에서 입력과 출력이 각각 $X(s)$, $Y(s)$일 때 전달함수 $G(s)$는

$$
G(s) = \frac{Y(s)}{X(s)}
$$

처럼 표현된다. 블록선도에서 이 $G(s)$는 하나의 블록으로 나타나며, 블록 입력은 $X(s)$, 블록 출력은 $Y(s)$가 된다.

블록선도에서는 일반적으로 합성점(summing junction)과 분기점(branch point)을 통해 신호를 더하거나 나눈다. 합성점은 여러 개의 입력을 한 노드에서 더하거나 빼는 역할을 수행한다. 예를 들어 두 신호 $X\_1(s)$, $X\_2(s)$가 합성점에서 합쳐져 $X\_1(s) + X\_2(s)$의 결과를 만든다면, 이를 하나의 출력 신호로 연결할 수 있다. 분기점은 단일 신호를 여러 갈래로 나누어 서로 다른 블록에 동시에 전달할 때 사용한다. 신호 흐름에서 분기점을 거쳐 각 경로를 거치면서도 동일 신호가 유지되며, 신호에 임의의 지연이나 왜곡이 발생하지 않는 것으로 가정한다.

블록선도는 계의 구조를 시각적으로 이해하는 데 가장 큰 장점을 지니지만, 계의 거동을 수학적으로 해석하려면 간단한 표준 형태로 재구성해야 할 때가 많다. 이를 위해 블록선도에서는 몇 가지 표준 결합 형태를 정의하여, 블록선도를 체계적으로 단순화하거나 변환하는 과정이 가능하다. 예를 들어 직렬 연결(두 블록이 입력에서 출력으로 순차적으로 연결된 형태), 병렬 연결(두 블록의 출력을 합성점을 통해 합하여 사용하는 형태), 피드백 연결(출력의 일부가 반전 또는 그대로 입력으로 되먹임되어 폐루프를 구성하는 형태)이 기본적인 결합 구조로 자주 등장한다. 이를 적절히 조합하고 변환하면 복잡한 시스템 구조도 간단한 등가 전달함수 한 개로 묘사할 수 있다.

아래는 블록선도의 간단한 예시를 mermaid 문법으로 표현한 것이다.

{% @mermaid/diagram content="flowchart LR
A(("합성점")) --> X(s)
X(s) -->|"G(s)"| Y(s)
Y(s) --> B(("분기점"))
B -->|피드백 신호| A" %}

위 그림에서 합성점 A는 외부에서 들어오는 입력과 피드백 신호를 더하거나 빼는 역할을 수행한다. 분기점 B는 출력 $Y(s)$를 여러 갈래로 나누어, 한 갈래는 외부에 전달하고 다른 갈래는 피드백으로 돌려보내는 구조를 구현한다. 블록 $G(s)$는 해당 경로의 전달함수를 나타낸다. 실제 블록선도 구성에서는 합성점에서 더해질 신호가 몇 개인지, 분기점이 몇 개나 존재하는지, 어떠한 전달함수가 병렬·직렬·피드백 형태로 연결되는지에 따라 다양한 형태를 보이지만, 그 기본은 이와 같은 방식으로 구성된다.

블록선도의 신호 흐름 방향은 제어계에서 매우 중요하다. 블록선도에서 신호는 항시 화살표 방향으로만 전파된다. 유의해야 할 점은 블록선도에서 화살표가 역방향으로 흐른다는 표현을 사용하지 않으며, 일반적으로 신호는 한 방향으로만 이동하고, 피드백 구조는 블록을 돌아 나오는 폐루프 형태로 나타낸다. 따라서 블록선도를 구성할 때는 신호가 들어오는 순서와 나가는 순서를 명확히 구분해야 하며, 피드백을 어디에 어떻게 적용할 것인가에 주의하여야 한다.

블록선도에서 흔히 활용되는 또 하나의 개념은 내부상태와 외부변수의 구분이다. 외부변수는 시스템 외부에서 주어지는 입력과 시스템이 최종적으로 내보내는 출력에 해당한다. 내부상태변수나 내부 입력·출력은 시스템 내부에서만 유효하며, 이를 블록선도 상에서 얼마나 상세히 표현하는지는 분석 목적에 따라 달라진다. 어떤 경우에는 내부 구성요소 각각을 모두 따로 블록으로 그려야 하나, 어떤 경우에는 전체를 하나의 등가 블록으로 단순화하여 분석하기도 한다.

복잡한 다중입력 다중출력(MIMO) 계를 다룰 때, 블록선도는 종종 벡터나 행렬 형태의 전달함수로 확장된다. 즉 시스템 입력 $\mathbf{X}(s)$가 여러 개의 신호 채널로 구성되고, 출력 $\mathbf{Y}(s)$ 또한 여러 채널로 구성될 때, 하나의 블록으로 표시되는 전달함수는 실제로는 행렬 형태를 가질 수 있다. 예를 들어

$$
\mathbf{Y}(s) = \mathbf{G}(s),\mathbf{X}(s)
$$

라고 표현되는 경우, $\mathbf{G}(s)$는 각 입력 채널에서 각 출력 채널로의 전달 특성을 담은 행렬이 된다. 블록선도 표현 상에서는 하나의 큰 블록에 $\mathbf{G}(s)$라고 표기할 수 있으며, 내부적으로는 행렬 연산이 이루어진다고 해석한다.

이와 같이 블록선도의 기본 구성과 표현법을 잘 익혀두면 이후에 등장할 블록선도 간소화 기법, 전달함수 추출, 폐루프 특성해석 등의 단계에서 개념을 더욱 명확하게 이해할 수 있다.

#### 블록선도 간소화와 등가 변환 개요

블록선도를 활용하여 시스템을 분석할 때는 복잡하게 얽혀 있는 블록들을 보다 단순한 형태로 나타내는 과정이 필요하다. 이를 블록선도의 간소화 또는 등가 변환이라고 부른다. 계의 입력과 출력 사이의 최종 전달함수를 쉽게 구하거나 폐루프 특성을 빠르게 파악하기 위해서는 여러 개의 블록을 단순화하는 작업을 여러 단계에 걸쳐 진행하게 된다. 간단한 예로, 블록이 직렬로 연결되어 있으면 곱셈으로 표현하고 병렬로 연결되어 있으면 덧셈으로 표현하며, 피드백 구조가 존재하면 표준 폐루프 전달함수로 치환하는 식으로 점진적으로 블록선을 축소한다.

간소화 작업을 정형화하기 위해서는 몇 가지 표준 규칙을 숙지해야 한다. 대표적인 규칙에는 직렬 결합, 병렬 결합, 피드백 결합, 합성점 및 분기점 이동 등이 있으며, 블록선도를 단순화하기 위한 알고리즘적 접근이 여러 교재에서 제시된다. 예를 들어 외부 입력에서부터 시작해 출력까지 흐르는 주요 신호 경로를 따라가면서, 불필요하게 복잡한 내부 분기나 합성을 단계별로 정리하는 방법이 있다. 혹은 미리 정의된 공식에 따라 폐루프 전달함수를 도출하기도 한다.

#### 직렬 연결과 병렬 연결

직렬 연결은 두 블록이 앞뒤로 연결되어 있는 형태이다. 예를 들어 한 블록의 출력이 바로 다음 블록의 입력으로 들어가는 경우이다. 블록선도에서 $G\_1(s)$, $G\_2(s)$가 직렬 연결되어 있다고 하면, 전체 전달함수는 곱으로 나타난다. 즉 블록선도 상에서

$$
Y(s) = G\_2(s),G\_1(s),X(s)
$$

처럼 표현할 수 있다. 이를 블록선도에서는 두 블록을 직렬로 배치하고 입력에서 출력으로 연결한다.

병렬 연결은 두 블록의 입력이 공통이고, 출력은 합성점을 통해 하나로 합쳐지는 경우이다. 예를 들어 $G\_1(s)$, $G\_2(s)$ 두 블록이 동일 신호 $X(s)$를 입력받고, 그 결과가 하나로 더해져서 $Y(s)$가 되는 구조라면

$$
Y(s) = \bigl(G\_1(s) + G\_2(s)\bigr)X(s)
$$

로 쓸 수 있다. 블록선도 상에서는 합성점이 두 블록의 출력을 더하거나 빼는 형태로 표현된다.

#### 단순 피드백 구조

가장 기본이 되는 피드백 폐루프는 하나의 블록 $G(s)$와 피드백 경로의 블록 $H(s)$로 이루어진 구조이다. 피드백이 양(+)으로 합성되면 양의 피드백, 음(-)으로 합성되면 음의 피드백이라고 부른다. 제어계에서는 음의 피드백(negative feedback)이 일반적이다. 음의 피드백 블록선도의 폐루프 전달함수는

$$
T(s) = \frac{G(s)}{1 + G(s),H(s)}
$$

형태로 주어진다. 이는 폐루프 계에서 외부 입력을 $R(s)$라 할 때 출력 $Y(s)$가

$$
Y(s) = \frac{G(s)}{1 + G(s),H(s)},R(s)
$$

로 표현된다는 사실을 이용한 결과이다.

간단한 예시를 mermaid로 나타내면 다음과 같다.

{% @mermaid/diagram content="flowchart LR
R("R(s)") --> A(("합성점"))
A -->|"G(s)"| Y("Y(s)")
Y --> B(("분기점"))
B -->|"H(s)"| C(("피드백 합성점"))
C --> A" %}

합성점 A에서 외부 입력 $R(s)$와 피드백 신호가 뺄셈 혹은 덧셈으로 결합되어 블록 $G(s)$로 들어간다. 분기점 B에서는 출력 $Y(s)$를 두 갈래로 나누어, 하나는 외부로 전달하고 다른 하나는 $H(s)$를 거쳐 피드백 합성점 C로 들어간 뒤 다시 합성점 A로 되먹임되는 구조이다. 실제로는 합성점 A와 피드백 합성점 C를 하나의 합성점으로 묶어서 표기하기도 한다.

#### 합성점 이동과 분기점 이동

블록선도 간소화 과정에서는 합성점(summing junction)을 앞으로 혹은 뒤로 이동시키거나, 분기점(branch point)을 이동시키는 기법이 자주 사용된다. 합성점을 이동시키는 규칙은 신호흐름의 본질을 유지하면서도 블록선도를 보다 간단히 재배치하기 위함이다. 예를 들어 합성점 바로 뒤에 $G(s)$가 직렬 연결되어 있는 경우, 합성점 앞으로 $G(s)$를 옮기는 형태로 변환할 수 있다. 단, 그 과정에서 블록이나 입력 신호에 곱해지는 상대적 영향이 어떻게 바뀌는지를 주의 깊게 계산해야 한다.

합성점 이동 규칙의 핵심은 합성점이 입력 신호를 합친 뒤 전달함수 $G(s)$를 통과하는 것이나, 각각의 신호가 별도로 $G(s)$를 거쳐 합성점에서 합쳐지는 것이나 결과가 동일하다는 점에서 유래한다. 예를 들어

$$
Y(s) = G(s)\bigl(X\_1(s) + X\_2(s)\bigr)
$$

이 기존 형태라면, 이를

$$
Y(s) = G(s),X\_1(s) + G(s),X\_2(s)
$$

로 전개한 뒤 블록선도를 재구성하면 두 개의 병렬 경로로 나타낼 수 있다. 이렇게 하면 다른 피드백 경로나 분기점이 어떻게 연결되어 있는지에 따라, 블록 간소화가 더 쉽게 진행되는 경우가 많다.

분기점 이동 역시 유사한 원리로 활용된다. 분기점 뒤에 이어지는 블록을 분기점 앞으로 옮기거나, 서로 다른 분기 노드를 하나로 합치는 형태로 재배치하여, 전체 블록선도의 흐름을 간략화할 수 있다. 이 때도 각 경로에서 동일한 블록이 공통으로 쓰이는 경우를 병렬 구조로 치환하거나, 합성점과 피드백 경로를 단일화할 수 있다.

#### 블록선도 간소화 예시

블록선도의 간소화를 좀 더 구체적으로 살펴보자. 예를 들어 아래와 같은 구조를 가정한다.

{% @mermaid/diagram content="flowchart LR
R("R(s)") --> A(("합성점"))
A -->|"G\_1(s)"| B(("분기점"))
B -->|"G\_2(s)"| C(("합성점"))
B -->|"H(s)"| E(("합성점"))
C -->|"G\_3(s)"| Y("Y(s)")
E --> A" %}

합성점 A에서 $R(s)$와 피드백 경로 E의 출력을 합쳐 $G\_1(s)$로 보낸 후, 분기점 B에서 두 갈래로 나누어 한 갈래는 $G\_2(s)$를 거쳐 합성점 C로 들어가고, 또 다른 갈래는 $H(s)$를 거쳐 합성점 E로 들어간다. 합성점 C의 출력은 $G\_3(s)$를 통해 최종 출력 $Y(s)$로 이어지고, 합성점 E에서 나온 신호가 다시 A로 피드백된다.

이 구조를 간소화하기 위해서는 합성점 A, C, E의 위치 및 분기점 B의 위치를 적절히 조정하고, 병렬 또는 직렬 결합을 찾는 작업을 수행한다. 간단히 합성점 A와 E 사이의 구조를 한 덩어리로 묶어보거나, 분기점 B에서 갈라지는 두 경로 $G\_2(s)$와 $H(s)$가 합성점 C와 E로 각각 어떻게 영향을 주는지 계산하여, 병렬 또는 직렬 형태로 변환할 수 있는 부분을 찾아낸다.

실제 계산에서는 각 합성점에서의 입출력 신호 이름을 임의로 부여하여 라플라스 변환된 표현식을 일일이 써 가면서 간소화하기도 한다. 이를테면 합성점 A의 출력을 $U(s)$, 분기점 B에서 $G\_2(s)$로 들어가는 신호를 $U\_2(s)$, 합성점 C의 출력을 $W(s)$, 최종 출력 $Y(s)$, 피드백 신호를 $E(s)$ 식으로 두고, 각 지점에서의 관계를 수식으로 전개하여 불필요한 내부 변수를 제거한다. 그런 다음 필요하다면 합성점 이동 규칙을 적용하거나 직렬·병렬 결합을 발견하여 점점 간소화한다.

이렇듯 블록선도 간소화는 일정한 규칙과 수식을 기반으로 단계적으로 이뤄진다. 복잡한 구조라도 여러 번의 간소화 과정을 거치면 최종적으로 단일 폐루프 형태로 표현되거나, MIMO 시스템이라면 행렬 형태의 종합 전달함수로 귀결될 수 있다.

#### 다중 루프 피드백 구조와 블록선도 간소화

블록선도가 복잡해질 때는 여러 루프가 서로 얽혀 있는 형태가 나타난다. 예를 들어 내부 루프와 외부 루프가 동시에 존재한다거나, 병렬 루프가 중첩되어 있는 경우가 있다. 이런 다중 루프 피드백 구조에서는 기존의 단일 폐루프 공식 $T(s) = \frac{G(s)}{1 + G(s),H(s)}$ 만으로 간단히 처리하기 힘들다. 따라서 한 루프씩 차례로 제거하면서 등가적인 전달함수를 단계적으로 구하거나, 합성점 이동·분기점 이동 규칙을 적극적으로 사용하여 단일 루프로 귀결되도록 재배치해야 한다.

블록선도를 간소화할 때는 특정 루프를 우선적으로 폐루프 형태로 묶어 등가 블록으로 치환한 뒤, 새로 생긴 블록을 다시 다른 루프와 결합하는 방법을 쓴다. 가령 내부 피드백 루프가 존재한다면, 내부 루프를 먼저 단일 블록 $G\_\mathrm{int}(s)$로 만들고, 이를 바깥쪽 블록선도와 직렬·병렬·피드백으로 다시 연결하는 식으로 반복 수행한다. 이처럼 다중 루프 간소화는 체계적인 과정을 거치므로, 합성점에 표시되는 부호와 각 블록의 배치 순서를 세심하게 확인해야 한다.

#### 신호 흐름선도와 Mason의 이득 공식

블록선도와 유사한 목적으로 사용되는 또 다른 기법으로 신호 흐름선도(signal flow graph)가 있다. 블록선도가 블록을 중심으로 신호 흐름을 표시한다면, 신호 흐름선도는 시스템을 노드(node)와 지점 간 연결(edge)로 표현한다. 신호 흐름선도에서는 노드가 변수(예: $X(s)$, $Y(s)$ 등)를 나타내고, 노드 간 연결선의 이득(gain)이 해당 경로의 전달함수에 해당한다. 이를 이용하면 Mason의 이득 공식(Mason’s gain formula)로 시스템 전체의 전달함수를 효율적으로 계산할 수 있다.

Mason의 이득 공식은 모든 경로(path)와 고리(loop)를 찾아 그 기여도를 계산한 뒤 합산하여 전체 전달함수를 구하는 절차를 제시한다. 예를 들어 단일입력 단일출력(SISO) 계에서 신호 흐름선도의 입력 노드를 $R(s)$, 출력 노드를 $Y(s)$라 하면, Mason의 이득 공식에 따라

$$
\frac{Y(s)}{R(s)} = \frac{\sum\_{k} P\_k \Delta\_k}{\Delta\_0}
$$

형태로 전달함수를 얻는다. 여기서 $P\_k$는 $k$번째 순방향 경로(forward path)의 이득, $\Delta\_0$는 전체 그래프의 1-루프 이득, 2-루프 이득 등을 고려한 결정식(determinant) 같은 항, $\Delta\_k$는 $k$번째 순방향 경로와 공통 노드를 갖지 않는 고리(loop)들만 따로 고려해서 계산한 값이다.

블록선도에서도 신호 흐름선도와 동일한 논리가 적용되므로, 복잡한 블록선도를 신호 흐름선도로 전환한 뒤 Mason의 이득 공식을 적용하는 경우가 많다. 직접 블록선도를 간소화하는 대신에 신호 흐름선도 변환을 수행하고 Mason의 공식을 쓰면, 다중 루프가 얽혀 있어도 체계적으로 전체 전달함수를 구할 수 있다. 다만 노드 및 루프 추적을 잘못하면 쉽게 오류가 생길 수 있으므로, 실제로는 블록선도 간소화와 신호 흐름선도 접근 방식을 상황에 맞게 병행 사용하는 편이다.

#### 내부 상태변수와 블록선도

일부 복잡한 계에서는 내부 상태가 다수 존재하여, 상태공간 표현(state-space representation)을 이용해 시스템을 분석하기도 한다. 상태공간 표현은

$$
\begin{aligned}
\dot{\mathbf{x}}(t) = \mathbf{A},\mathbf{x}(t) + \mathbf{B},\mathbf{u}(t)
\\
\mathbf{y}(t) = \mathbf{C},\mathbf{x}(t) + \mathbf{D},\mathbf{u}(t)
\end{aligned}
$$

형태로 주어지며, 이에 해당하는 블록선도를 구성하면 내부 상태변수 $\mathbf{x}(t)$ 각각을 따로 블록 혹은 노드로 표시한다. 상태공간 표현을 그대로 블록선도로 옮기는 경우, 적분기(integrator) 블록이나 미분기(differentiator) 블록을 사용하여 연립미분방정식을 시각화한다.

이때는 단순히 하나의 블록에 $G(s)$라고 쓰기보다, 여러 개의 적분기 블록 및 가중 행렬(예: $\mathbf{A}$, $\mathbf{B}$, $\mathbf{C}$, $\mathbf{D}$)을 병렬·직렬·피드백 방식으로 구성하여 동작을 나타내게 된다. 시스템 차수가 높을수록 이 블록선도는 복잡해지지만, 직관적으로 상태변수들이 어떤 경로로 상호작용하는지 확인할 수 있다. 반대로, 블록선도가 복잡하더라도 이를 등가 전달함수 한 개로 축약할 수 있다면, 상태공간 표현보다 더 직관적인 해석이 가능할 때도 있다.

#### 컴퓨터 시뮬레이션과 블록선도

현대 제어공학 설계에서는 소프트웨어 도구(Simulink, LabVIEW 등)를 이용해 블록선도를 시뮬레이션 모델로 작성하고, 시간영역이나 주파수영역 해석을 병행한다. 이러한 환경에서는 가상의 블록선도가 실제 하드웨어 설계 전에 성능을 예측·검증해주는 역할을 담당한다. 실제로 전원회로나 전기기계계, 센서·액추에이터가 복합적으로 얽힌 시스템을 단시간에 해석하기 위해 블록선도 기반 시뮬레이션이 광범위하게 쓰인다.

소프트웨어상에서는 블록 아이콘에 전달함수나 상태공간, 혹은 특수 연산 등을 지정할 수 있고, 선을 연결함으로써 데이터 흐름을 설정한다. 이때 합성점, 분기점, 피드백 선을 쉽게 드래그해서 배치할 수 있으므로, 제어계 설계나 튜닝 과정을 반복적으로 수행하기가 용이해진다. 오버슈트나 안정성 분석도 시뮬레이션 결과로 즉시 확인할 수 있으므로, 전통적인 수작업 해석과 함께 활용할 수 있다.

#### C++ 예제: 간단한 블록선도 시뮬레이션

블록선도를 컴퓨터 프로그램으로 직접 구현할 수도 있다. 예컨대, $G(s) = \frac{1}{s+2}$와 같은 1차 동적 블록(연속시간 전달함수)을 간단히 오일러(Euler) 적분 방식으로 이산화하여 시뮬레이션하는 코드를 예시로 들어보자.

```cpp
#include <iostream>
#include <cmath>

// 간단한 1차 계 G(s) = 1/(s+2) 를
// y'(t) = -2y(t) + u(t)에 해당하는 상태방정식으로 치환하고
// 오일러 적분으로 시뮬레이션.

double updateState(double currentState, double input, double dt) {
    // y_dot(t) = -2 * y(t) + u(t)
    double derivative = -2.0 * currentState + input;
    double nextState = currentState + derivative * dt;
    return nextState;
}

int main() {
    double dt = 0.01;
    double simulationTime = 2.0;
    double numSteps = simulationTime / dt;
    
    double state = 0.0;  // 초기 출력 y(0)
    double input = 1.0;  // 계에 들어가는 입력 (단위스텝으로 가정)
    
    for(int i = 0; i < numSteps; i++) {
        state = updateState(state, input, dt);
        double time = i * dt;
        std::cout << time << " " << state << std::endl;
    }
    
    return 0;
}
```

이 코드는 $G(s) = \frac{1}{s+2}$ 형태의 단일 블록을 이산화하여, 매 시간 단계마다 상태(출력)를 업데이트한다. 실제 제어계 시뮬레이션에서는 여러 블록을 상호 연결하고, 각 블록에 해당하는 상태방정식을 연산 순서에 맞추어 갱신하면 블록선도 전체를 모사할 수 있다. 시뮬레이션 결과를 통해 시스템의 과도 응답, 정상상태 값을 확인할 수 있으며, 제어기 설계 시 각 블록(예: PID 블록)의 파라미터를 바꿔 가며 응답 특성을 시험해볼 수 있다.

#### 비선형 블록선도와 선형화

실제 제어계에서는 스위치 동작, 포화(saturation), 마찰, 죽음영역(dead zone) 등으로 인해 비선형 특성이 포함되는 경우가 많다. 이때도 블록선도를 이용하여 시스템의 구조를 개략적으로 표시할 수 있으나, 전달함수 기반의 선형 해석은 그대로 적용하기 어렵다. 비선형 블록을 하나의 연산 블록 또는 함수로 나타내고, 그 외 선형 블록들과의 상호작용을 시각적으로 표현할 수는 있으나, 고전적인 선형 블록선도 간소화 기법은 불가능하거나 매우 제한적으로만 쓰인다.

비선형 블록선도를 선형화(linearization) 기법을 통해 근사적으로 해석하는 방법이 종종 활용된다. 특정 동작점 근방에서 테일러 전개를 수행하여 비선형 함수를 1차 근사 형태로 바꾸면, 결과적으로 선형 블록선도를 구성할 수 있게 된다. 이를 통해 국소 안정성 및 응답 특성을 분석한 뒤, 실제 시스템에서 비선형 요소가 크게 작용하지 않는 범위를 가정하는 식으로 접근한다. 컴퓨터 시뮬레이션 도구에서도 내부적으로 자동 선형화를 지원하기도 하므로, 하나의 블록을 비선형 함수로 두고 특정 운전점을 지정해 해석하면 선형 상태공간 행렬이나 전달함수를 얻을 수 있다.

#### 시간지연 블록과 퍼블릭(Dead Time) 처리

프로세스 제어 분야에서 자주 등장하는 시간지연(dead time)을 블록선도로 표현하면, 입력을 일정 시간만큼 지연시킨 뒤 출력으로 전달하는 블록을 추가하게 된다. 예를 들어 지연시간이 $\tau$인 블록은 라플라스 영역에서 $e^{-\tau s}$로 표현된다. 이와 같은 시간지연 블록은 주파수응답 해석에 큰 영향을 미치며, 폐루프 안정성 한계에도 중요하게 작용한다.

블록선도에서 시간지연이 포함되면, 단순한 다항식 전달함수와 달리 초월함수(exponential) 형태가 등장하므로, 고전적인 폐루프 전형 공식이나 단일 루프 간소화에 곧바로 대입하기 어려울 수 있다. 그러나 신호 흐름 자체는 동일하게 파악할 수 있으므로, 블록선도 상에서 $G(s)e^{-\tau s}$처럼 표기하고, 시뮬레이션이나 근사화를 통해 해석하는 방법이 주로 쓰인다.

#### 디지털 블록선도와 $z$-영역 표현

디지털 제어계에서는 제어기와 시스템 간의 연산이 이산화되어 샘플링 주기 $T\_s$마다 갱신된다. 이를 블록선도로 나타낼 때는 $z$-영역 전달함수를 적용하는 것이 일반적이다. 예를 들어 디지털 PID 제어기를 $z$-영역 블록으로 표시하고, 샘플링 및 홀딩(Zero-Order Hold) 블록을 별도로 나타내어 시스템과의 상호작용을 도식화할 수 있다.

디지털 블록선도에서는 다음과 같은 요소가 포함될 수 있다.

$ZOH$ 블록: 샘플링된 신호를 다음 샘플링 시점까지 유지하는 역할 $G(z)$ 블록: 이산화된 전달함수 $G(s)$ 블록과 $ZOH$ 간의 결합: 연속시간 플랜트와 이산 제어기의 상호 작용

전체적으로, 입력부터 출력까지 가는 경로에 연속-이산 변환 블록과 이산-연속 변환 블록이 삽입되어 복합적인 구조를 이룰 수 있다. 블록선도 상에서 각 변환점마다 신호가 아날로그에서 디지털로, 디지털에서 아날로그로 전환되므로, 신호선의 흐름을 명확히 구분해 주어야 한다.

#### MIMO 블록선도의 행렬 형태 표현

다중입력 다중출력(MIMO) 시스템에서 하나의 블록에 행렬 전달함수를 쓰는 경우, 블록선도는 입력 벡터와 출력 벡터를 화살표 한 줄로 표시하지만 실제로는 여러 채널이 묶여 있다고 해석한다. 예를 들어,

$$
\mathbf{Y}(s) =  \begin{pmatrix} Y\_1(s)\ Y\_2(s) \end{pmatrix} ,\quad \mathbf{X}(s) = \begin{pmatrix} X\_1(s)\ X\_2(s) \end{pmatrix}
$$

라 할 때, $\mathbf{G}(s)$가 $2 \times 2$ 행렬 전달함수를 포함한다면,

$$
\mathbf{G}(s) =  \begin{pmatrix} G\_{11}(s) & G\_{12}(s)\ G\_{21}(s) & G\_{22}(s) \end{pmatrix}
$$

와 같은 형태가 된다. 블록선도 상에서는 $\mathbf{G}(s)$를 하나의 큰 블록으로 그리고, 입력 $\mathbf{X}(s)$와 출력 $\mathbf{Y}(s)$를 각각 다중선(multi-line) 혹은 단일화살표로 표시하기도 한다.

추가로, MIMO 시스템에서 피드백 구조를 나타낼 때는 각각의 출력 성분이 어떤 경로로 피드백되어 어떤 입력 채널과 어떻게 합성되는지 꼼꼼히 표시해야 한다. 이를 간소화하려면, 행렬 형태의 폐루프 전달함수를 유도하거나, 상태공간 표현으로 바꾸어서 분석하는 방안이 주로 쓰인다.

#### 기타 고급 적용: 순환 블록, 스위칭 블록, 조건부 블록

일부 제어계 또는 신호 처리 계에서 특정 조건이 충족될 때만 활성화되는 스위칭(switching) 블록, 또는 논리적 조건에 따라 경로가 달라지는 조건부 블록(if-else 형식)이 포함될 수 있다. 블록선도 상에서는 일반적인 선형 블록과 달리 스위칭 또는 조건부 블록은 별도의 아이콘이나 기호로 표현하며, 신호 흐름이 분기되는 지점에서 조건식을 명시하기도 한다.

이러한 구조는 선형 시스템 해석으로 접근하기가 어려우며, 시스템 전체 작동을 시뮬레이션 툴로 단계별 모사하거나, 이벤트 기반 접근을 통해 해석해야 한다. 또 순환(cyclic) 블록이 나타나는 특별한 응용에서도 마찬가지로, 단순한 전달함수 형태로 환원하기가 힘들기 때문에, 상태 기반, 이벤트 기반, 또는 특수 알고리즘을 통한 시뮬레이션 기법이 활용된다.

#### 블록선도 작성 시 주의사항

블록선도를 그릴 때는 아래와 같은 주의가 필요하다.

시스템 경계 구분: 외부 입력과 출력이 어디서 들어오고 어디로 나가는지 명확히 표시하여, 분석 범위를 분명히 한다 합성점/분기점 부호: 합성점에서 더하는 신호와 빼는 신호의 부호를 잘못 기입하면 분석 전체가 달라질 수 있으므로, 블록선도 상에서 “+” 또는 “–” 기호를 명확히 적는다 피드백 경로의 경로식: 복잡한 피드백 루프가 있을 때는, 내부 변수를 정의해두고 그 관계식을 먼저 써 본 뒤 블록선도와 일치하는지 점검한다 블록선도 단순화 시 일관성: 합성점 이동, 분기점 이동, 직렬·병렬·피드백 결합 규칙 등을 적용할 때, 중간 과정에서 신호가 바뀌지 않았는지 계속 추적한다 디지털·아날로그 혼합 시 신호 타입 구분: 샘플링된 신호인지, 연속 신호인지, 혹은 멀티레이트(Multi-rate) 신호인지 명확히 구분해야 오차 없는 해석이 가능하다

이러한 주의사항을 지켜 블록선도를 정확하게 작성하면, 제어계 해석 및 설계를 훨씬 수월하게 진행할 수 있다. 특히 여러 구성요소나 복수의 제어 루프가 동시에 얽힐수록 블록선도를 잘 구성해 두는 것이 필수다. 블록선도라는 큰 밑그림을 통해 시스템 전체를 조망하고, 이후 각 부분의 동작을 정교하게 분석하는 과정이 제어공학의 핵심이라고 할 수 있다.
