Main Content

이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

resample

새 고정 샘플 레이트로 균일 또는 비균일 데이터 리샘플링

설명

예제

y = resample(x,p,q)는 원래 샘플 레이트의 p/q배로 입력 시퀀스 x를 리샘플링합니다. x가 행렬이면 resamplex의 각 열을 독립적인 채널로 처리합니다. resample은 FIR 안티에일리어싱 저역통과 필터x에 적용하고 필터로 인해 발생하는 지연을 보정합니다.

y = resample(x,p,q,n)은 차수가 2 × n × max(p,q)인 안티에일리어싱 필터를 사용합니다.

예제

y = resample(x,p,q,n,beta)는 저역통과 필터 설계에 카이저 윈도우의 형태 파라미터를 지정합니다.

y = resample(x,p,q,b)b에 지정된 필터 계수를 사용하여 x를 필터링합니다.

예제

[y,b] = resample(x,p,q,___)는 리샘플링하면서 x에 적용한 필터의 계수도 반환합니다.

y = resample(x,tx)는 벡터 tx에 지정된 시점에서 샘플링된 신호의 값 x를 리샘플링합니다. 이 함수는 xtx와 같은 끝점과 샘플 개수를 가지며 균일한 간격의 시점으로 구성된 벡터로 선형 보간합니다. NaN은 누락된 데이터로 처리되며 무시됩니다.

y = resample(x,tx,fs)는 다상 안티에일리어싱 필터(Polyphase Antialiasing Filter)를 사용하여 fs에 지정된 균일한 샘플 레이트로 신호를 리샘플링합니다.

y = resample(x,tx,fs,p,q)는 입력 신호를 (p/q)/fs의 샘플 간격을 갖는 균일한 중간 그리드로 보간합니다. 그런 다음 그 결과를 필터링하여 인자 p로 업샘플링하고 인자 q로 다운샘플링함으로써 최종 샘플 레이트 fs를 얻습니다. 최상의 결과를 얻기 위해서는 fs × q/px의 최고 주파수 성분보다 최소 2배 큰 크기여야 합니다.

예제

y = resample(x,tx,___,method)는 위에 열거된 구문에 보간 방법을 지정합니다. 보간 방법은 'linear', 'pchip' 또는 'spline'일 수 있습니다.

참고:   x가 천천히 변화하지 않는 경우 'pchip' 보간 방법과 함께 interp1을 사용해 보십시오.

[y,ty] = resample(x,tx,___)는 리샘플링된 신호에 해당하는 시점을 ty로 반환합니다.

[y,ty,b] = resample(x,tx,___)는 안티에일리어싱 필터의 계수를 b로 반환합니다.

예제

모두 축소

간단한 선형 시퀀스를 원래 속도 10Hz의 3/2으로 리샘플링합니다. 동일한 Figure에 원래 신호와 리샘플링된 신호를 플로팅합니다.

fs = 10;
t1 = 0:1/fs:1;
x = t1;
y = resample(x,3,2);
t2 = (0:(length(y)-1))*2/(3*fs);

plot(t1,x,'*',t2,y,'o')
xlabel('Time (s)')
ylabel('Signal')
legend('Original','Resampled', ...
    'Location','NorthWest')

필터링 시, resample은 입력값으로 받은 샘플의 이전 및 이후 부분에서 입력 시퀀스 x를 0으로 가정합니다. x의 끝점 값이 0에서 크게 벗어나게 되면 y에 예기치 않은 값이 생성될 수 있습니다.

삼각형 시퀀스와, 이를 세로로 변형해 0이 아닌 끝점을 갖게 만든 시퀀스를 리샘플링하여 이러한 편차를 표시합니다.

x = [1:10 9:-1:1;
    10:-1:1 2:10]';
y = resample(x,3,2);

subplot(2,1,1)
plot(1:19,x(:,1),'*',(0:28)*2/3 + 1,y(:,1),'o')
title('Edge Effects Not Noticeable')
legend('Original','Resampled', ...
    'Location','South')

