1. 개요
초음속 풍동(Supersonic Wind Tunnel) 시험에서 비행체 주위에 형성되는 충격파(Shock Wave)와 팽창파(Expansion Fan)는 유체 밀도의 극심한 불연속 변화를 유발하며, 이는 글래드스톤-데일(Gladstone-Dale) 관계식에 따라 국소 굴절률 구배를 형성합니다. 나이프 에지(Knife Edge)를 이용한 슐리렌(Schlieren) 광학계는 굴절률 1차 미분값(\(\partial \rho / \partial y\))에 의한 광선 편향 각도를 밝기(조도) 차이로 가시화합니다. 그러나 극초음속 기류에 수반되는 난류 경계층 요동은 광선에 심각한 고주파 위상 왜곡을 초래하여 충격파 위치 정밀 계측을 방해합니다. 본 고에서는 슐리렌 명암 신호를 10,000Hz 0-Alloc C# 엔진으로 고속 해석하여 충격파 각도(\(\beta\))와 마하수를 역추정하고 가변 디퓨저 램프 위치를 제어하는 서보 아키텍처를 구현합니다.
2. 수학적 모델링 및 지배 방정식
기체 밀도 \(\rho\)와 굴절률 \(n\) 사이의 글래드스톤-데일 관계식 및 광선 편향각 \(\epsilon_y\)는 다음과 같습니다:
나이프 에지에 의한 상대 조도 변화율 \(\frac{\Delta I}{I_0} = \frac{f}{a} \epsilon_y\) (\(f\): 초점거리, \(a\): 차단되지 않은 광원 크기)로부터 충격파 전후의 란킨-위고니오(Rankine-Hugoniot) 경사 충격파 압력비 및 밀도비를 산출합니다:
충격파 위치 진동 \(\Delta x_{shock}\)을 나이프 에지 광도 오차로부터 10,000Hz 속도로 추출하여 풍동 흡입구 가변 경사 램프의 유압 서보 밸브를 제어합니다.
3. 실시간 피드백 제어 아키텍처
4. 고성능 0-Alloc C# 서보 엔진 구현
GC 지연 없이 10,000Hz 주기로 슐리렌 센서 신호를 받아 충격파 위치와 가변 램프를 실시간 제어하는 C# 구조입니다:
using System;
using System.Runtime.CompilerServices;
namespace ZeliDesk.Stem.Schlieren
{
public readonly record struct SchlierenConfig(
double GladstoneDaleConstantK, // 공기 글래드스톤-데일 상수 (약 0.000226 m^3/kg)
double FocalLengthM, // 슐리렌 거울 초점거리 f (예: 1.5 m)
double KnifeEdgeCutoffMm, // 나이프 에지 초기 차단 폭 (예: 2.0 mm)
double SpecificHeatRatioGamma, // 비열비 γ (공기: 1.4)
double TargetShockAngleDeg // 목표 경사 충격파 각도 (예: 32.5도)
);
public ref struct SchlierenServoState
{
public double EstimatedDensityGradientKgPerM4;
public double MeasuredShockAngleDeg;
public double EstimatedMachNumber;
public double RampActuatorCommandMm;
public bool IsShockwaveStable;
}
public static class SchlierenServoEngine
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void UpdateSchlierenServo(
in SchlierenConfig cfg,
ref SchlierenServoState state,
double measuredIntensityRatioDeltaI,
double upstreamStagnationPressureKpa,
double downstreamStaticPressureKpa)
{
// 1. 슐리렌 명암 변화율로부터 광선 편향각 ε 및 밀도 구배 산출
// ΔI / I0 = (f / a) * ε
double deflectionAngleRad = (measuredIntensityRatioDeltaI * (cfg.KnifeEdgeCutoffMm * 1e-3)) / cfg.FocalLengthM;
const double TestSectionWidthM = 0.20; // 20cm 시험부
state.EstimatedDensityGradientKgPerM4 = deflectionAngleRad / (cfg.GladstoneDaleConstantK * TestSectionWidthM);
// 2. 압력비 기반 마하수 및 경사 충격파 각도 추정
double pressureRatio = Math.Max(1.0, downstreamStaticPressureKpa / Math.Max(1.0, upstreamStagnationPressureKpa));
// 간이 마하수 역산: P2/P1 = 1 + 2γ/(γ+1) * (M^2 sin^2(β) - 1)
double normalMachSquared = 1.0 + (pressureRatio - 1.0) * (cfg.SpecificHeatRatioGamma + 1.0) / (2.0 * cfg.SpecificHeatRatioGamma);
double normalMach = Math.Sqrt(Math.Max(1.0, normalMachSquared));
// 충격파 각도 추정 (밀도 구배 방향각 기반)
state.MeasuredShockAngleDeg = Math.Clamp(Math.Asin(Math.Min(1.0, normalMach / 3.5)) * (180.0 / Math.PI), 15.0, 85.0);
state.EstimatedMachNumber = normalMach / Math.Sin(state.MeasuredShockAngleDeg * Math.PI / 180.0);
// 3. 충격파 각도 편차에 따른 유압 램프 변위 지령 산출
double angleErrorDeg = state.MeasuredShockAngleDeg - cfg.TargetShockAngleDeg;
state.RampActuatorCommandMm = Math.Clamp(-0.25 * angleErrorDeg, -5.0, 5.0);
// 4. 충격파 안정 판정 (|Δβ| < 0.5도)
state.IsShockwaveStable = Math.Abs(angleErrorDeg) < 0.5;
}
}
}
5. 교육 및 산업 응용 가치
본 서보 시스템은 초음속 항공기 엔진 흡입구의 충격파 위치 안정화(Shock Trap Control)와 초고속 공력 탄성학 연구에 직결됩니다. 중·고교 및 대학 물리/지구과학 교육과정에서는 눈에 보이지 않는 공기의 밀도와 충격파를 빛의 굴절을 통해 가시화하는 슐리렌 광학 원리를 체험형 시뮬레이션으로 완벽히 제공합니다.