파이썬(Python)

sinc 함수란? (파이썬으로 그래프 그려보기)

끄적끄적아무거나 2021. 6. 15. 11:03
반응형

Sinc function 이란?

 

sinc(x) = sin(πx) / πx  ------- 식(1)

 

Sinc function을 수식으로 표현하면 식(1)과 같이 나온다.

 

Sinc 함수를 처음 접하게 된 계기는 샘플링 된 신호를 다시 Continuous 한 신호로 변경하는데 Sinc interpolation을 사용하면서 이다. 

 

Interpolation에 대한 간략한 설명은 링크를 참조하길 바란다. (https://scribblinganything.tistory.com/193

 


파이썬 코드로 Sinc 함수 그려 보기

 

식(1)을 우선 Python을 통해 그래프로 그려보자

 

코드>>

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-4, 4, 41)
np.sinc(x)
plt.plot(x, np.sinc(x))
plt.title("Sinc Function")
plt.ylabel("Amplitude")
plt.xlabel("X")
plt.show()

 

결과>>

그림1

 

주석>>

코드는 상당히 단순하다. 

numpy 모듈을 사용해서 -4 ~ 4 사이에 41개의 점을 찍어서 sinc 함수에 넣어서 값을 구하고 plot 을 통해 그래프로 표현한 것이다.

 


Sinc interpolation 직관적으로 이해해 보기

 

사실 이부분은 수식적으로는 전개 되어있지만 수학이 약한 나로서는 이해가 잘 안되서 최대한 직관적으로 이해해 보려고 한다. 

 

그림2

그림2의 L은 lagrange 다항식이고 앞서 링크에서 소개한 lagrange polynomial interpolation의 수식이다. 앞서 링크에서 참조 하면 N의 샘플로 N-1차의 다항식이 나온다고 하였다.

 

만일 N개의 샘플 갯수가 무한대로 증하하면 Lagrange 함수는 Sinc 함수로 수렴한다는 것이 위 수식의 요점이다. 

 

그림3

그림3은 샘플링 주파수를 올릴 수록 그림3과 같이 원래 waveform에 가까운 값을 interpolation 할 수 있음을 알 수 있다. 

 

참고로 Sinc 함수는 주파수로 변환하면 주파수 0을 중식으로 직사각형 모양을 가진다. 즉, Low pass filter와 같은 모양이다. 이 부분은 내 사견인데 저주파처럼 동작하므로 샘플에서 고주파 성분을 없애서 급격한 변화를 줄이고 원신호에 가깝게 복원하는 것이 아닐까 생각 든다.

 

 

참조 링크>>

https://vru.vibrationresearch.com/lesson/waveform-perfect-reconstruction-using-sinc-interpolation/https://numpy.org/doc/stable/reference/generated/numpy.sinc.html

 

 

반응형