Main Content

신호 샘플 레이트 변경하기

이 예제에서는 신호의 샘플 레이트를 변경하는 방법을 보여줍니다. 이 예제는 두 부분으로 구성됩니다. 첫 번째 부분에서는 정현파 입력 신호의 샘플 레이트를 44.1kHz에서 48kHz로 변경합니다. 이 워크플로는 오디오 처리에 일반적으로 사용됩니다. 콤팩트 디스크에 사용되는 샘플 레이트는 44.1kHz이고, 디지털 오디오 테이프에 사용되는 샘플 레이트는 48kHz입니다. 두 번째 부분에서는 녹음된 음성 샘플의 샘플 레이트를 7418Hz에서 8192Hz로 변경합니다.

44.1kHz로 샘플링된 사인파의 합으로 구성된 입력 신호를 생성합니다. 여기서 사인파는 2kHz, 4kHz, 8kHz의 주파수를 가집니다.

Fs = 44.1e3;
t = 0:1/Fs:1-1/Fs;
x = cos(2*pi*2000*t) + 1/2*sin(2*pi*4000*(t-pi/4)) + ...
    1/4*cos(2*pi*8000*t);

샘플 레이트를 44.1kHz에서 48kHz로 변경하려면 원래 샘플 레이트 44100에 P/Q를 곱한 값이 지정된 허용오차 내에서 48000과 같아지는 유리수(정수비) P/Q를 결정해야 합니다.

이 인자를 확인하려면 rat를 사용하십시오. 새 샘플 레이트 48000과 원래 샘플 레이트 44100의 비를 입력합니다.

[P,Q] = rat(48e3/Fs);
abs(P/Q*Fs-48000)
ans = 
7.2760e-12

P/Q*Fs가 원하는 샘플 레이트 48000과 10-12 정도의 차이만 있다는 것을 알 수 있습니다.

rat로 구한 분자 인자와 분모 인자를 resample에 대한 입력값으로 사용하여 48kHz로 샘플링된 파형을 출력합니다.

xnew = resample(x,P,Q);

컴퓨터에서 오디오를 재생할 수 있는 경우 두 가지 파형을 재생할 수 있습니다. 신호를 재생하기 전에 볼륨을 적당한 수준으로 설정합니다. 신호가 두 개의 구분된 샘플 레이트로 들리도록 sound 명령을 개별적으로 실행합니다.

% sound(x,44100)
% sound(xnew,48000)

음성 샘플의 샘플 레이트를 7418Hz에서 8192Hz로 변경합니다. 이 음성 신호는 "MATLAB®"이라고 말하는 사람의 음성을 녹음한 것입니다.

음성 샘플을 불러옵니다.

load mtlb

파일 mtlb.mat를 불러오면 음성 신호 mtlb와 샘플 레이트 Fs가 MATLAB 작업 공간으로 들어옵니다.

새 샘플 레이트 8192와 원래 샘플 레이트의 비에 대한 유리수 근삿값을 구합니다. rat를 사용하여 근삿값을 구할 수 있습니다.

[P,Q] = rat(8192/Fs);

새 샘플 레이트로 음성 샘플을 리샘플링합니다. 두 신호를 플로팅합니다.

mtlb_new = resample(mtlb,P,Q);

subplot(2,1,1)
plot((0:length(mtlb)-1)/Fs,mtlb)
subplot(2,1,2)
plot((0:length(mtlb_new)-1)/(P/Q*Fs),mtlb_new)

Figure contains 2 axes objects. Axes object 1 contains an object of type line. Axes object 2 contains an object of type line.

컴퓨터에 오디오 출력 기능이 있는 경우 비교를 위해 각각의 샘플 레이트로 두 파형을 재생해 볼 수 있습니다. 사운드를 재생하기 전에 컴퓨터의 볼륨을 청취에 적당한 수준으로 설정합니다. 음성 샘플을 각각 다른 샘플 레이트로 비교하기 위해 sound 명령을 개별적으로 실행합니다.

% sound(mtlb,Fs)
% sound(mtlb_new,8192)

참고 항목