subplot(2,1,2)
plot(1:19,x(:,2),'*',(0:28)*2/3 + 1,y(:,2),'o')
title('Edge Effects Noticeable')
legend('Original','Resampled', ...
    'Location','North')

정현파 신호를 생성합니다. 16개 샘플이 정확히 하나의 신호 주기와 일치하도록 샘플 레이트를 지정합니다. 신호의 줄기 플롯을 그립니다. 샘플 앤 홀드 수행 결과를 시각화를 위해 계단 그래프를 겹칩니다.

fs = 16;
t = 0:1/fs:1-1/fs;

x = 0.75*sin(2*pi*t);

stem(t,x)
hold on
stairs(t,x)
hold off

resample을 사용하여 인자 4로 신호를 업샘플링합니다. 디폴트 설정을 사용합니다. 원래 신호와 함께 결과를 플로팅합니다.

ups = 4;
dns = 1;

fu = fs*ups;
tu = 0:1/fu:1-1/fu;

y = resample(x,ups,dns);

stem(tu,y)
hold on
stairs(t,x)
hold off
legend('Resampled','Original')

계산을 반복합니다. 안티에일리어싱 필터의 차수가 2×1×4=8이 되도록 n = 1을 지정합니다. 카이저 윈도우에 대한 형태 파라미터 β=0을 지정합니다. 필터와 리샘플링된 신호를 출력합니다.

n = 1;
beta = 0;

[y,b] = resample(x,ups,dns,n,beta);

fo = filtord(b)
fo = 8
stem(tu,y)
hold on
stairs(t,x,'--')
hold off
legend('n = 1, \beta = 0')

리샘플링된 신호는 윈도우의 상대적으로 넓은 메인로브와 낮은 사이드로브 감쇠량으로 인해 발생하는 에일리어싱 효과를 보여줍니다.

n을 5로 늘리고 β=0을 그대로 유지합니다. 필터의 차수가 40인지 확인합니다. 리샘플링된 신호를 플로팅합니다.

n = 5;

[y,b] = resample(x,ups,dns,n,beta);

fo = filtord(b)
fo = 40
stem(tu,y)
hold on
stairs(t,x,'--')
hold off
legend('n = 5, \beta = 0')

윈도우가 길수록 메인로브가 더 좁아지고 에일리어싱 효과가 더 효과적으로 감쇠됩니다. 또한, 신호도 감쇠됩니다.

필터 차수를 2×5×4=40으로 유지하고 형태 파라미터를 β=20으로 늘립니다.

beta = 20;

y = resample(x,ups,dns,n,beta);

stem(tu,y)
hold on
stairs(t,x,'--')
hold off
legend('n = 5, \beta = 20')

사이드로브 감쇠량이 높을 경우 리샘플링이 효과적으로 수행됩니다.

필터 차수를 다시 2×1×4=8로 줄이고 β=20을 그대로 유지합니다.

n = 1;

[y,b] = resample(x,ups,dns,n,beta);

stem(tu,y)
hold on
stairs(t,x,'--')
hold off
legend('n = 1, \beta = 20')

메인로브가 넓어 리샘플링 후 상당한 아티팩트가 생성되었습니다.

60개의 정현파 샘플을 생성하고 원래 속도의 3/2으로 리샘플링합니다. 원래 신호와 리샘플링된 신호를 표시합니다.

tx = 0:6:360-3;
x = sin(2*pi*tx/120);

ty = 0:4:360-2;
[y,by] = resample(x,3,2);

plot(tx,x,'+-',ty,y,'o:')
legend('original','resampled')

안티에일리어싱 필터의 주파수 응답을 플로팅합니다.

freqz(by)

원래 속도의 2/3로 신호를 리샘플링합니다. 원래 신호와 리샘플링된 신호를 표시합니다.

