'공학수학'에 해당되는 글 1건

  1. 2013.12.06 Continuously Updated Fourier Series

오늘 퓨리에 급수에 대해 생각하다가 특정 구간에 대해서만 급수전개를 하되 '그 구간이 계속 움직인다면 어떨까?'란 생각을 떠올렸다. 조금만 계산을 하면 유도할 수 있으니 누군가는 했겠지 하고 찾아봤는데 의외로 이 생각을 하는 사람이 별로 없는 모양이다. 하긴 이렇게 연속적으로 들어오는 신호를 변환할 때는 라플라스 변환을 쓰는 것이 일반적이긴 하다. 찾은 관련 내용은 특허 하나와 논문 두 개. 특허는 73년이고, 논문은 99년과 01년에 나온 상당히 최근의 내용.


http://www.google.com/patents/US3778606

http://www.sciencedirect.com/science/article/pii/S0165168498002096

http://proceedings.spiedigitallibrary.org/proceeding.aspx?articleid=913845




위의 내용은 이산퓨리에변환(Discrete Fourier Transform)에 해당하는 내용이라 연속적인 경우에 대해서는 다루지는 않고 있다. 연속적인 경우를 다루기 위해 다음과 같은 '샘플링 구간을 한정지은 함수'를 정의하자.


\text{For a function }f\text{ defined on the real line, define} \\\text{the restriction (or the sample) of }f\text{ as;} \\\\f:\mathbb{R}\to\mathbb{R} \\f_{\tau,T}:[0,\tau ]\to\mathbb{R} \\f_{\tau,T}(x)=f(x+T) \\\\\tau\text{ gives the length of the sample, and }T\text{ gives the} \\\text{starting point of the sample.}


그리고 다들 대학 2학년때 지옥을 맛보는 공학수학 시간에 하는 것처럼 신나게 퓨리에 급수를 구한다. 따로 유도과정은 안 적겠다. 그런건 위키백과에도 잘 나오니까.


\text{The Fourier series of }f_{\tau,T}\text{ is given as follows:} \\\\f_{\tau,T}(x)=a_0+\sum_n \left[a_n\cos(\frac{2n\pi}{\tau}x)+b_n\sin(\frac{2n\pi}{\tau}x)\right] \\\\a_0(\tau,T)=\frac1\tau \int_0^\tau f_{\tau,T}(x)dx \\a_n(\tau,T)=\frac2\tau \int_0^\tau f_{\tau,T}(x)\cos(\frac{2n\pi}{\tau}x)dx \\b_n(\tau,T)=\frac2\tau \int_0^\tau f_{\tau,T}(x)\sin(\frac{2n\pi}{\tau}x)dx


이제 할 일은 간단하다. 구간이 계속 움직이는 경우(T가 계속 변하는 경우) 각 급수 성분은 어떻게 변하게 될까? 편미분을 쓰자.


\text{To update the series for continuously changing }T\text{,} \\\text{just calculate the derivatives with respect to }T: \\\\\frac{\partial}{\partial T}a_0(\tau,T)=\frac1\tau \frac{\partial}{\partial T}\int_0^\tau f_{\tau,T}(x)dx \\=\frac1\tau \frac{\partial}{\partial T}\int_T^{T+\tau} f(x)dx=\frac1\tau\left[f(T+\tau)-f(T) \right ]



\\\frac{\partial}{\partial T}a_n(\tau,T)=\frac2\tau \frac{\partial}{\partial T}\int_0^\tau f_{\tau,T}(x)\cos(\frac{2n\pi}{\tau}x)dx \\=\frac2\tau \frac{\partial}{\partial T}\int_0^\tau f(x+T)\cos(\frac{2n\pi}{\tau}x)dx \\=\frac2\tau \int_0^\tau f'(x+T)\cos(\frac{2n\pi}{\tau}x)dx \\=\frac2\tau \left[ \left f(x+T)\cos(\frac{2n\pi}{\tau}x)\right|_0^\tau -\int_0^\tau f(x+T)\left[\cos(\frac{2n\pi}{\tau}x)\right]' dx \right] \\=\frac2\tau \left[ f(T+\tau)-f(T)+\frac{2n\pi}{\tau}\int_0^\tau f(x+T)\sin(\frac{2n\pi}{\tau}x)dx \right] \\\\=\frac2\tau \left[ f(T+\tau)-f(T)\right]+\frac{2n\pi}{\tau}b_n



