Main Content

균일하게 샘플링된 신호 리샘플링하기

이 예제에서는 균일하게 샘플링된 신호를 균일한 새 레이트로 리샘플링하는 방법을 보여줍니다. 큰 과도의 영향을 줄이고 원치 않는 고주파 성분을 제거하는 방법도 다룹니다.

유리수 인자를 사용한 레이트 변환

resample 함수는 하나의 샘플 레이트에서 다른 샘플 레이트로의 레이트 변환을 수행합니다. resample을 사용하면 적분 인자 p로 업샘플링한 후 또 다른 적분 인자 q로 데시메이션할 수 있습니다. 이렇게 하면 원래 샘플 레이트의 유리수 배수(p / q)로 리샘플링할 수 있습니다.

균일한 샘플에 대해 resample 함수를 사용하려면 이 유리수 인자의 분자와 분모를 모두 제공해야 합니다. 필요한 정수를 파악하려면 rat 함수를 사용하면 됩니다.

다음은 48kHz에서 44.1kHz로 변환할 때 rat를 호출하는 예제입니다.

originalFs = 48000;
desiredFs = 44100;

[p,q] = rat(desiredFs / originalFs)
p = 147
q = 160

rat는 인자 147로 업샘플링하고 인자 160으로 데시메이션할 수 있음을 알려줍니다. 이렇게 해서 원하는 레이트가 생성되는지 확인하려면 p / q에 원래 샘플 레이트를 곱해보십시오.

originalFs * p / q
ans = 44100

원래 샘플 레이트와 새 샘플 레이트 간의 비를 확인했으면 resample을 호출할 수 있습니다.

예를 들어, 원래 샘플 레이트 48kHz를 사용하여 10밀리초 길이의 500Hz 정현파를 만든 다음 이를 44.1kHz로 변환합니다.

tEnd = 0.01;
Tx = 0:1/originalFs:tEnd;
f = 500;
x = sin(2*pi*f*Tx);

y = resample(x,p,q);
Ty = (0:numel(y)-1)/desiredFs;

plot(Tx,x,'. ')
hold on
plot(Ty,y,'o ')
hold off
legend('Original','Resampled')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Original, Resampled.

위의 정현파와 같이 잘 동작하는 신호의 경우 resample을 단지 신중하게 선택한 pq와 함께 사용하는 것만으로 신호를 올바르게 재구성할 수 있습니다.

과도가 있거나 상당한 잡음이 있는 신호의 경우 resample의 다상 안티에일리어싱 필터를 세부적으로 제어하는 기능이 필요할 수 있습니다.

과도 필터링하기

resample 함수는 레이트 변환을 수행할 때 필터를 사용합니다. 이 필터링은 신호에 있는 큰 과도에 민감합니다.

이를 살펴보려면 사각 펄스를 리샘플링하십시오.

x = [zeros(1,120) ones(1,241) zeros(1,120)];
y = resample(x,p,q);

plot(Tx,x,'-', Ty,y,'-')
legend('Original','Resampled')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original, Resampled.

이 함수는 펄스의 평탄 영역을 제대로 재구성합니다. 그러나 펄스의 양쪽 경계에는 스파이크가 존재합니다.

첫 번째 펄스의 경계를 확대합니다.

xlim([2e-3 3e-3])

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original, Resampled.

천이 영역에 감쇠된 진동이 있습니다. 내부 필터의 설정을 조정하여 이 진동을 축소할 수 있습니다.

resample을 사용하면 일부 경계 효과를 완화할 수 있는 안티에일리어싱 필터에 적용할 카이저 윈도우를 세부적으로 제어할 수 있습니다.

두 개의 파라미터(nbeta)가 필터의 상대적 길이와 필터가 시도하는 평활화의 양을 제어합니다. n의 값이 클수록 필터 길이가 커집니다. beta의 값이 0이면 추가적인 평활화가 없습니다. beta의 값이 클수록 평활화의 양이 늘어납니다. 기본적으로, n은 10이고 beta는 5입니다.

