기존 단일 임계값 방식의 소음 변동 민감도 문제를 해결하는 알고리즘입니다.
알고리즘 개요
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 정수형 구현