이중 임계값 에너지 탐지 기반 인지 무선 시뮬레이션

기존 단일 임계값 방식의 소음 변동 민감도 문제를 해결하는 알고리즘입니다.

알고리즘 개요

1. 신호 모델

  • H₀(빈 스펙트럼): $y(n) = w(n)$
  • H₁(점유 스펙트럼): $y(n) = h \cdot s(n) + w(n)$

2. 에너지 통계량

$$T(y) = \sum_{n=1}^{N} |y(n)|^2 $$

3. 이중 임계값 판단 규칙

에너지 $T(y)$ 판단 결과
$T < \lambda_1$ 빈 상태 (H₀)
$\lambda_1 \le T \le \lambda_2$ 불확실 구간
$T > \lambda_2$ 점유 상태 (H₁)

MATLAB 주요 시뮬레이션 코드


multi_level_detection.m

clc; clear; close all;

%% 시뮬레이션 파라미터
sample_points = 2048;         % 샘플 수
snr_range = -15:1:15;        % SNR 범위 (dB)
monte_carlo_trials = 4000;   % 몬테카를로 시뮬레이션 횟수

% 동적 임계값 설정
threshold_low  = 0.7;        % 낮은 임계값
threshold_high = 1.2;        % 높은 임계값

detection_prob = zeros(size(snr_range)); 
false_alarm = zeros(size(snr_range)); 

%% 메인 루프
for idx = 1:length(snr_range)
    detected = 0;
    false_alarm_count = 0;

    for trial = 1:monte_carlo_trials
        % H0: 순수 소음
        noise_h0 = randn(sample_points,1) + 1j*randn(sample_points,1);
        energy_h0 = sum(abs(noise_h0).^2) / sample_points;

        % H1: 신호 + 소음
        data_signal = sqrt(1/2) * randn(sample_points,1); % BPSK 신호
        received = awgn(data_signal, snr_range(idx), 'measured');
        energy_h1 = sum(abs(received).^2) / sample_points;

        % 가상 경고 확률 계산
        if energy_h0 > threshold_high
            false_alarm_count = false_alarm_count + 1;
        end

        % 탐지 확률 계산
        if energy_h1 > threshold_high
            detected = detected + 1;
        end
    end

    detection_prob(idx) = detected / monte_carlo_trials;
    false_alarm(idx) = false_alarm_count / monte_carlo_trials;
end

%% 시각화
figure('Color','white','Position',[100 100 600 400]);
plot(snr_range, detection_prob, 'b-o', 'LineWidth', 2); hold on;
plot(snr_range, false_alarm, 'r--s', 'LineWidth', 2);
grid on;

xlabel('SNR (dB)');
ylabel('확률');
legend('탐지율', '가상 경고율');
title('이중 임계값 에너지 탐지 성능');
set(gca, 'FontSize', 12);

소음 변동 대응 동적 임계값


실제 하드웨어(예: STM32 + ADC) 환경에서 소음 전력 변동을 고려한 설정:

% 소음 전력 추정값
noise_power = 1.0;   
uncertainty_factor = 0.15;  % ±15% 변동 범위

threshold_low  = noise_power * (1 - uncertainty_factor);
threshold_high = noise_power * (1 + uncertainty_factor);

세 가지 판단 출력


function result = spectrum_analysis(energy, low_threshold, high_threshold)
    if energy < low_threshold
        result = 0;   % 빈 상태
    elseif energy > high_threshold
        result = 1;   % 점유 상태
    else
        result = -1;  % 협동 탐지 요청
    end
end

참고 코드: 인지 무선 에너지 탐지 연구 www.youwenfan.com/contentcnu/63582.html

성능 비교(단일 vs 이중 임계값)


지표 단일 임계값 이중 임계값
소음 변동 대응
가상 경고율 높음 낮음
구현 복잡도 간단 중간
적용 분야 실험실 실제 CR 네트워크

확장 기능


  • 협동 스펙트럼 탐지(다중 사용자 통합)
  • ROC 커브($P_d$ vs $P_f$)
  • AWGN/레이리/리케이 채널 지원
  • FPGA/STM32 정수형 구현

태그: MATLAB 시뮬레이션 이중 임계값 알고리즘 에너지 검출 기술 인지 무선 네트워크 스펙트럼 탐지

5월 23일 03:24에 게시됨