tz = 0:9:360-9;
[z,bz] = resample(x,2,3);

plot(tx,x,'+-',tz,z,'o:')
legend('original','resampled')

새로운 저역통과 필터의 임펄스 응답을 플로팅합니다.

impz(bz)

갈릴레오 갈릴레이가 1610년에 기록한 데이터를 사용하여 목성의 가장 큰 4개 위성 중 가장 바깥쪽 위성인 칼리스토의 궤도 주기를 파악합니다.

갈릴레오는 1월 15일부터 6주 동안 이 위성의 움직임을 관측했습니다. 구름이 낀 밤에는 목성이 보이지 않았기 때문에 관측값에 여러 개의 공백이 있습니다. 관측 시간값으로 구성된 datetime형 배열을 생성합니다.

t = [0 2 3 7 8 9 10 11 12 17 18 19 20 24 25 26 27 28 29 31 32 33 35 37 ...
    41 42 43 44 45]'+1;

yg = [10.5 11.5 10.5 -5.5 -10.0 -12.0 -11.5 -12.0 -7.5 8.5 12.5 12.5 ...
    10.5 -6.0 -11.5 -12.5 -12.5 -10.5 -6.5 2.0 8.5 10.5 13.5 10.5 -8.5 ...
    -10.5 -10.5 -10.0 -8.0]';

obsv = datetime(1610,1,15+t);

1일 1회 관측이라는 샘플 레이트를 사용하여 데이터를 정규 그리드로 리샘플링합니다. 적당한 업샘플링 인자 3을 사용하여 과적합을 방지합니다.

fs = 1;

[y,ty] = resample(yg,t,fs,3,1);

데이터와 리샘플링된 신호를 플로팅합니다.

plot(t,yg,'o',ty,y,'.-')
xlabel('Day')

스플라인 보간을 사용하고 관측 날짜를 표시하여 다시 한번 실행합니다. 1일 초수의 역수로 샘플 레이트를 표현합니다.

fs = 1/86400;

[ys,tys] = resample(yg,obsv,fs,3,1,'spline');

plot(t,yg,'o')
hold on
plot(ys,'.-')
hold off

ax = gca;
ax.XTick = t(1:9:end);
ax.XTickLabel = char(obsv(1:9:end));

균일한 간격의 선형 보간된 데이터의 주기도 전력 스펙트럼 추정값을 계산합니다. DFT(이산 푸리에 변환) 길이로 1024를 선택합니다. 신호는 궤도 주기의 역수에서 피크에 도달합니다.

[pxx,f] = periodogram(ys,[],1024,1,'power');
[pk,i0] = max(pxx);

f0 = f(i0);
T0 = 1/f0
T0 = 16.7869
plot(f,pxx,f0,pk,'o')
xlabel('Frequency (day^{-1})')

입력 인수

모두 축소

입력 신호로, 벡터나 행렬로 지정됩니다. x가 행렬이면 각 열은 독립적인 채널로 처리됩니다. xNaN을 포함할 수 있습니다. 단, NaN은 누락된 데이터로 처리되므로 리샘플링에서 제외됩니다.

예: cos(pi/4*(0:159))+randn(1,160)은 단일채널 행 벡터 신호입니다.

예: cos(pi./[4;2]*(0:159))'+randn(160,2)는 2채널 신호입니다.

데이터형: double

리샘플링 인자로, 양의 정수로 지정됩니다.

데이터형: double

이웃 항 번호로, 양의 정수로 지정됩니다. n = 0이면 resample이 최근접이웃 보간을 수행합니다. 안티에일리어싱 FIR 필터의 길이는 n에 비례합니다. n의 값이 클수록 더 많은 계산 시간이 필요하지만 정확도는 향상됩니다.

데이터형: double

카이저 윈도우의 형태 파라미터로, 양의 실수형 스칼라로 지정됩니다. beta를 늘리면 안티에일리어싱 필터를 설계하는 데 사용되는 윈도우의 메인로브가 넓어지고 윈도우 사이드로브의 진폭은 줄어듭니다.

