본문 바로가기
Python

Google Colab Interactive - Radar Probability of Detection

by 아짱이아빠 2022. 7. 26. 21:59
반응형

Google Colab에서 Interactive를 활용하는 방법에 대해 알아보고 이를 레이다 탐지 확률(Radar Probability of Detection)에 적용하여 각 레이다 파라미터가 탐지 확률 결과에 즉각적으로 반영되는 예제를 만들어 보겠다.

 

Google Colab은 웹 브라우저에서 프로그램 코드를 자유롭게 작성할 수 있는 온라인 에디터이며 파이썬 코딩 시, 주로 사용하는 Jupyter Notebook을 구글 드라이버를 활용해서 이용할 수 있는 버전이라 볼 수 있다.

아나콘다나 터미널을 이용해서 접속할 필요 없이 구글 계정만 있으면 어디서나 접근이 가능하다는 장점이 있다.

그래서 개인적으로는 파이썬으로 해보고 싶은 것이 있으면 쉽게 접속할 수 있고 각 코딩의 결과를 바로 확인할 수 있어서 주로 이 Google Colab을 이용한다.

그러나 단점은 GUI와 관련된 프로그램은 제한적이라는 것이다.

예를 들면 PyQT와 같은 모듈은 사용이 안된다.

 

Interactive는 사전적 의미인 “상호작용을 하는”과 같이 어떤 계산의 결과나 수식에 의한 그래프, 또는 데이터 분류 결과를 얻기 위해 매번 프로그램을 수동적으로 수행하는 대신 사용자가 입력값을 변화시킬 수 있고 그에 따라 결과가 즉각적으로 반영되는 기능이다.

 

이번 프로그램을 위해서는 다음의 라이브러리를 불러와야 한다.

from ipywidgets import interact, interactive
import ipywidgets as widgets
import matplotlib.pyplot as plt
import numpy as np
from scipy.special import erf

앞의 두 개는 interactive 기능을 위한 라이브러리이며 마지막에 있는 것은 레이다 탐지 확률을 계산할 때 사용된다.

 

[단순 방정식의 예]

먼저 변수 x가 있는 아주 단순한 방정식에 대해 적용해 보겠다.

def func(x):
  return 2*x+4

interact(func, x=10)

위와 같이 ‘func’을 정의하고 이후에 interact 문법에 맞게 “func”을 불러오고 x값의 범위를 지정하면 결과는 아래와 같다.

단순 방정식에 대한 interactive 결과-1
(단순 방정식에 대한 interactive 결과-1)

 

마우스나 키보드로 x의 값을 -10부터 10까지 정수 단위로 변경이 가능하며 변경할 때마다 계산 결과가 바뀌게 된다.

 

다음은 변수가 2개인 방정식에 대한 코드와 결과이다.

def multi_func(x,y):
  return 2*y + 2*x + 4

interact(multi_func, x=10, y=10)

단순 방정식에 대한 interactive 결과-2
(단순 방정식에 대한 interactive 결과-2)

 

x와 y는 모두 -10부터 10 사이의 정수에서 바꿀 수 있으며 그에 따라 계산 결과가 반영되어 출력된다.

 

 

[그래프 적용의 예]

다음은 간단한 직선의 그래프에 interactive 기능을 적용한 예이다.

def linear_func(slope, intercept):
  x = np.linspace(-10,10,num=1000)
  plt.ylim(-10,10)
  plt.axvline(color = 'black')
  plt.axhline(color = 'black')
  plt.plot(x, slope*x + intercept, lw=5, color='red')

interactive_plot = interactive(linear_func, slope=(-5.0, 5.0), intercept=(-5.0, 5.0))
output = interactive_plot.children[-1]
interactive_plot

“def” 내부에는 직선을 만들고 그림을 그리는 내용이며 앞에서의 단순한 방정식과 구조는 크게 다르지 않다.

여기서는 slope과 intercept의 변수에 정수가 아닌 실수로 범위를 정해줬는데 이렇게 하면 사용자가 값을 변경할 때에 소수점 단위로 변경이 가능하다.

 

그래프 결과에 대한 interactive 결과-1
(그래프 결과에 대한 interactive 결과-1)

 

위는 결과이며 직선의 기울기와 절편을 소수점 단위로 수정하고 그 결과를 바로 확인할 수 있다.

 

아래는 포물선에 대한 예와 그 결과이다.

