균일하게 샘플링된 신호 리샘플링하기
이 예제에서는 균일하게 샘플링된 신호를 균일한 새 레이트로 리샘플링하는 방법을 보여줍니다. 큰 과도의 영향을 줄이고 원치 않는 고주파 성분을 제거하는 방법도 다룹니다.
유리수 인자를 사용한 레이트 변환
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')
위의 정현파와 같이 잘 동작하는 신호의 경우 resample
을 단지 신중하게 선택한 p
및 q
와 함께 사용하는 것만으로 신호를 올바르게 재구성할 수 있습니다.
과도가 있거나 상당한 잡음이 있는 신호의 경우 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')
이 함수는 펄스의 평탄 영역을 제대로 재구성합니다. 그러나 펄스의 양쪽 경계에는 스파이크가 존재합니다.
첫 번째 펄스의 경계를 확대합니다.
xlim([2e-3 3e-3])
천이 영역에 감쇠된 진동이 있습니다. 내부 필터의 설정을 조정하여 이 진동을 축소할 수 있습니다.
resample
을 사용하면 일부 경계 효과를 완화할 수 있는 안티에일리어싱 필터에 적용할 카이저 윈도우를 세부적으로 제어할 수 있습니다.
두 개의 파라미터(n
과 beta
)가 필터의 상대적 길이와 필터가 시도하는 평활화의 양을 제어합니다. 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])
진동이 상당이 감소된 것을 볼 수 있습니다.
에일리어스 필터링하기
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')
다음으로, resample
의 디폴트 설정을 사용하여 처프 신호를 44.1kHz로 변환한 후 스펙트로그램을 확인합니다.
fs2 = 44100;
[p,q] = rat(fs2/fs1);
y = resample(x,p,q);
spectrogram(y,kaiser(256,15),220,412,fs2,'yaxis')
여기에서 원래 신호와 원치 않는 주파수 성분을 함께 볼 수 있습니다. 이상적인 경우라면 정현파가 0Hz에서 시작해서 5.422초 지점에 나이퀴스트 주파수 22.05kHz에 도달할 때까지 지속됩니다. 대신, 리샘플링에 사용된 디폴트 필터의 경계에서 생성된 작은 불연속 때문에 아티팩트가 생성되었습니다. 이러한 아티팩트를 방지하려면 디폴트 필터보다 약간 낮은 차단 주파수와 훨씬 큰 저지대역 차단을 갖는, 보다 긴 필터를 제공할 수 있습니다.
시간적 배치가 적절하려면 필터 길이가 홀수여야 합니다. 길이는 p
또는 q
(둘 중 더 큰 쪽)보다 몇 배 더 커야 합니다. 마찬가지로, 원하는 정규화된 차단 주파수를 p
와 q
중 더 큰 값으로 나눕니다. 두 경우 모두 결과로 생성되는 계수에 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')
에일리어스가 제거된 것을 볼 수 있습니다.
추가 참고 자료
리샘플링에 대한 자세한 내용은 Signal Processing Toolbox를 참조하십시오.
참고 문헌: fredric j harris, "Multirate Signal Processing for Communications Systems", Prentice Hall, 2004.