본문 바로가기

CMSIS DSP

샘플링 주파수를 감소시켰을 때 Frequency Bin Example

Nyquist 정리에 의하면 입력 신호의 최대 주파수보다 최소한 2배는 빠르게 샘플링해야 본래 신호를 충분히 재현할 수 있다고 합니다. 그래서 샘플링 주파수가 낮았다면 어떻게 되었을까를 가정하여 실험해 보았습니다. 이를 위해 ARM 사에서 제공하는 FFT 예제의 기본 데이터를 아래와 같이 수정했습니다.


arm_fft_bin_data.c


만약 24KHz로 샘플링 되었다면 주황색 영역이 없었을 것입니다. 그리고 12KHz로 샘플링 되었다면 보라색 영역이 없었을 것입니다. 물론 절대로 이렇게 동일한 값이 나올 수는 없겠지만, 분명한 것은 48KHz 샘플링 데이터와 대응한다는 것입니다. 그리고 이 데이터들을 사용한 결과와 48KHz 샘플링 데이터를 사용한 결과와 비교하는 것은 의미가 있다고 생각합니다.


다만 이렇게 하면 샘플링 데이터가 줄어들기 때문에 FFT Size를 절반씩 낮춰야 했습니다. FFT Size는 arm_common_tables.h에 선언되어 있고 arm_cfft_f32 함수의 핸들로 사용되는 arm_cfft_sR_f32_len{FFT Size} 상수를 선택하여 조절할 수 있습니다. FFT Size가 작아질 수록 속도가 빨라지지만 정확도는 점점 낮아집니다. 아래 결과에서 10KHz 성분의 구분이 점점 어려워 지는 것은 샘플링 주파수가 낮아진 것 뿐만 아니라 arm_cfft_sR_f32_len{FFT Size} 상수의 {FFT Size}가 작아진 것도 영향을 미쳤을 것이라고 생각합니다.



24KHz로 샘플링을 가정한 데이터를 testInput_f32_10khz_sampled_24khz 배열로 만들어 arm_cfft_f32 함수와 arm_cmplx_mag_f32 함수에 입력한 후 결과를 출력해 봤습니다.


48KHz 샘플링 데이터를 사용했을 때보다 10KHz 부분을 구별하기가 좀 어려워 졌지만, 확실히 10KHz 부분에서 특이하게 큰 주파수 성분이 나타납니다. 참고로 24KHz는 입력 신호의 최대 주파수인 10KHz의 2배 이상입니다. 만약 10KHz의 2배 보다 작은 12KHz로 샘플링 했다면 어떻게 되었을까요? 실험을 하기 전에 제 예상은 아래와 같았습니다.

10KHz가 NZ#2에서 나타나고 NZ#1에 있는 2KHz 부분에 미러 이미지가 나타날 것이라고 생각했습니다.


그리고 12KHz로 샘플링을 가정한 데이터를 testInput_f32_10khz_sampled_12khz 배열로 만들어 arm_cfft_f32 함수와 arm_cmplx_mag_f32 함수에 입력한 후 결과를 출력해 봤습니다. 2KHz와 10KHz로 예상되는 부분에서 비교적 큰 주파수 성분이 나타나지만 다른 주파수와 비교해 큰 특이점을 찾을 수 없었습니다.