신호 처리
신호 처리 (Signal Processing)
Octave에서 고속 푸리에 변환(FFT)과 신호 처리 함수를 어떻게 쓰는지 소개할게요. 주파수 변환, 필터, 윈도우, 그리고 시계열 분석 도구까지 폭이 넓어요.
출처: 문서
본문
이 장에서는 Octave에서 사용할 수 있는 신호 처리와 고속 푸리에 변환 함수를 설명해요. 고속 푸리에 변환은 Octave가 어떻게 빌드되었느냐에 따라 FFTW 또는 FFTPACK 라이브러리로 계산돼요.
fft / ifft
y = fft (x)
y = fft (x, n)
y = fft (x, n, dim)
고속 푸리에 변환(FFT) 알고리즘으로 x의 이산 푸리에 변환을 계산해요.
FFT는 배열의 첫 번째 비단일(non-singleton) 차원을 따라 계산돼요. 따라서 x가 행렬이면 fft (x)는 x의 각 열에 대해 FFT를 계산해요.
두 인자로 호출하면 n은 사용할 x의 원소 수를 지정하는 정수이거나, 그 값을 무시하도록 지정하는 빈 행렬이에요. n이 FFT가 계산되는 차원보다 크면 x는 크기가 조정되고 0으로 채워져요(padding). 반대로 n이 해당 차원보다 작으면 x는 잘려요(truncated).
세 인자로 호출하면 dim은 FFT가 수행되는 행렬의 차원을 지정하는 정수예요.
See also: ifft, fft2, fftn, fftw.
x = ifft (y)
x = ifft (y, n)
x = ifft (y, n, dim)
고속 푸리에 변환(FFT) 알고리즘으로 y의 역이산 푸리에 변환을 계산해요. 동작 방식은 fft와 동일합니다.
See also: fft, ifft2, ifftn, fftw.
fft2 / ifft2
B = fft2 (A)
B = fft2 (A, m, n)
고속 푸리에 변환(FFT) 알고리즘으로 A의 2차원 이산 푸리에 변환을 계산해요.
선택 인자 m과 n은 사용할 A의 행·열 수를 지정해요. 둘 중 하나가 A의 크기보다 크면 A는 크기가 조정되고 0으로 채워져요.
A가 다차원 행렬이면 각 2차원 부분 행렬을 따로 처리해요.
See also: ifft2, fft, fftn, fftw.
A = ifft2 (B)
A = ifft2 (B, m, n)
역 2차원 이산 푸리에 변환을 계산해요. 동작 방식은 fft2와 동일합니다.
See also: fft2, ifft, ifftn, fftw.
fftn / ifftn
B = fftn (A)
B = fftn (A, size)
고속 푸리에 변환(FFT) 알고리즘으로 A의 N차원 이산 푸리에 변환을 계산해요.
선택 벡터 인자 size는 사용할 배열의 차원을 지정할 수 있어요. size의 한 원소가 A의 해당 차원보다 작으면 FFT를 수행하기 전에 A의 그 차원을 잘라요. 반대로 size의 한 원소가 해당 차원보다 크면 A는 크기가 조정되고 0으로 채워져요.
See also: ifftn, fft, fft2, fftw.
A = ifftn (B)
A = ifftn (B, size)
역 N차원 이산 푸리에 변환을 계산해요. 동작 방식은 fftn과 동일합니다.
See also: fftn, ifft, ifft2, fftw.
FFTW와 wisdom
Octave는 FFT 계산에 FFTW 라이브러리를 사용해요. Octave가 시작되어 FFTW 라이브러리를 초기화할 때, 시스템 전체 파일(Unix 시스템에서는 보통 /etc/fftw/wisdom)을 읽는데, 여기에는 FFT 계산을 빠르게 하는 데 유용한 정보가 들어 있어요. 이 정보를 _wisdom_이라고 불러요. 시스템 전체 파일 덕분에 wisdom을 FFTW 라이브러리를 사용하는 모든 응용 프로그램이 공유할 수 있어요.
fftw 함수로 wisdom을 생성하고 저장해요. FFTW 라이브러리와 함께 제공되는 유틸리티(Unix 시스템의 fftw-wisdom)를 사용하면 Octave가 생성한 wisdom을 시스템 전체 wisdom 파일에 추가할 수도 있어요.
method = fftw ("planner")
fftw ("planner", method)
wisdom = fftw ("dwisdom")
fftw ("dwisdom", wisdom)
nthreads = fftw ("threads")
fftw ("threads", nthreads)
FFTW wisdom 데이터를 관리해요.
Wisdom 데이터는 FFT 계산을 크게 가속화할 수 있지만, 계산에 초기 비용이 들어요. FFTW 라이브러리가 초기화될 때 시스템 전체 wisdom 파일(보통 /etc/fftw/wisdom)을 읽어 Octave 외의 응용 프로그램과 wisdom을 공유해요. 또는 fftw 함수로 wisdom을 가져올(import) 수 있어요. 예를 들어,
wisdom = fftw ("dwisdom")
는 Octave가 사용하는 기존 wisdom을 문자열 wisdom에 저장해요. 이 문자열은 파일에 저장하고 save, load 명령으로 복원할 수 있어요. 기존 wisdom은 다음과 같이 다시 가져올 수 있어요.
fftw ("dwisdom", wisdom)
wisdom이 빈 문자열이면 사용 중인 wisdom을 지워요.
푸리에 변환을 계산하는 동안 추가 wisdom이 생성돼요. 이 wisdom이 생성되는 방식도 fftw 함수로 제어돼요. wisdom을 다루는 다섯 가지 방식이 있어요.
"estimate"— 특정 변환을 계산하는 최적 수단의 실행 시 측정을 수행하지 않고, (아마도 차선의) 계획을 고르는 간단한 휴리스틱을 사용해요. 이 방법의 장점은 계획 생성에 오버헤드가 거의 없어서, 한 번만 계산할 푸리에 변환에 적합하다는 거예요."measure"— 변환을 수행하는 일련의 알고리즘을 고려하고 실행 시간을 기준으로 최선을 선택해요."patient"—"measure"와 비슷하지만 더 넓은 범위의 알고리즘을 고려해요."exhaustive"—"measure"와 같지만 변환을 다루는 데 사용할 수 있는 모든 알고리즘을 고려해요."hybrid"— 알고리즘의 실행 시 측정이 비쌀 수 있으니 절충안으로, 크기 8192까지는"measure"를, 그 이후는"estimate"를 사용해요.
기본 방법은 "estimate"예요. 현재 방법은
method = fftw ("planner")
로 조회하거나
fftw ("planner", method)
로 설정할 수 있어요.
계산된 wisdom은 Octave를 재시작하면 사라진다는 점에 유의하세요. 그러나 위에서 설명한 대로 파일에 저장했다면 wisdom 데이터를 다시 불러올 수 있어요. 저장된 wisdom 파일은 플랫폼이 다르면 효율적이지 않으므로 다른 플랫폼에서 사용하면 안 돼요. wisdom 계산의 의미가 사라지기 때문이에요.
계획 계산과 변환 실행에 사용되는 스레드 수는
fftw ("threads", NTHREADS)
로 설정할 수 있어요. Octave가 다중 스레드 FFTW 지원으로 컴파일되어야 이 기능을 쓸 수 있어요. 기본적으로 현재 프로세스에 사용 가능한 (논리) 프로세서 수 또는 3 중 더 작은 값을 사용해요.
See also: fft, ifft, fft2, ifft2, fftn, ifftn.
fftconv / fftfilt
c = fftconv (x, y)
c = fftconv (x, y, n)
FFT를 사용해 두 벡터를 컨볼루션해요. c = fftconv (x, y)는 길이 length (x) + length (y) - 1의 벡터를 반환해요. x와 y가 두 다항식의 계수 벡터라면 반환 값은 곱 다항식의 계수 벡터예요.
계산은 fftfilt 함수를 호출해 FFT를 사용해요. 선택 인자 n이 지정되면 N-점 FFT를 사용해요.
See also: deconv, conv, conv2.
y = fftfilt (b, x)
y = fftfilt (b, x, n)
FFT를 사용해 FIR 필터 b로 x를 필터링해요. x가 행렬이면 행렬의 각 열을 필터링해요.
선택 세 번째 인자 n이 주어지면 fftfilt는 오버랩-애드(overlap-add) 방법으로 N-점 FFT를 사용해 b로 x를 필터링해요. FFT 크기는 2의 짝수 거듭제곱이어야 하고 b의 길이보다 크거나 같아야 해요. 지정된 n이 이 기준을 충족하지 않으면 조건을 만족하는 가장 가까운 값으로 자동 조정돼요.
See also: filter, filter2.
filter / filter2
y = filter (b, a, x)
[y, sf] = filter (b, a, x, si)
[y, sf] = filter (b, a, x, [], dim)
[y, sf] = filter (b, a, x, si, dim)
데이터 x에 1-D 디지털 필터를 적용해요. filter는 다음 선형 시불변(linear, time-invariant) 차분 방정식의 해를 반환해요.
N M
SUM a(k+1) y(n-k) = SUM b(k+1) x(n-k) for 1<=n<=length(x)
k=0 k=0
여기서 N=length(a)-1, M=length(b)-1이에요. 결과는 x의 첫 번째 비단일 차원 또는, 주어지면 dim을 따라 계산돼요.
방정식의 동등한 형태는
N M
y(n) = - SUM c(k+1) y(n-k) + SUM d(k+1) x(n-k) for 1<=n<=length(x)
k=1 k=0
이며 여기서 c = a/a(1), d = b/a(1)이에요.
네 번째 인자 si가 주어지면 시스템의 초기 상태로 취하고 최종 상태를 sf로 반환해요. 상태 벡터는 가장 긴 계수 벡터 길이에서 1을 뺀 길이의 열 벡터예요. si가 주어지지 않으면 초기 상태 벡터는 모두 0으로 설정돼요.
Z 변환 관점에서 y는 이산 시간 신호 x를 다음 유리 시스템 함수로 특징지어지는 시스템에 통과시킨 결과예요.
M
SUM d(k+1) z^(-k)
k=0
H(z) = ---------------------
N
1 + SUM c(k+1) z^(-k)
k=1
See also: filter2, fftfilt, freqz.
y = filter2 (b, x)
y = filter2 (b, x, shape)
2-D FIR 필터 b를 x에 적용해요. shape 인자가 지정되면 원하는 형태의 배열을 반환해요. 가능한 값:
"full"— 필터링 전에 x를 모든 면에 0으로 채워요."same"— 패딩하지 않은 x(기본값)."valid"— 필터링 후 x를 잘라 가장자리 효과가 포함되지 않게 해요.
이는 매개변수가 뒤집히고 b가 180도 회전된 컨볼루션의 변형일 뿐이에요.
See also: conv2.
freqz / freqz_plot
[h, w] = freqz (b, a, n, "whole")
[h, w] = freqz (b)
[h, w] = freqz (b, a)
[h, w] = freqz (b, a, n)
h = freqz (b, a, w)
[h, w] = freqz (…, Fs)
freqz (…)
분자·분모 계수가 각각 b와 a인 유리 IIR 필터의 복소 주파수 응답 h를 반환해요. 응답은 0과 2*pi 사이의 n개 각주파수에서 평가돼요.
출력 값 w는 주파수의 벡터예요. a가 생략되면 분모는 1로 가정돼요(단순 FIR 필터에 해당). n이 생략되면 512로 가정돼요. 가장 빠른 계산을 위해 n은 작은 개수의 작은 소수로 인수분해되어야 해요. 네 번째 인자 "whole"가 생략되면 응답은 0과 pi 사이의 주파수에서 평가돼요.
freqz (b, a, w)는 벡터 w의 특정 주파수에서 응답을 평가해요. w의 값은 라디안으로 측정돼요.
[…] = freqz (…, Fs)는 샘플링 레이트 Fs를 가정해 라디안 대신 Hz 단위로 주파수를 반환해요. 특정 주파수 w에서 응답을 평가한다면 그 주파수는 라디안이 아니라 Hz로 요청해야 해요.
freqz (…)는 반환하는 대신 h의 크기·위상 응답을 플로팅해요.
See also: freqz_plot.
freqz_plot (w, h)
freqz_plot (w, h, freq_norm)
h의 크기·위상 응답을 플로팅해요. 선택 인자 freq_norm이 true이면 주파수 벡터 w는 정규화된 라디안 단위예요. freq_norm이 false이거나 주어지지 않으면 w는 헤르츠 단위로 측정돼요.
See also: freqz.
sinc / unwrap
y = sinc (x)
sinc 함수를 계산해요. sin (pi*x) / (pi*x)를 반환해요.
b = unwrap (x)
b = unwrap (x, tol)
b = unwrap (x, tol, dim)
tol보다 큰 점프를 제거하기 위해 각각 적절히 2*pi의 배수를 더하거나 빼서 라디안 위상을 풀어요(unwrap). tol 기본값은 pi예요.
unwrap은 차원 dim을 따라 동작해요. dim이 지정되지 않으면 첫 번째 비단일 차원이 기본값이에요. unwrap은 모든 비유한 입력 값(Inf, NaN, NA)을 무시해요.
ARCH / ARMA 계열
[a, b] = arch_fit (y, x, p, iter, gamma, a0, b0)
Engle의 원래 ARCH 논문의 스코어링 알고리즘을 사용해 시계열 y에 ARCH 회귀 모델을 맞춰요. 모델은
y(t) = b(1) * x(t,1) + ... + b(k) * x(t,k) + e(t),
h(t) = a(1) + a(2) * e(t-1)^2 + ... + a(p+1) * e(t-p)^2
이며, 시계열 벡터 y가 시간 t-1까지, (보통) 회귀자 행렬 x가 t까지 주어졌을 때 e(t)는 N(0, h(t))예요. 잔차 분산의 회귀 차수는 p로 지정돼요.
arch_fit (y, k, p)처럼 양의 정수 k로 호출하면 ARCH(k, p) 과정을 맞춰요. 즉 x의 t번째 행이
[1, y(t-1), ..., y(t-k)]
인 위와 같은 과정을 뜻해요. 선택적으로 반복 횟수 iter, 갱신 인자 gamma, 스코어링 알고리즘의 초기 값 a0·b0를 지정할 수 있어요.
y = arch_rnd (a, b, t)
AR 계수 b와 CH 계수 a로 길이 t의 ARCH 시퀀스를 시뮬레이션해요. 결과 y(t)는 모델
y(t) = b(1) + b(2) * y(t-1) + ... + b(lb) * y(t-lb+1) + e(t),
을 따르는데, y를 시간 t-1까지 알 때 e(t)는 N(0, h(t))이고
h(t) = a(1) + a(2) * e(t-1)^2 + ... + a(la) * e(t-la+1)^2
이에요.
[pval, lm] = arch_test (y, x, p)
선형 회귀 모델 y = x * b + e에 대해, 조건부 이분산이 없다는 귀무 가설을 CH(p) 대립 가설에 대비해 라그랑주 승수(LM) 검정을 수행해요. 즉 모델은
y(t) = b(1) * x(t,1) + ... + b(k) * x(t,k) + e(t),
이며 y가 t-1까지, x가 t까지 주어졌을 때 e(t)는 N(0, h(t))이고 여기서
h(t) = v + a(1) * e(t-1)^2 + ... + a(p) * e(t-p)^2,
이며 귀무 가설은 a(1) == … == a(p) == 0이에요.
두 번째 인자가 스칼라 정수 k이면, 차수 k의 선형 자기회귀 모델에서 같은 검정을 수행해요. 즉 x의 t번째 행이
[1, y(t-1), ..., y(t-k)]
이에요.
귀무 가설 아래에서 LM은 대략 p 자유도의 카이제곱 분포를 따르고, pval은 검정의 p-값(LM에서 이 분포의 CDF를 1에서 뺀 값)이에요. 출력 인자가 주어지지 않으면 p-값이 표시돼요.
x = arma_rnd (a, b, v, t, n)
ARMA 모델의 시뮬레이션을 반환해요. ARMA 모델은
x(n) = a(1) * x(n-1) + ... + a(k) * x(n-k)
+ e(n) + b(1) * e(n-1) + ... + b(l) * e(n-l)
으로 정의되며, k는 벡터 a의 길이, l은 벡터 b의 길이, e는 분산 v의 가우시안 백색 잡음이에요. 이 함수는 길이 t의 벡터를 반환해요.
선택 매개변수 n은 초기화에 사용되는 더미 x(i)의 수예요. 즉 길이 t+n의 시퀀스를 생성하고 x(n+1:t+n)을 반환해요. n이 생략되면 n = 100이 사용돼요.
x = autoreg_matrix (y, k)
시계열(벡터) y가 주어지면 첫 번째 열에 1을, 다른 열에 y의 처음 k개 지연 값을 가진 행렬을 반환해요. 말하자면 t > k에 대해 [1, y(t-1), …, y(t-k)]가 결과의 t번째 행이에요. 결과 행렬은 자기회귀에서 회귀자 행렬로 사용할 수 있어요.
윈도우 함수
c = bartlett (m)
c = blackman (m)
c = blackman (m, "periodic")
c = blackman (m, "symmetric")
c = hamming (m)
c = hamming (m, "periodic")
c = hamming (m, "symmetric")
c = hanning (m)
c = hanning (m, "periodic")
c = hanning (m, "symmetric")
bartlett (m)— 길이 m의 Bartlett(삼각) 윈도우의 필터 계수를 반환해요. 정의는 예를 들어 A.V. Oppenheim & R. W. Schafer, Discrete-Time Signal Processing 참고.blackman (m)— 길이 m의 Blackman 윈도우의 필터 계수를 반환해요. 선택 인자"periodic"이 주어지면 주기 형태의 윈도우를 반환하는데, 이는 길이 m+1 윈도우에서 마지막 계수를 제거한 것과 같아요."symmetric"은 두 번째 인자를 지정하지 않는 것과 같아요.hamming (m)— 길이 m의 Hamming 윈도우 계수. 동작은 위와 동일해요.hanning (m)— 길이 m의 Hanning 윈도우 계수. 동작은 위와 동일해요.
detrend / diffpara / durbinlevinson
y = detrend (x, p)
x가 벡터이면 detrend (x, p)는 데이터 x에서 차수 p의 다항식의 최적 적합을 제거해요. x가 행렬이면 x의 각 열에 대해 같은 일을 해요.
두 번째 인자 p는 선택 사항이에요. 지정하지 않으면 1로 가정하며, 이는 선형 추세 제거에 해당해요. 다항식 차수는 문자열로도 줄 수 있는데, 그 경우 p는 "constant"(p=0에 대응) 또는 "linear"(p=1에 대응) 중 하나여야 해요.
See also: polyfit.
[d, dd] = diffpara (x, a, b)
적분 시계열의 차분 매개변수에 대한 추정량 d를 반환해요. 추정에는 [2*pi*a/t, 2*pi*b/T]의 주파수가 사용돼요. b가 생략되면 [2*pi/T, 2*pi*a/T] 구간을 사용해요. a와 b 모두 생략되면 a = 0.5 * sqrt (T), b = 1.5 * sqrt (T)를 사용해요(여기서 T는 표본 크기). x가 행렬이면 각 열의 차분 매개변수를 추정해요.
위 구간의 모든 주파수에 대한 추정량을 dd에 반환해요. d의 값은 단순히 dd의 평균이에요.
참고: P.J. Brockwell & R.A. Davis, Time Series: Theory and Methods, Springer, 1987.
[newphi, newv] = durbinlevinson (c, oldphi, oldv)
Durbin-Levinson 알고리즘의 한 단계를 수행해요. 벡터 c는 지연 0부터 t까지의 자기공분산 [gamma_0, …, gamma_t]를, oldphi는 c(t-1)에 기반한 계수를, oldv는 대응하는 오차를 지정해요.
oldphi와 oldv가 생략되면 알고리즘의 1에서 t까지의 모든 단계를 수행해요.
fftshift / ifftshift / fractdiff
y = fftshift (x)
y = fftshift (x, dim)
fft와 ifft 함수와 함께 쓰기 위해 벡터 x를 이동해 주파수 0을 벡터·행렬의 가운데로 옮겨요. 길이 N, dt 간격의 N개 시간 표본에 대응하는 벡터 x가 있으면 fftshift (fft (x))는 주파수
f = [ -(ceil((N-1)/2):-1:1), 0, (1:floor((N-1)/2)) ] * df
에 대응하며 여기서 df = 1 / (N * dt)예요. x가 행렬이면 행·열에 대해, 배열이면 각 차원을 따라 같은 규칙이 성립해요.
선택 인자 dim으로 순열이 발생하는 차원을 제한할 수 있어요.
See also: ifftshift.
x = ifftshift (y)
x = ifftshift (y, dim)
fftshift 함수의 동작을 되돌려요. 길이가 짝수인 x에서 fftshift는 자기 자신의 역이지만, 홀수 길이에서는 약간 달라요.
See also: fftshift.
fd = fractdiff (x, d)
선분 차분(fractional differences) (1-L)^d x를 계산해요. 여기서 L은 지연 연산자, d는 -1보다 큽니다.
hurst / pchip
H = hurst (x)
재스케일된 범위(rescaled range) 통계를 통해 표본 x의 Hurst 매개변수를 추정해요. x가 행렬이면 모든 열에 대해 매개변수를 추정해요.
pp = pchip (x, y)
yi = pchip (x, y, xi)
점 x, y의 pchip(조각별 3차 Hermite 보간 다항식)을 반환해요. 두 인자로 호출하면 특정 점에서 다항식을 평가하는 데 ppval과 함께 쓸 수 있는 조각별 다항식 pp를 반환해요.
세 번째 입력 인자로 호출하면 pchip은 점 xi에서 pchip 다항식을 평가해요. 세 번째 호출 형태는 ppval (pchip (x, y), xi)와 같아요.
변수 x는 길이 n의 엄격히 단조(증가 또는 감소) 벡터여야 해요. y는 벡터 또는 배열일 수 있어요. y가 벡터이면 x와 같은 길이 n이어야 해요. y가 배열이면 y의 크기는 [s1, s2, …, sk, n] 형태여야 해요. 배열은 내부적으로 선행 차원이 s1 * s2 * … * sk인 행렬로 재구성되고, 이 행렬의 각 행을 따로 처리해요. 이는 interp1과 정확히 반대지만 MATLAB 호환성을 위해 이렇게 돼요.
See also: spline, ppval, mkpp, unmkpp.
periodogram
[Pxx, w] = periodogram (x)
[Pxx, w] = periodogram (x, win)
[Pxx, w] = periodogram (x, win, nfft)
[Pxx, f] = periodogram (x, win, nfft, Fs)
[Pxx, f] = periodogram (…, "range")
periodogram (…)
x의 periodogram(전력 스펙트럼 밀도)을 반환해요. 가능한 입력:
x— 데이터 벡터. x가 실수 값이면 한쪽 스펙트럼을 추정해요. x가 복소수 값이거나"range"가"twosided"를 지정하면 전체 스펙트럼을 추정해요.win— 윈도우 가중 데이터. 윈도우가 비어 있거나 미지정이면 기본 사각 윈도우를 사용해요. 그 외에는 periodogram을 계산하기 전에 윈도우를 신호에 적용해요(x .* win). 윈도우 데이터는 x와 같은 길이의 벡터여야 해요.nfft— 주파수 빈(bin) 수. 기본값은 256 또는 x의 길이보다 큰 다음 높은 2의 거듭제곱(max (256, 2.^nextpow2 (length (x))))이에요. nfft가 입력 길이보다 크면 x는 nfft 길이로 0 패딩돼요.Fs— 샘플링 레이트. 기본값 1.range— 스펙트럼 범위."onesided"는 [0:nfft/2+1]에서 스펙트럼을 계산하고,"twosided"는 [0:nfft-1]에서 계산해요.
선택 두 번째 출력 w는 정규화된 각주파수예요. 한쪽 계산에서 w는 nfft가 짝수면 [0, pi], 홀수면 [0, pi) 범위예요. 마찬가지로 양쪽 계산에서 w는 nfft에 따라 [0, 2pi] 또는 [0, 2pi) 범위예요.
샘플링 주파수 Fs가 지정되면 출력 주파수 f는 한쪽 계산에서 [0, Fs/2] 또는 [0, Fs/2) 범위예요. 양쪽 계산에서는 [0, Fs) 범위예요.
출력 없이 호출하면 periodogram은 즉시 현재 그림 창에 플로팅돼요.
See also: fft.
sinetone / sinewave
y = sinetone (freq, rate, sec, ampl)
주파수 freq, 샘플링 레이트 rate, 길이 sec 초, 진폭 ampl의 사인 톤을 반환해요. 인자 freq와 ampl은 공통 크기의 벡터일 수 있어요. 기본값은 rate = 8000, sec = 1, ampl = 64예요.
See also: sinewave.
y = sinewave (m, n, d)
i번째 원소가 sin (2 * pi * (i+d-1) / n)인 m-원소 벡터를 반환해요. d의 기본값은 0, n의 기본값은 m이에요.
See also: sinetone.
spectral_adf / spectral_xdf / spencer
sde = spectral_adf (c)
sde = spectral_adf (c, win)
sde = spectral_adf (c, win, b)
자기공분산 벡터 c, 윈도우 이름 win, 대역폭 b가 주어졌을 때 스펙트럼 밀도 추정량을 반환해요. 윈도우 이름(예: "triangle" 또는 "rectangle")은 win_lw라는 함수를 찾는 데 사용돼요. win이 생략되면 삼각 윈도우를 사용해요. b가 생략되면 1 / sqrt (length (x))를 사용해요.
See also: spectral_xdf.
sde = spectral_xdf (x)
sde = spectral_xdf (x, win)
sde = spectral_xdf (x, win, b)
데이터 벡터 x, 윈도우 이름 win, 대역폭 b가 주어졌을 때 스펙트럼 밀도 추정량을 반환해요. 윈도우 이름(예: "triangle" 또는 "rectangle")은 win_sw라는 함수를 찾는 데 사용돼요. win이 생략되면 삼각 윈도우를 사용해요. b가 생략되면 1 / sqrt (length (x))를 사용해요.
See also: spectral_adf.
savg = spencer (x)
x의 각 열의 Spencer 15-점 이동 평균을 반환해요.
stft / synthesis
y = stft (x)
y = stft (x, win_size)
y = stft (x, win_size, inc)
y = stft (x, win_size, inc, num_coef)
y = stft (x, win_size, inc, num_coef, win_type)
[y, c] = stft (…)
win_size 데이터 점의 윈도우와 inc 점의 증분을 적용해 num_coef 계수로 벡터 x의 단시간 푸리에 변환(STFT)을 계산해요. 푸리에 변환을 계산하기 전에 다음 윈도우 중 하나를 적용해요.
"hanning"— win_type = 1"hamming"— win_type = 2"rectangle"— win_type = 3
윈도우 이름은 문자열로도 win_type 숫자로도 전달할 수 있어요. 미지정 인자의 기본값: win_size = 80, inc = 24, num_coef = 64, win_type = 1.
y = stft (x, …)는 num_coef 양의 주파수에 따른 푸리에 계수의 절대값을 반환해요. [y, c] = stft (x, …)는 전체 STFT-행렬 y와, 윈도우 크기·증분·윈도우 종류를 담은 3-원소 벡터 c를 반환하는데, synthesis 함수가 필요로 하는 값이에요.
See also: synthesis.
x = synthesis (y, c)
단시간 푸리에 변환 y와, 윈도우 크기·증분·윈도우 종류를 지정하는 3-원소 벡터 c에서 신호를 계산해요. y와 c는
[y, c] = stft (x , ...)
로 얻을 수 있어요.
See also: stft.
yulewalker
[a, v] = yulewalker (c)
자기공분산 벡터 c [gamma_0, …, gamma_p]가 주어졌을 때 Yule-Walker 추정으로 AR(p) 모델을 맞춰요. AR 계수 a와 백색 잡음의 분산 v를 반환해요.
더 알아보기
- 다항식 컨볼루션과 연관 함수는 다항식 곱 항목을 참고하세요.
- 선형 필터의 시각화는 주파수 응답 플로팅 항목도 함께 보면 좋아요.