\\\frac{\partial}{\partial T}b_n(\tau,T)=\frac2\tau \frac{\partial}{\partial T}\int_0^\tau f_{\tau,T}(x)\sin(\frac{2n\pi}{\tau}x)dx \\=\frac2\tau \frac{\partial}{\partial T}\int_0^\tau f(x+T)\sin(\frac{2n\pi}{\tau}x)dx \\=\frac2\tau \int_0^\tau f'(x+T)\sin(\frac{2n\pi}{\tau}x)dx \\=\frac2\tau \left[ \left f(x+T)\sin(\frac{2n\pi}{\tau}x)\right|_0^\tau -\int_0^\tau f(x+T)\left[\sin(\frac{2n\pi}{\tau}x)\right]' dx \right] \\=\frac2\tau \left[-\frac{2n\pi}{\tau}\int_0^\tau f(x+T)\cos(\frac{2n\pi}{\tau}x)dx \right] \\\\=-\frac{2n\pi}{\tau}a_n


만약 주기가 그대로 맞아 떨어진다면 예상하는 것과 같이 단순히 위상만 변하는 식을 얻게 된다.


\text{If }f(x+\tau)=f(x)\text{ for }\forall x\text{, the above equations} \\\text{are simplified and shows the phase dependence of Fourier series.} \\\\\frac{\partial}{\partial T}a_n(\tau,T)=\frac{2n\pi}{\tau}b_n \\\frac{\partial}{\partial T}b_n(\tau,T)=-\frac{2n\pi}{\tau}a_n \\\\\therefore a_n(\tau,T)=A\sin(\frac{2n\pi}{\tau}T +\delta) \\b_n(\tau,T)=A\cos(\frac{2n\pi}{\tau}T +\delta)


여기까지는 샘플링 구간을 움직일 때 해당하는 내용. 그렇다면 샘플링 구간을 확장시킬 때 새로운 정보를 어떻게 반영해야 할까? 이건 샘플링 구간의 길이에 대해 편미분하면 된다.


\text{To update the series for newly obtained information at} \\T+\tau\text{, just calculate the derivatives with respect to }\tau: \\\\\frac{\partial}{\partial\tau}a_0(\tau,T)=\frac{\partial}{\partial\tau}\left[\frac1\tau \int_0^\tau f_{\tau,T}(x)dx\right] \\=-\frac1{\tau^2} \int_0^\tau f_{\tau,T}(x)dx+\frac1\tau \frac{\partial}{\partial\tau}\int_T^{T+\tau} f(x)dx \\=\frac1\tau\left[f(T+\tau)-a_0\right]



\\\frac{\partial}{\partial\tau}a_n(\tau,T)=\frac{\partial}{\partial\tau}\left[\frac2\tau \int_0^\tau f_{\tau,T}(x)\cos(\frac{2n\pi}{\tau}x)dx\right] \\=-\frac2{\tau^2} \int_0^\tau f_{\tau,T}(x)\cos(\frac{2n\pi}{\tau}x)dx+\frac2\tau \frac{\partial}{\partial\tau}\left[\int_0^\tau f_{\tau,T}(x)\cos(\frac{2n\pi}{\tau}x)dx\right] \\=-\frac{a_n}{\tau}+\frac2\tau \frac{\partial}{\partial\tau}\int_0^\tau f(x+T)\cos(\frac{2n\pi}{\tau}x)dx \\=-\frac{a_n}{\tau}+\frac2\tau \left f(x+T)\cos(\frac{2n\pi}{\tau}x)\right|_{x=\tau}+\frac2\tau \int_0^\tau f(x+T)\frac{\partial}{\partial\tau}\cos(\frac{2n\pi}{\tau}x)dx \\=-\frac{a_n}{\tau}+\frac{2f(T+\tau)}\tau+\frac{2n\pi}{\tau^2}\frac2\tau\int_0^\tau f(x+T)\sin(\frac{2n\pi}{\tau}x)dx \\=\frac1\tau\left[ 2f(T+\tau)-a_n+\frac{2n\pi}\tau b_n\right ]



