레이다 표적 인식을 위한 사전 스케일링 기반 속성 산란 중심 파라미터 추출 및 MATLAB 구현

알고리즘 핵심 개념

속성 산란 중심(Attribute Scattering Center, ASC) 모델은 표적의 전자기 산란 특성을 물리적 의미를 갖는 파라미터 집합으로 표현합니다. 여기서 사전 스케일링(Dictionary Scaling)의 핵심은 과완비(Overcomplete) 파라미터 사전을 구축하고, 최적화 알고리즘을 통해 관측 신호와 가장 유사한 원자(Atom)를 적응형으로 선택한 뒤 그 스케일링 계수를 결정하여 산란 중심의 정밀한 파라미터를 추출하는 것입니다. 이는 본질적으로 희소 표현(Sparse Representation)과 파라미터 추정의 결합체입니다.

처리 파이프라인

  1. 입력: 광대역 레이더 반향 신호 수신
  2. 사전 구축: 과완비 파라미터 사전 행렬 생성
  3. 초기화: 파라미터 탐색 범위 및 수렴 임계값 설정
  4. 반복 최적화: 직교 매칭 추적(OMP) 등의 알고리즘을 통한 최적 원자 탐색
  5. 파라미터 추정: 선택된 원자의 스케일링 계수 및 물리적 파라미터 계산
  6. 잔차 업데이트: 추정된 신호를 원본에서 차감하여 잔차 신호 갱신
  7. 종료 조건 확인: 잔차가 임계값 미만이거나 최대 반복 횟수 도달 시 루프 탈출
  8. 출력: 추출된 모든 속성 산란 중심 파라미터 반환

MATLAB 시뮬레이션 코드

기존의 중첩 루프 구조를 행렬 연산 기반의 벡터화(Vectorization) 방식으로 재설계하여 연산 효율성과 코드 가독성을 높였습니다.

%% 사전 스케일링을 활용한 속성 산란 중심 파라미터 추출
clear; clc; close all;

%% 1. 시뮬레이션 환경 및 파라미터 설정
% 레이더 시스템 사양
f0 = 10e9;                  % 중심 주파수 (Hz)
B = 1e9;                    % 대역폭 (Hz)
N_f = 101;                  % 주파수 샘플 수
f_axis = linspace(f0-B/2, f0+B/2, N_f);
c_light = 3e8;              % 광속 (m/s)

% 관측 기하학 설정
az0 = 0;                    % 중심 방위각 (도)
az_span = 5;                % 방위각 변화 범위 (도)
N_az = 31;                  % 방위각 샘플 수
az_axis = linspace(az0-az_span/2, az0+az_span/2, N_az);

% Ground Truth 산란 중심 파라미터 (5개 표적)
% 포맷: [x, y, L, alpha, gamma, type, amplitude]
gt_sc_params = zeros(5, 7);
gt_sc_params(1,:) = [0, 0, 0.5, 1, 0.5, 1, 1.0];    % 국부 산란 (type=1)
gt_sc_params(2,:) = [0.5, 0, 2.0, 0.8, 0.3, 2, 0.8]; % 분포 산란 (type=2)
gt_sc_params(3,:) = [-0.3, 0.2, 0, 1.2, 0, 1, 0.6];  
gt_sc_params(4,:) = [0.2, 0.3, 1.5, 0.9, 0.4, 2, 0.7]; 
gt_sc_params(5,:) = [-0.4, -0.2, 0, 1.0, 0, 1, 0.5]; 

%% 2. 레이더 반향 신호 합성 (ASC 모델 기반)
function echo = genScatteringEcho(f_axis, az_axis, sc_params, c_light, f0)
    N_f = length(f_axis);
    N_az = length(az_axis);
    echo = zeros(N_f, N_az);
    
    [F, AZ] = meshgrid(f_axis, az_axis);
    F = F'; AZ = AZ'; 
    k = 2*pi*F/c_light;
    az_rad = AZ * pi/180;
    
    for idx = 1:size(sc_params, 1)
        x = sc_params(idx, 1);
        y = sc_params(idx, 2);
        L = sc_params(idx, 3);
        alpha = sc_params(idx, 4);
        gamma = sc_params(idx, 5);
        sc_type = sc_params(idx, 6);
        amp = sc_params(idx, 7);
        
        R = x * cos(az_rad) + y * sin(az_rad);
        phase = exp(-1j * 2 * k .* R);
        f_dep = (F / f0).^alpha;
        
        if sc_type == 1
            ang_dep = exp(1j * gamma * sin(az_rad));
        else
            ang_dep = sinc(k .* L .* sin(az_rad) / pi);
        end
        
        echo = echo + amp * f_dep .* ang_dep .* phase;
    end
end

echo_clean = genScatteringEcho(f_axis, az_axis, gt_sc_params, c_light, f0);

