1. 개요
현대전의 유무인 복합해양전투(MUM-T)에서 잠수함은 적의 광역 전자기 감시망(ESM)에 전파 방사를 노출시키지 않고 공중 무인기(UAV) 및 해상 수상정(USV)과 기가비트(Gbps)급 대용량 전술 데이터를 교환해야 합니다. 전파를 일절 방사하지 않는 마스트 탑재 자유공간 광통신(Free-Space Optical Communications, FSOC)은 1550nm 근적외선 협각 레이저 빔을 활용하여 은밀한 초고속 링크를 제공합니다. 그러나 거친 파도에 의한 잠수함 마스트의 6자유도 각운동(Pitch/Roll/Yaw)과 해면 대기 난류(Atmospheric Turbulence)로 인한 빔 방황(Beam Wander)은 직경 수 마이크로라디안(\(\mu\text{rad}\))에 불과한 빔을 순식간에 시야각 밖으로 이탈시킵니다. 이를 보상하기 위해 조동 짐벌(Coarse Gimbal)과 압전 구동 2축 고속 미러(Fine Steering Mirror, FSM)를 연동하는 2단 빔 획득·지향·추적(Pointing, Acquisition, Tracking, PAT) 루프가 운용됩니다. 본 고에서는 10,000Hz 온디바이스 루프에서 사분할 광다이오드(QPD) 신호를 기반으로 나노라디안 분해능으로 미러를 제어하는 0-Alloc C# 엔진을 구현합니다.
2. 수학적 모델링 및 지배 방정식
사분할 광다이오드(QPD) 광전류 기반 무차원 빔 중심 편차 \(\epsilon_x, \epsilon_y\) 수식은 다음과 같습니다:
대기 및 마스트 기계 진동 외란을 포함한 2단 FSM 피에조 미러 각변위 지령식은 다음과 같습니다:
광 결합 효율 \(\eta_{couple}\)과 수신단 비트오류율(BER) 지배식은 다음과 같습니다:
3. C# 고성능 온디바이스 서보 엔진 구현
10,000Hz 주기로 마스트 자이로 각속도와 QPD 오차를 융합하여 FSM을 조향하는 0-Alloc C# 엔진입니다.
using System;
using System.Runtime.CompilerServices;
namespace ZeliDesk.Defense.SubmarineFsocPat
{
/// <summary>
/// FSOC QPD 광학 중심 및 자이로 텔레메트리
/// </summary>
public readonly ref struct FsocPatTelemetryState
{
public readonly double QpdPhotodiodeA; // QPD 채널 A 전류 [uA]
public readonly double QpdPhotodiodeB; // QPD 채널 B 전류 [uA]
public readonly double QpdPhotodiodeC; // QPD 채널 C 전류 [uA]
public readonly double QpdPhotodiodeD; // QPD 채널 D 전류 [uA]
public readonly double MastPitchRateRadSec; // 마스트 피치 자이로 각속도 [rad/s]
public readonly double MastYawRateRadSec; // 마스트 요 자이로 각속도 [rad/s]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public FsocPatTelemetryState(double a, double b, double c, double d, double pitchRate, double yawRate)
{
QpdPhotodiodeA = a;
QpdPhotodiodeB = b;
QpdPhotodiodeC = c;
QpdPhotodiodeD = d;
MastPitchRateRadSec = pitchRate;
MastYawRateRadSec = yawRate;
}
}
/// <summary>
/// FSM 고속 조향 미러 2축 각도 지령
/// </summary>
public readonly ref struct FsmSteeringCommand
{
public readonly double ThetaXMicroRad; // FSM X축 미세 조향 각도 [urad]
public readonly double ThetaYMicroRad; // FSM Y축 미세 조향 각도 [urad]
public readonly double ReceivedOpticalPowerMicroW;// 수신 광파워 [uW]
public readonly bool LinkTrackingLocked; // 광추적 잠금 상태
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public FsmSteeringCommand(double thX, double thY, double pOpt, bool locked)
{
ThetaXMicroRad = thX;
ThetaYMicroRad = thY;
ReceivedOpticalPowerMicroW = pOpt;
LinkTrackingLocked = locked;
}
}
/// <summary>
/// 10,000Hz 0-Alloc 잠수함 FSOC PAT 고속 추적 서보 엔진
/// </summary>
public sealed class SubmarineFsocPatServoEngine
{
private const double QpdSensitivity = 150.0; // 150 urad / 정규화 편차단위
private const double FeedforwardGyroGain = 0.98; // 자이로 피드포워드 역보상 게인
private double _intErrX;
private double _intErrY;
private double _currentThX;
private double _currentThY;
public SubmarineFsocPatServoEngine()
{
_intErrX = 0.0;
_intErrY = 0.0;
_currentThX = 0.0;
_currentThY = 0.0;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public FsmSteeringCommand UpdateServoLoop(in FsocPatTelemetryState telemetry, double dtSeconds)
{
double sumI = telemetry.QpdPhotodiodeA + telemetry.QpdPhotodiodeB +
telemetry.QpdPhotodiodeC + telemetry.QpdPhotodiodeD;
if (sumI < 1.0)
{
// 광신호 미검출 (Beam Loss) 시 마스트 자이로 피드포워드만으로 자세 유지
_currentThX -= (telemetry.MastYawRateRadSec * FeedforwardGyroGain * dtSeconds * 1e6);
_currentThY -= (telemetry.MastPitchRateRadSec * FeedforwardGyroGain * dtSeconds * 1e6);
return new FsmSteeringCommand(_currentThX, _currentThY, 0.0, false);
}
// 1. QPD 무차원 중심 편차 산출
double errX = ((telemetry.QpdPhotodiodeA + telemetry.QpdPhotodiodeD) -
(telemetry.QpdPhotodiodeB + telemetry.QpdPhotodiodeC)) / sumI;
double errY = ((telemetry.QpdPhotodiodeA + telemetry.QpdPhotodiodeB) -
(telemetry.QpdPhotodiodeC + telemetry.QpdPhotodiodeD)) / sumI;
// 2. 적분 오차 누적 (Anti-Windup 적용)
_intErrX = Math.Clamp(_intErrX + (errX * dtSeconds), -0.05, 0.05);
_intErrY = Math.Clamp(_intErrY + (errY * dtSeconds), -0.05, 0.05);
// 3. 자이로 피드포워드 + 비례적분 서보 지령
double fwdX = -telemetry.MastYawRateRadSec * FeedforwardGyroGain * 1e6 * dtSeconds;
double fwdY = -telemetry.MastPitchRateRadSec * FeedforwardGyroGain * 1e6 * dtSeconds;
double corrX = (errX * QpdSensitivity) + (_intErrX * 1000.0) + fwdX;
double corrY = (errY * QpdSensitivity) + (_intErrY * 1000.0) + fwdY;
_currentThX = Math.Clamp(_currentThX + corrX, -2500.0, 2500.0); // +/- 2.5 mrad 스트로크 한계
_currentThY = Math.Clamp(_currentThY + corrY, -2500.0, 2500.0);
bool locked = (Math.Abs(errX) < 0.03 && Math.Abs(errY) < 0.03);
return new FsmSteeringCommand(_currentThX, _currentThY, sumI * 0.5, locked);
}
}
}
4. 교육 및 실무 응용 가이드
본 고의 초고속 광추적 빔 제어 기법은 다음 분야에 직접 적용됩니다:
- 해군 MUM-T 무인 잠수정 및 공중 무인기 링크: 전파 침묵 상태에서 기가비트 영상 데이터 전송.
- 방통대 및 군사 광공학 실무연수: QPD 기반 2축 미러 캘리브레이션 및 광난류 수치모델 해석.
- 차세대 잠수함 전자전 마스트: 레이저 인터셉트 회피를 위한 협각 빔 동적 트래킹 알고리즘.
5. 결론
해상 파랑으로 인한 극심한 마스트 진동 환경에서도 QPD 빔 중심 오차와 마스트 자이로 각속도를 완벽히 융합하여 10,000Hz 온디바이스 0-Alloc C# 엔진으로 2축 압전 FSM을 1마이크로라디안 정밀도로 추적하는 잠수함 FSOC PAT 제어 시스템을 완성하였습니다.