\\\frac{\partial}{\partial\tau}b_n(\tau,T)=\frac{\partial}{\partial\tau}\left[\frac2\tau \int_0^\tau f_{\tau,T}(x)\sin(\frac{2n\pi}{\tau}x)dx\right] \\=-\frac2{\tau^2} \int_0^\tau f_{\tau,T}(x)\sin(\frac{2n\pi}{\tau}x)dx+\frac2\tau \frac{\partial}{\partial\tau}\left[\int_0^\tau f_{\tau,T}(x)\sin(\frac{2n\pi}{\tau}x)dx\right] \\=-\frac{b_n}{\tau}+\frac2\tau \frac{\partial}{\partial\tau}\int_0^\tau f(x+T)\sin(\frac{2n\pi}{\tau}x)dx \\=-\frac{b_n}{\tau}+\frac2\tau \left f(x+T)\sin(\frac{2n\pi}{\tau}x)\right|_{x=\tau}+\frac2\tau \int_0^\tau f(x+T)\frac{\partial}{\partial\tau}\sin(\frac{2n\pi}{\tau}x)dx \\=-\frac{a_n}{\tau}-\frac{2n\pi}{\tau^2}\frac2\tau\int_0^\tau f(x+T)\cos(\frac{2n\pi}{\tau}x)dx \\=-\frac1\tau\left[b_n+\frac{2n\pi}\tau a_n\right ]


정리해보면 다음과 같은 관계식을 얻는다.


\text{For a function }f\text{ defined on the real line, its sample} \\f_{\tau,T}\text{ - which has }\tau\text{ as the length and }T\text{ as the starting point - } \\\text{has the following properties.} \\\\f_{\tau,T}(x)=f(x+T) \\f_{\tau,T}(x)=a_0+\sum_n \left[a_n\cos(\frac{2n\pi}{\tau}x)+b_n\sin(\frac{2n\pi}{\tau}x)\right]



\\a_0(\tau,T)=\frac1\tau \int_0^\tau f_{\tau,T}(x)dx \\a_n(\tau,T)=\frac2\tau \int_0^\tau f_{\tau,T}(x)\cos(\frac{2n\pi}{\tau}x)dx \\b_n(\tau,T)=\frac2\tau \int_0^\tau f_{\tau,T}(x)\sin(\frac{2n\pi}{\tau}x)dx



\\\frac{\partial}{\partial T}a_0(\tau,T)=\frac1\tau\left[f(T+\tau)-f(T) \right ] \\\frac{\partial}{\partial T}a_n(\tau,T)=\frac2\tau \left[ f(T+\tau)-f(T)\right]+\frac{2n\pi}{\tau}b_n \\\frac{\partial}{\partial T}b_n(\tau,T)=-\frac{2n\pi}{\tau}a_n



\\\frac{\partial}{\partial\tau}a_0(\tau,T)=\frac1\tau\left[f(T+\tau)-a_0\right] \\\frac{\partial}{\partial\tau}a_n(\tau,T)=\frac1\tau\left[ 2f(T+\tau)-a_n+\frac{2n\pi}\tau b_n\right ] \\\frac{\partial}{\partial\tau}b_n(\tau,T)=-\frac1\tau\left[b_n+\frac{2n\pi}\tau a_n\right ]





쓸만한 곳이 있는지는 모르겠는데 일단 실시간 퓨리에 변환에 유리하고(FFT를 한 샘플 버리고 한 샘플 채취할 때마다 행하는 것보다 위의 방법으로 업데이트 하는 방식이 더 빠르다. 전자는 N logN인데 이 경우엔 N 정도-위에서 언급한 논문에도 나와 있다.), 또 한 가지 쓸모를 생각해 본다면 FFT에서 생기는 샘플 갯수에 대한 제한 문제를 비껴나갈 방법이 될 지도 모르겠다는 것. FFT를 쓰려면 데이터의 개수가 2^N의 꼴로 나와야 한다고 알고 있는데 거기에서 더 많을 경우 추가 데이터를 날려버리거나 더 적을 경우 0으로 추가 데이터를 만들어 FFT를 실행한다고 알고 있다. 위 관계식은 연속함수에 대해 구한 것이긴 하지만 이산화하면 2^N개의 데이터로 FFT를 한 다음에 데이터를 추가해주거나 빼주는 방식으로 원래 값에 맞도록 보정하는 것이 가능해진다. DFT의 시간이 N^2이라고 알고 있는데 정확한 값을 N logN에서 N^2 사이의 값으로 구하는 것도 가능하다는 것.


샘플 구간의 중심을 0으로 두고 구간의 길이를 점차 늘이는 문제로도 확장해볼 생각이 있다. 이건 양자장론에서 cut-off 문제와도 관련이 있을 것 같아서 풀어보려고 생각중인 문제.


그런데 왜 이 간단한 걸 찾아도 안 보이지... 미분만 잘 하면 되잖아...


댓글을 달아 주세요

1 

글 보관함

카운터

Total : 654,568 / Today : 10 / Yesterday : 49
get rsstistory!