본문 바로가기
programming language/MATLAB

Matlab Sample Rate Conversion

by __observer__ 2014. 6. 9.
반응형

오늘은 MATLAB 에서 sample rate conversion 방법에 대해 설명하려 합니다.

 

저는 보통 음원 파일에 대해 sample rate conversion 을 수행할때는 아래 포스팅에서 소개한 ffmpeg 이나 sox 등을 주로 사용하지만 MATLAB에서도 sample rate conversion 을 수행해야 할 경우가 종종 있습니다.


2013/10/21 - [유틸] - Windows 에서 sox 로 음악 파일 변환하기


2014/03/07 - [유틸] - ffmpeg 을 사용하여 rmvb 파일을 avi 파일로 변환하기

 

MATLAB 에서 sample rate conversion 을 할 때는 보통 resample 함수를 사용합니다. Resample 함수는 MATLAB Signal Processing Toolbox 내에 포함되어 있으므로 resample 함수를 사용할 수 없다면 MATLAB command window 에 ver 명령어를 쳐서 Signal Processing Toolbox 가 설치되어 있는지 확인 해 보시기 바랍니다.

 

일반적으로 Resample 함수는 다음과 같이 사용합니다.

 

y = resample(x,p,q)

 

x 라는 입력 신호에 대해 p/q 배로 sample rate 를 변경 하는 겁니다. p, q 값은 당연히 양의 정수 이어야 합니다.

 

보통 sample rate conversion 을 수행할때는 anti-aliasing 필터링을 하게 되는데~ 이러한 과정도 내부에서 자동으로 수행되기 때문에 사용자가 굳이 신경 쓸 필요가 없습니다.

 

아래 주소에서 resample 함수의 help를 보면 기본적으로 firls을 사용하여 필터를 디자인 하고 Kaiser window 를 사용하고 윈도우의 beta 값은 5를 사용 한다고 하는군요.

 

http://www.mathworks.co.kr/kr/help/signal/ref/resample.html

 

anti-aliasing 필터의 계수를 변경하고 싶다면 아래 원형의 b 값에 원하는 필터의 coefficients 값을 넣어주면 됩니다.

 

y = resample(x,p,q,b)

 

resample 함수를 사용하여 8192 Hz 의 음원을 CD 음질인 44100 Hz 로 변경해 보죠~

 

다음과 같이 MATLAB command window 에 명령어를 칩니다. chirp 이라는 음원은 MATLAB 에서 제공하는 음원으로soundsc 함수를 통해 재생해보면 새 소리가 납니다.

 

 

>> load chirp % chirp 신호 load

>> Fs % sample rate 확인

 

Fs =

 

8192

 

>> y2=resample(y,44100,Fs); % 8192 에서 44100 Hz 로 sample rate conversion

>> soundsc(y,Fs) % 8192 Hz 음원 소리 확인

>> soundsc(y2,44100) % 44100 Hz 음원 소리 확인

 

위 예제를 실행해보면 8192 Hz 음원과 44100 Hz 음원의 소리가 같은 것을 확인 할 수 있습니다.

 

하지만 각 데어터의 길이를 확인해 보면 8192 Hz 음원인 y 는 13129 인데 비해 44100 Hz 인 y2 음원의 길이는 70678 라는 것을 확인 할 수 있습니다.

 

>> length(y)

ans =

 

13129

 

>> length(y2)

ans =

 

70678

 

이는 8192/44100 = 13129 /70678 = 0.1858 이기 때문입니다.


반응형

댓글