신호와 LTI 시스템
필터, 복조기처럼 표본을 받아 표본을 내놓는 처리 블록을 한 가지 방식으로 적을 수 있을까?
신호와 시스템
신호는 물리량을 시간의 함수로 적은 것이다. 연속시간 신호는 , 이산시간 신호는 으로 쓴다. 흑백 영상은 두 좌표 마다 값이 하나 있는 신호이고, 동영상은 여기에 시간 좌표가 하나 더 붙는다. 시스템은 함수를 받아 함수를 내놓는 사상이다. 입력 에서 출력 를 만드는 시스템은 이다(신호 및 시스템 2장 신호와 시스템의 정의).
선형성과 시불변성
선형 시스템은 입력을 배율해 더한 결과가 출력을 배율해 더한 것과 같다. , 이면 이다. 신호가 벡터처럼 더해지고 배율된다는 뜻이다. 시불변 시스템은 입력을 늦추면 출력도 늦을 뿐이다. 늦추고 시스템을 거치든, 시스템을 거치고 늦추든 결과가 같다. 위의 는 선형이지만 시불변이 아니다. 입력을 늦추면 출력은 인데, 출력을 늦춘 것은 이기 때문이다(선형성, 시불변성).
컨볼루션
선형이고 시불변인 LTI 시스템은 임펄스 응답 하나로 정해진다. 입력을 늦춘 임펄스의 가중합으로 쓰면, 출력은 늦춘 임펄스 응답의 같은 가중합이다.
광자 검출기가 그 예이다. 광자 하나가 들어올 때마다 같은 모양의 펄스가 나오고, 출력은 광자가 들어온 시각마다 놓인 펄스의 합이다. 이산시간에서는 적분 대신 합 를 쓴다(신호 및 시스템 3장 임펄스 응답과 컨볼루션).
행렬로 쓴 LTI 시스템
표본 개는 길이 인 벡터이고, 선형 시스템은 행렬 하나로 가 된다. 현재 표본에서 바로 전 표본을 빼는 차분 시스템 ()을 로 쓰면 다음과 같다.
시불변이므로 모든 행이 같은 무늬 을 한 칸씩 옮긴 모양이다. 처럼 비선형인 시스템은 행렬로 쓸 수 없다. 실습 코드에서 np.convolve(x, h)로 거는 FIR 필터는 모두 이런 행렬 곱이다. np.convolve는 마지막 입력이 남기는 꼬리까지 담아 개(은 의 길이)를 내놓는다.
x = np.array([1, 1.5, 1.5, 0.5])
H = np.eye(4) - np.eye(4, k=-1) # 대각선 1, 바로 아래 −1
H @ x # [1, 0.5, 0, -1]
np.convolve(x, [1, -1]) # [1, 0.5, 0, -1, -0.5]: 꼬리 한 칸이 더 있다
행렬 그림으로 행과 열을 따라가 보려면 신호 및 시스템 3장 행렬과 가역성을 본다.
신호 공간
벡터가 기저 벡터의 선형 결합으로 쓰이듯, 신호도 서로 직교하는 신호들의 선형 결합으로 쓸 수 있다. 기저로는 정현파와 복소 지수 말고도 에서 서로 직교하는 Legendre 다항식 같은 함수가 쓰인다. 기저가 정규직교(서로 직교하고 크기가 1)이면 결합의 계수는 신호와 각 기저의 내적이다. 직교이기만 하면 그 내적을 기저의 크기 제곱으로 나눈다. DFT의 복소 지수는 크기 제곱이 이므로, 는 신호와 기저의 내적이고 결합의 계수는 이다. 신호를 다른 기저의 계수로 바꿔 적는 것이 변환(transform)이고, DFT는 표본 개를 복소 지수 개와의 내적 개로 바꾸고, 여기에 을 곱한 값이 계수이다(신호 및 시스템 5장 직교 기저).
강의 노트