데이터형: double

FIR 필터 계수로, 벡터로 지정됩니다. 기본적으로, resample은 카이저 윈도우와 함께 firls를 사용하여 필터를 설계합니다. 지연을 보정할 때 resampleb가 홀수 길이와 선형 위상을 가진다고 가정합니다. 자세한 내용은 안티에일리어싱 저역통과 필터 항목을 참조하십시오.

데이터형: double

시점으로, 음이 아닌 실수형 벡터나 datetime형 배열로 지정됩니다. tx는 단조 증가(Monotonically Increasing)해야 하지만 간격이 균일할 필요는 없습니다. txNaN 또는 NaT를 포함할 수 있습니다. 단, 이러한 값은 누락된 데이터로 처리되므로 리샘플링에서 제외됩니다.

데이터형: double | datetime

샘플 레이트로, 양의 스칼라로 지정됩니다. 샘플 레이트는 단위 시간당 샘플 개수입니다. 시간 단위가 초이면 샘플 레이트의 단위는 Hz입니다.

데이터형: double

보간 방법으로, 'linear', 'pchip' 또는 'spline'으로 지정됩니다.

  • 'linear' — 선형 보간입니다.

  • 'pchip' — 형태 보존 조각별 3차 보간입니다.

  • 'spline' — not-a-knot 끝 조건을 사용한 스플라인 보간입니다.

자세한 내용은 interp1 함수 도움말 페이지를 참조하십시오.

출력 인수

모두 축소

리샘플링된 신호로, 벡터나 행렬로 반환됩니다. x가 길이가 N인 신호인 경우 pq를 지정하면 y의 길이는 ⌈N × p/q⌉입니다.

FIR 필터 계수로, 벡터로 반환됩니다.

출력 시점으로, 음이 아닌 실수형 벡터로 반환됩니다.

세부 정보

모두 축소

안티에일리어싱 저역통과 필터

resample은 유리수 인자 p/q를 사용하여 신호를 리샘플링하기 위해 upfirdn을 호출합니다. upfirdn은 개념적으로 다음과 같은 단계를 수행합니다.

  1. 0을 삽입하여 인자 p로 신호를 업샘플링합니다.

  2. 업샘플링된 신호에 FIR 안티에일리어싱 필터를 적용합니다.

  3. 샘플을 삭제하여, 필터링된 신호를 인자 q로 다운샘플링합니다.

이상적인 안티에일리어싱 필터는 정규화된 차단 주파수 fc = π/max(p,q) rad/sample과 이득 p를 갖습니다. resample은 카이저 윈도우 방법을 사용하여 안티에일리어싱 필터를 근사합니다.

  • 필터 차수는 2 × n × max(p,q)입니다. n의 디폴트 값은 50입니다.

  • 카이저 윈도우에는 천이 폭과 저지대역 감쇠량 사이의 절충을 제어하는 형태 파라미터 beta가 있습니다. beta의 디폴트 값은 5입니다.

  • 윈도우의 처리 이득을 고려하도록 필터 계수가 정규화됩니다.

이에 대한 예로, 신호를 원래 샘플 레이트의 3/2배로 리샘플링하는 안티에일리어싱 필터를 설계하겠습니다.

p = 3;
q = 2;
maxpq = max(p,q);

fc = 1/maxpq;
n = 50;
order = 2*n*maxpq;
beta = 5;

b = fir1(order,fc,kaiser(order+1,beta));
b = p*b/sum(b);
자세한 내용은 균일하게 샘플링된 신호 리샘플링하기 항목을 참조하십시오.

알고리즘

resamplefirls를 사용하여 FIR 설계를 수행하고, 윈도우의 처리 이득을 고려하도록 결과를 정규화한 후 upfirdn을 사용하여 레이트 변경을 구현합니다.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

R2006a 이전에 개발됨