디폴트 값에서 시작해서 필요에 따라 조절하는 것이 실용적입니다. 여기서는 n을 5로 설정하고 beta를 20으로 설정하겠습니다.

n = 5;
beta = 20;

y = resample(x,p,q,n,beta);

plot(Tx,x,'.-')
hold on
plot(Ty,y,'o-')
hold off
legend('Original','Resampled')
xlim([2e-3 3e-3])

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original, Resampled.

진동이 상당이 감소된 것을 볼 수 있습니다.

에일리어스 필터링하기

resample 함수는 샘플 레이트를 더 높거나 낮은 레이트로 변환하도록 고안되었습니다. 그 결과, 안티에일리어싱 필터의 차단 주파수는 입력 또는 출력 샘플 레이트(둘 중 더 낮은 레이트)의 나이퀴스트 주파수로 설정되어 있습니다. 이 디폴트 설정 덕분에 resample 함수가 더 많은 응용 분야에 적용될 수 있습니다.

필터를 직접 제어하는 것이 유용한 경우가 있습니다.

이를 살펴보기 위해 96kHz로 샘플링된 처프 신호의 스펙트로그램을 생성하고 보겠습니다. 처프 신호는 8초 동안 0Hz에서 48kHz까지의 전체 나이퀴스트 범위에 걸쳐 주파수가 2차 형식으로 변동하는 정현파로 구성됩니다.

fs1 = 96000;
t1 = 0:1/fs1:8;
x = chirp(t1, 0, 8, fs1/2, 'quadratic');
spectrogram(x,kaiser(256,15),220,412,fs1,'yaxis')

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Frequency (kHz) contains an object of type image.

다음으로, resample의 디폴트 설정을 사용하여 처프 신호를 44.1kHz로 변환한 후 스펙트로그램을 확인합니다.

fs2 = 44100;

[p,q] = rat(fs2/fs1);
y = resample(x,p,q);

spectrogram(y,kaiser(256,15),220,412,fs2,'yaxis')

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Frequency (kHz) contains an object of type image.

여기에서 원래 신호와 원치 않는 주파수 성분을 함께 볼 수 있습니다. 이상적인 경우라면 정현파가 0Hz에서 시작해서 5.422초 지점에 나이퀴스트 주파수 22.05kHz에 도달할 때까지 지속됩니다. 대신, 리샘플링에 사용된 디폴트 필터의 경계에서 생성된 작은 불연속 때문에 아티팩트가 생성되었습니다. 이러한 아티팩트를 방지하려면 디폴트 필터보다 약간 낮은 차단 주파수와 훨씬 큰 저지대역 차단을 갖는, 보다 긴 필터를 제공할 수 있습니다.

시간적 배치가 적절하려면 필터 길이가 홀수여야 합니다. 길이는 p 또는 q(둘 중 더 큰 쪽)보다 몇 배 더 커야 합니다. 마찬가지로, 원하는 정규화된 차단 주파수를 pq 중 더 큰 값으로 나눕니다. 두 경우 모두 결과로 생성되는 계수에 p를 곱합니다.

다음은 차단 주파수가 출력 나이퀴스트 주파수의 98%(0.98)이고 차수가 데시메이션 인자의 256배인 필터에 beta가 12인 카이저 윈도우를 적용한 예제입니다.

normFc = .98 / max(p,q);
order = 256 * max(p,q);
beta = 12;

lpFilt = firls(order, [0 normFc normFc 1],[1 1 0 0]);
lpFilt = lpFilt .* kaiser(order+1,beta)';
lpFilt = lpFilt / sum(lpFilt);

% multiply by p
lpFilt = p * lpFilt;

% resample and plot the response
y = resample(x,p,q,lpFilt);
spectrogram(y,kaiser(256,15),220,412,fs2,'yaxis')

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Frequency (kHz) contains an object of type image.

에일리어스가 제거된 것을 볼 수 있습니다.

추가 참고 자료

리샘플링에 대한 자세한 내용은 Signal Processing Toolbox를 참조하십시오.

참고 문헌: fredric j harris, "Multirate Signal Processing for Communications Systems", Prentice Hall, 2004.

참고 항목

| |

관련 항목