def linear_func(slope, intercept):
  x = np.linspace(-10,10,num=1000)
  plt.ylim(-10,10)
  plt.axvline(color = 'black')
  plt.axhline(color = 'black')
  plt.plot(x, x**(2) + slope*x + intercept, lw=5, color='blue')

interactive_plot = interactive(linear_func, slope=(-5.0, 5.0), intercept=(-5.0, 5.0))
output = interactive_plot.children[-1]
interactive_plot

그래프 결과에 대한 interactive 결과-2
(그래프 결과에 대한 interactive 결과-2)

 

[레이다 방정식 적용]

앞에서 배운 interactive 기능을 레이다 방정식에 적용해보겠다.

다음은 레이다 탐지 확률 공식이다.

 

레이다 탐지확률 공식
(레이다 탐지확률 공식)

 

그리고 이 공식을 풀기 위해서는 다음의 신호대 잡음비(S/N) 공식이 필요하다.

 

레이다 신호대 잡음비 공식
(레이다 신호대 잡음비 공식)

 

반응형

 

이 수식을 계산하고 결과를 그래프로 나타내는 부분은 “def”로 정의하고 레이다 탐지 확률에 영향을 주는 파라미터는 모두 interactive 기능으로 구현한다.

def radar_rng(pt, gt, gr, sig, freq, bn, fn, ls):
  sn=[]
  for i in range(1, 140000):
    sn.append(((10*np.log10(pt*1000))+gt+gr+sig+(20*np.log10((3*10**8)/(freq*10**9))))-(30*np.log10(4*(np.pi))+k+temp+(10*np.log10(bn*10**6))+fn+ls+40*np.log10(i)))
    i = i+1

  plt.style.use('fivethirtyeight')
  plt.figure(figsize=(10, 8))
  plt.subplot(2,1,1)
  plt.plot(sn,lw=5, color='blue')

  x = []
  snn = np.array(sn)
  snnn = 10**(snn/10) 
  for i in range(1, len(sn)):
    x.append(0.5*(1+(erf(np.sqrt(0.5+snnn[i]) - np.sqrt(np.log(1/pfa))))))
    i = i+1

  plt.subplot(2,1,2)
  plt.plot(x,lw=5, color='red')

interactive_plot = interactive(radar_rng, pt=(1,500), gt=(0,100), gr=(0,100), sig=(-10,100), freq=(1,20),bn=(1,10), fn=(1,10), ls=(1,10))
output = interactive_plot.children[-1]
interactive_plot

 

결과는 아래의 그림과 같다.

레이다 탐지확률 수식을 interactive 긴능을 넣어 계산한 결과
(레이다 탐지확률 수식을 interactive 긴능을 넣어 계산한 결과)

 

출력 “pt”나 표적 RCS인 “sig” 값, 안테나 이득을 증가시키면 특정 거리에서의 탐지 확률이 증가하고 수신 대역폭 “bn”이나 잡음 지수 “fn”, 시스템 손실 “ls”를 증가시키면 탐지 확률이 감소하는 것을 볼 수 있다.

interactive 기능을 사용하지 않으면 특정 파라미터가 변할 때 최종 탐지 확률에 얼마큼의 영향을 줄지 매번 프로그램을 수행하고 그 결과를 확인했어야 하지만, interactive 기능으로 쉽게 특정 파라미터가 결과에 얼마 큼의 영향을 줄 수 있을지 확인할 수 있다.

한 가지 단점이라면 google colab에서 조금 느리게 반응한다는 것이다. 이는 어쩔 수 없을 것 같다.

 

interactive 기능에 대해 알아본 이유는 아래의 링크에 있는 것처럼 지난번에 만들었던 재밍에 의한 레이다 탐지 확률과 Burn-Through Range 영향을 보는 프로그램을 좀 더 쉽게 파라미터를 수정할 수 있게 수정해보기 위함이었다.

한 가지 알았으니 이걸로 좀 더 보완할 수 있을 것 같다.

 

 

Jamming 효과 분석 방법

재밍 신호가 상대 레이다에 대해 어느 정도의 효과가 있는 지를 분석하는 방법 중 기본이 되는 것에는 Burn-Through Range 분석과 레이다 탐지 확률 분석이 있다. 여기서 Burn-Through Range와 자체보호용

superhky.tistory.com

 

 

반응형

댓글