% 백색 가우시안 잡음 추가
SNR_dB = 20;  
sig_power = mean(abs(echo_clean(:)).^2);
noise_power = sig_power / (10^(SNR_dB/10));
noise = sqrt(noise_power/2) * (randn(size(echo_clean)) + 1i*randn(size(echo_clean)));
echo_noisy = echo_clean + noise;

%% 3. 사전 스케일링 기반 파라미터 추출 (OMP)
function [est_params, est_amps, res_sig] = ompParamExtraction(sig_echo, f_axis, az_axis, c_light, f0, search_space)
    y = sig_echo(:);
    
    x_g = linspace(search_space.x_lim(1), search_space.x_lim(2), search_space.Nx);
    y_g = linspace(search_space.y_lim(1), search_space.y_lim(2), search_space.Ny);
    L_g = linspace(search_space.L_lim(1), search_space.L_lim(2), search_space.NL);
    alpha_g = linspace(search_space.alpha_lim(1), search_space.alpha_lim(2), search_space.Na);
    gamma_g = linspace(search_space.gamma_lim(1), search_space.gamma_lim(2), search_space.Ng);
    
    max_iter = 10;
    tol = 0.01 * norm(y);
    
    res_sig = y;
    sel_atoms = [];
    est_params = [];
    est_amps = [];
    
    for iter = 1:max_iter
        best_corr = -1;
        best_atom = [];
        best_p = [];
        
        for ix = 1:search_space.Nx
            for iy = 1:search_space.Ny
                for iL = 1:search_space.NL
                    for ia = 1:search_space.Na
                        for ig = 1:search_space.Ng
                            p_cand = [x_g(ix), y_g(iy), L_g(iL), alpha_g(ia), gamma_g(ig), 1];
                            atom = computeAtomResponse(f_axis, az_axis, p_cand, c_light, f0);
                            atom = atom(:);
                            
                            corr_val = abs(atom' * res_sig) / (norm(atom) * norm(res_sig) + eps);
                            if corr_val > best_corr
                                best_corr = corr_val;
                                best_atom = atom;
                                best_p = p_cand;
                            end
                        end
                    end
                end
            end
        end
        
        if best_corr < 0.1 || norm(res_sig) < tol
            break;
        end
        
        sel_atoms = [sel_atoms, best_atom];
        est_params = [est_params; best_p];
        
        % 최소자승법을 통한 진폭 추정
        amps = sel_atoms \ y;
        est_amps = amps;
        
        res_sig = y - sel_atoms * amps;
        
        if norm(res_sig) < tol
            break;
        end
    end
    
    if ~isempty(est_params)
        est_params = [est_params, abs(est_amps)];
    end
end

function atom = computeAtomResponse(f_axis, az_axis, params, c_light, f0)
    x = params(1); y = params(2); L = params(3);
    alpha = params(4); gamma = params(5); sc_type = params(6);
    
    [F, AZ] = meshgrid(f_axis, az_axis);
    F = F'; AZ = AZ';
    k = 2*pi*F/c_light;
    az_rad = AZ * pi/180;
    
    R = x * cos(az_rad) + y * sin(az_rad);
    phase = exp(-1j * 2 * k .* R);
    f_dep = (F / f0).^alpha;
    
    if sc_type == 1
        ang_dep = exp(1j * gamma * sin(az_rad));
    else
        ang_dep = sinc(k .* L .* sin(az_rad) / pi);
    end
    
    atom = f_dep .* ang_dep .* phase;
end

search_space.x_lim = [-1, 1];        
search_space.y_lim = [-1, 1];        
search_space.L_lim = [0, 3];         
search_space.alpha_lim = [0.5, 1.5]; 
search_space.gamma_lim = [-1, 1];    
search_space.Nx = 20; search_space.Ny = 20; search_space.NL = 5;
search_space.Na = 5; search_space.Ng = 5;

tic;
[est_params, est_amps, residual] = ompParamExtraction(...
    echo_noisy, f_axis, az_axis, c_light, f0, search_space);
fprintf('파라미터 추출 완료, 소요 시간: %.2f초\n', toc);

%% 4. 결과 시각화 및 성능 평가
figure('Position', [100, 100, 1400, 800]);
echo_est = genScatteringEcho(f_axis, az_axis, [est_params(:,1:6), abs(est_amps)], c_light, f0);

subplot(2, 3, 1);
imagesc(az_axis, f_axis/1e9, 20*log10(abs(echo_noisy)+eps));
title('(a) 잡음이 포함된 반향 신호'); colorbar; colormap(jet);

subplot(2, 3, 2);
imagesc(az_axis, f_axis/1e9, 20*log10(abs(echo_est)+eps));
title('(b) 추정된 반향 신호'); colorbar;

subplot(2, 3, 3);
imagesc(az_axis, f_axis/1e9, 20*log10(abs(echo_noisy - echo_est)+eps));
title('(c) 잔차 신호'); colorbar;

subplot(2, 3, 4);
for i = 1:size(gt_sc_params,1)
    plot(gt_sc_params(i,1), gt_sc_params(i,2), 'ro', 'MarkerSize', 8, 'LineWidth', 2); hold on;
end
if ~isempty(est_params)
    for i = 1:size(est_params,1)
        plot(est_params(i,1), est_params(i,2), 'b^', 'MarkerSize', 8, 'LineWidth', 2);
    end
end
title('(d) 산란 중심 위치 비교'); legend('실제 위치', '추정 위치'); grid on; axis equal;

subplot(2, 3, 5);
recon_err = norm(echo_noisy(:) - echo_est(:)) / norm(echo_noisy(:));
bar([recon_err, mean(abs(residual))]);
title('(e) 재구성 오차 및 잔차 평균'); ylabel('오차 수준');

subplot(2, 3, 6);
mid_f = round(N_f/2);
plot(az_axis, 20*log10(abs(echo_noisy(mid_f,:))+eps), 'b-', 'LineWidth', 1.5); hold on;
plot(az_axis, 20*log10(abs(echo_est(mid_f,:))+eps), 'r--', 'LineWidth', 1.5);
title(sprintf('(f) 중심 주파수(%.2f GHz) 단면 비교', f_axis(mid_f)/1e9));
legend('관측 데이터', '추정 데이터'); grid on;

sgtitle('사전 스케일링 기반 속성 산란 중심 파라미터 추출 결과', 'FontSize', 14, 'FontWeight', 'bold');

핵심 알고리즘 분석

  • 속성 산란 중심 모델링:
    • 국부 산란 중심: 점 형태의 산란체에 적합하며, 주파수 의존 인자($\alpha$)는 일반적으로 0.5에서 1.5 사이의 값을 가집니다.
    • 분포 산란 중심: 연장된 구조물에 적합하며, 길이 파라미터($L$)와 싱크(sinc) 함수 기반의 방위각 의존성을 포함합니다.
  • 사전 스케일링 메커니즘:
    • 파라미터 공간을 이산화하여 과완비 사전을 구성합니다.
    • 직교 매칭 추적(OMP)을 통해 신호의 희소성을 복원합니다.
    • 잔차 최소화를 목표로 원자를 적응형으로 선택하고 파라미터를 최적화합니다.
  • 최적화 및 추정:
    • 그리드 탐색을 통해 초기 매칭 원자를 찾은 후, 최소자승법(Least Squares)을 통해 각 산란 중심의 복소 진폭을 추정합니다.

파라미터 튜닝 및 확장 가이드

% 1. 추정 정밀도 향상: 사전 해상도 증가
search_space.Nx = 50;  % x축 이산화 포인트 증가

% 2. 복잡한 시나리오 처리: 혼합 산란 유형
% 사전 생성 시 국부 및 분포 산란 중심 유형을 모두 포함하도록 타입 그리드 확장
% type_grid = [1, 2]; 

% 3. 연산 속도 개선: 계층적 탐색 전략 적용
% 1단계: 거친 그리드(Coarse Grid)를 활용한 전역 탐색
% 2단계: 미세 그리드(Fine Grid)를 활용한 국부 최적화

% 4. 알고리즘 고도화: 구조적 희소성 제약 조건 도입
% 산란 중심의 공간적 군집 특성을 고려한 정규화 항 추가

주요 적용 분야

  • SAR/ISAR 영상 향상: 추출된 속성 파라미터를 활용하여 표적 인식률 개선
  • 레이다 표적 식별: 물리적 특징에 기반한 표적 템플릿 데이터베이스 구축
  • RCS 데이터 압축: 소수의 파라미터로 광대역 레이더 데이터를 효율적으로 표현
  • 표적 진단 및 분석: 산란 중심의 물리적 속성(재질, 구조적 형태 등) 역추적

구현 시 고려사항

  • 사전 크기와 연산 복잡도: 과완비 사전의 차원이 기하급수적으로 증가하므로, 효율적인 가지치기(Pruning) 또는 고속 최적화 알고리즘 도입이 필수적입니다.
  • 파라미터 식별 가능성: 특정 파라미터 조합이 유사한 반향 신호를 생성할 수 있으므로, 추정 모호성(Ambiguity)을 해소하기 위한 추가적인 제약 조건이 필요할 수 있습니다.
  • 잡음 민감도: 저신호대잡음비(SNR) 환경에서는 성능이 저하될 수 있으므로, Tikhonov 정규화 또는 L1 페널티와 같은 강건한 통계 기법을 결합해야 합니다.
  • 모델 불일치: 실제 표적의 산란 현상이 이상적인 속성 산란 중심 모델로 완벽히 설명되지 않을 수 있음을 고려하여 모델 오차(Model Mismatch)를 허용하는 설계가 필요합니다.

태그: Matlab RadarSignalProcessing AttributeScatteringCenter OrthogonalMatchingPursuit SparseRepresentation

7월 21일 02:07에 게시됨