본문 바로가기

분류 전체보기

(272)
07. FFT (Fast Fourier Transform, 고속 푸리에 변환) 앞에서 살펴봤던 DFT의 수식을 그대로 이용해서, 실제 신호에 대한 푸리에 변환을 하기에는 무리가 있다. 계산량이 너무 많기 때문이다. $$ DFT: \; \; Y(k)=\sum_{n=0}^{N-1}{y(n)e^{-i\frac{2\pi}{N}kn}}, \; \; 0\leq k < N \tag {1} $$ 식(1)의 DFT 수식에 따르면 실수와 복소수와의 곱 연산을 $N^2$회 수행하고, 덧셈 연산은 N(N-1)회 이루어진다. $N=4096$ 으로 하면, 신호 한 블록에 대해 16,777,216번의 연산이 필요하고, 이러한 연산을 1초 안에 수행하기에는 고속의 CPU를 사용해도 무리가 따른다. (펜티엄 2.2 GHz의 경우, 일반 실수에 대한 곱 연산을 초당 $8 \times 10^7$개 정도 수행할 수 ..
06-7. 엑셀을 이용한 DFT 계산(4/4) [예제 4] N값을 크게 해서 주파수 분해능을 높이기 두 개의 코사인 파가 합쳐진 신호를 가지고 분석해 볼 것이다. 신호 수식: 1 kHz와 1.1kHz의 정현파가 합쳐진 신호 --> $\cos{2\pi \cdot 1000t} + \cos{2\pi \cdot 1100t}$ 샘플링 주파수($f_s$): 8kHz y(n)에 대한 수식: =ROUND(COS(2*PI()*(1/8)*B14)+COS(2*PI()*(11/80)*B14),2) 주파수 샘플링에 대한 주기 N=32로 해서 계산해보자. W(n,k)를 구하기 위해 셀 "E14"에 수식을 적고, 자동채우기로 나머지 셀에 대해서도 값을 구한다. 셀 "E14"의 수식: =ROUND(COS(2*PI()*(1/8)*B14)+COS(2*PI()*(11/80)*B14)..
06-6. 엑셀을 이용한 DFT 계산(3/4) 예제 3. 주파수 1 kHz 파형에 대한 DFT 계산 예제3에 대한 엑셀 자료는, 엑셀파일 "DFT예제_3.xlsm"의 Sheet "3" 참조. 엑셀파일은 이 페이지 제일 밑에 보면 있음 앞의 예제에서는 코사인 파형 1개 주기에 대한 계산을 위해, 좀 비현실적인 주파수 및 샘플링 주파수를 사용했다. (주파수가 1/64인 파형을 가정했는데, 사람의 목소리가 4kHz 정도되기에, $\frac{1}{64}Hz$는 엄청나게 낮은 주파수이다. ) 이번에는 주파수가 1KHz이고, 샘플링을 8KHz로해서 신호를 생성하고, 이 신호에 대해서 주기 N=32 및 64로 변환하면서 DFT를 해보겠다. 이렇게 하면 N 값의 의미를 보다 확실하게 파악할 수 있을것이다. (N의 값을 32라던가 64, 128, 256 처럼 2의 ..
06-5. 엑셀을 이용한 DFT 계산(2/4) 이번 페이지에서는 정현파에 대한 신호값을 생성하고, 이 신호값에 대한 DFT를 엑셀을 이용해서 수작업으로 계산해볼 것이다. (수작업이라고 표현한 이유는, 엑셀에 내장되어 있는 FFT함수를 써서 계산하지 않고, DFT의 수식을 있는 그대로 사용해서 하나씩 계산해본다는 의미) 엑셀 자체의 기능보다는, 신호값에 대해서 어떻게 DFT 수식이 적용되는지에 집중해서 보면 되겠다. 기본적인 방법은 앞 페이지에서 4개의 값에 대한 DFT 구하는 것과 동일. [예제 2] 단순 정현파에 대한 DFT 계산 이 예제에 대한 엑셀은, 이 페이지 하단부에 첨부된 "DFT예제_2.xlsm"의 Sheet "2"에서 확인할 수 있음 가장 단순한 정현파 신호를 만들자. 하나의 코사인 파형이면, 가장 단순하다고 할 수 있겠다. 코사인 파..
06-4. 엑셀을 이용한 DFT 계산(1/4) 어떤 신호값에 대해 실제로 DFT 및 IDFT 계산을 해보면 수식의 의미를 더 깊게 이해할 수 있다. 앞 페이지에서 아주 간단한 형태의 가상 신호값을 이용해서 DFT 계산을 해봤는데, 이렇게 간단한 값의 경우에도 손으로 계산하기는 쉽지 않고, 실제에 가까운 신호값에 대해서는 손으로 DFT 계산을 하는 것은 불가능하다. 해서, 이번 챕터에서는 DFT를 엑셀을 이용해서 계산하는 것을 해보겠다. 엑셀로도, 실제 신호에 대한 DFT 변환값을 계산해내는 것이 좀 버겁다. 이유는, 사용되는 데이터가 복소수 형태인데다가, 데이터 개수가 N의 경우 $O(N^2)$의 계산 복잡도가 발생하기 때문이다. 해서, DFT의 계산량을 줄인 FFT 알고리즘이 나오게되었고, 이 FFT는 이후 챕터에서 다룰 것이다. 여기에서 사용한 ..
06-3. DFT의 수식 이해 앞 페이지까지 DFT의 수식이 어떻게 유도되는지 알아봤고, 그 수식은 다음과 같다. $$ DFT: \; \; Y(k)=\sum_{n=0}^{N-1}{y(n)e^{-i\frac{2\pi}{N}kn}}, \; \; 0\leq k < N \tag {1} $$ $$ IDFT: \; \; y(n) = \frac{1}{N} \sum_{k=0}^{N-1}Y(k) e^{i\frac{2\pi}{N}kn}, \; \; 0 \le n < N \tag{2} $$ 식 (1)은 시간에 대한 신호값 $y(n)$이 있을 때, 이를 주파수에 대한 수식으로 바꿔주는 것이고, 식 (2)는 반대로 주파수에 대한 신호값 $Y(k)$에 대해 시간에 대한 수식으로 바꿔주는 것이다. 예를 들어, 주기 $N=4$이고 $y[n]={1,3,-1,2}$..
06-2. 이산 푸리에 변환(DFT, Discrete Fourier Transform) 앞 페이지에서 이산 시간 푸리에 변환(DTFT)까지 유도했고, 이제 주파수까지 이산인 이산 푸리에 변환(DFT)을 유도해본다. 시간을 '이산'으로 만드는 것은, 어떤 아날로그 신호에 대해서 연속된 시간으로 값을 측정할 수 없는 현실적인 이유 때문이었다. 현실에서는, 아무리 시간을 잘게 쪼게도 연속된 시간에 대한 값을 잴 수도 저장할 수도 없다. 주파수에 대해서도 마찬가지로, 연속된 주파수 값을 가지는 것을 현실에서 측정하거나 저장할 수 없다. (컴퓨터 등에서 디지털 적으로 처리할 수 없다는 말이다.) 따라서, 주파수에 대해서도 연속된 것이 아닌, 간격이 존재하는 이산 주파수의 형태로 다뤄줘야 한다. 위 그림은 주파수 사이를 $\frac {1}{6}$ 간격으로 샘플링하는 것을 보여준다. 이렇게 샘플링하게 ..
06-1. 이산시간 푸리에 변환(DTFT, Discrete Time Fourier Transform) 시간은 드문드문한 '이산시간'으로, 주파수는 연속으로 가정해서 푸리에 변환하는 것이다. 앞에 챕터 5까지는 연속시간 및 연속주파수를 기준으로 해서 푸리에 변환을 했고, 이것이 푸리에 변환이 모든 것이다. 그런데, 실제 컴퓨터를 이용해서 푸리에 트랜스폼을 하려고 할 때는, 시간이 이산이고 주파수도 이산으로 처리해야만 계산이 가능하다. 신호 자체는 연속 시간대에 신호 값이 존재한다고 할지라도, 어차피 컴퓨터에서는 유한한 시간으로 잘라서(예를 들어 1ms 단위로) 신호 값을 저장하고 처리할 수밖에 없고, 주파수의 단위도 연속된 주파수가 아닌 어떤 간격을 가지는 이산 주파수 단위를 사용할 수밖에 없기 때문이다. 따라서, 이러한 이유로 이산 시간 및 이산 주파수일 때 푸리에 변환이 어떻게 이루어지는지를 알아야한다..
해밍 거리(Hamming Distance)와 에러 검출/보정 (feat. 해밍 코드) 해밍 거리에 대해서 배울 때, d 비트의 에러 검출을 하려면 최소 해밍거리 $d_{min} = d + 1$이고(최소 해밍거리 $d_{min}$일때 에러 검출은 d-1개까지 가능하고), d 비트의 에러 보정이 가능하려면 최소 해밍거리 $d_{min}=2d+1$이 되어야 한다고 한다. 이 글에서는 왜 이렇게 되는지에 대해 설명한다. 해밍 거리 (Hamming Distance) 두 비트열 c1과 c2에 대한 해밍 거리는, 두 비트열의 같은 위치에 있는 서로 다른 비트의 개수이다. 헷갈리는 말이지만, 예를 들어보면 쉽게 이해될 것이다. 예를 들어 "111"과 "110"의 해밍거리는 1이다. 마지막 비트에 있는 값이 다르기 때문. d(111,110) = 1 d(111,101) = 1 d(111,001)=2 d(1..
조건부 확률을 확실하게 알아보자. 우도(가능도)와의 차이를 알아야한다. 여러 번 공부해도 자꾸 까먹고 헷갈리는 게 조건부 확률이다. 왜일까? 조건부확률이, 우리가 가지는 상식에 반하는 성질이 있어서 이기도하지만, 확실하게 개념을 못 짚어서가 대부분이다. --- 먼저 공식부터 다시 짚어보면, $ P(A|B) = \frac {P(A)P(B|A)} {P(B)}$ 외우는 것은 아비=아바/비 좋은 암기방법!! ㅎ 이를 위해, 원래의 공식은 일반적으로 분자에 있는 수식을 P(B|A)P(A)라고 적는데 반해, 여기서는 그 순서를 바꿔서 P(A)P(B|A)라고 했다. 곱셈이기에 순서를 바꿔도 무방하기에. --- 공식에 대해 설명하기 전에 확률과 우도의 개념부터 짚어보고 가겠다. (조건부확률을 이해하기 위한 목적에 포커싱을 둬서) 확률 모수가 있을 때, 어떤 현상이 벌어질 수의 비이다. 즉..