본문 바로가기

CMSIS DSP

(7)
CMSIS DSP 맛보기 목차 1. FFT 원리와 Frequency Bin Example2. 샘플링 주파수를 감소시켰을 때 Frequency Bin Example3. 자체 개발한 Digital Band Pass Filter 함수4. FIR Lowpass Filter Example5. CMSIS FIR 필터 함수와 매트랩을 사용하여 Band Pass Filter 설계6. 자체 개발 BPF 함수와 CMSIS BPF 함수 속도 비교
자체 개발 BPF 함수와 CMSIS BPF 함수 속도 비교 Bin Frequency Example에서 테스트했습니다. arm_cfft_f32 함수는 연산 단위로 bin을 사용하고 arm_fir_f32 함수는 float32_t 타입을 사용하기 때문에 for문으로 bin의 패딩 공간을 없애주는 작업이 필요했지만, for문을 1024회 수행하는데 1ms도 걸리지 않았기 때문에 아래 코드에서는 생략했습니다. 예상대로 영역 전환이 없는 CMSIS FIR 함수가 더 빨랐지만(8.5%) 생각보다 큰 차이는 아니었습니다. 그에 반해서 정확도는 주파수 영역을 직접 수정하는 자체 개발 Band Pass Filter 함수가 더 높았습니다. 그런데 이 속도는 그다지 의미가 없습니다. FIR 모듈의 경우 차수를 높힐수록 속도가 줄어들고, FTT 모듈도 FTT Size에 따라 속도가 달..
CMSIS FIR 필터 함수와 매트랩을 사용하여 Band Pass Filter 설계 CMSIS FIR 필터 함수를 이전 예제인 Low Pass Filter가 아닌 9.5~10.5KHz Band Pass Filter로 만들어서 Frequency Bin Example의 데이터에 적용해봤습니다. CMSIS FIR 인스턴스는 arm_fir_init_f32 함수를 사용하여 초기화할 때 입력한 필터 계수에 따라 다중 Band Pass Filter(BPF)를 포함한 여러가지 필터로 동작할 수 있습니다. 전 허용 주파수로 9.5~10.5KHz를 갖는 BPF를 만들기 위해 아래와 같은 매트랩 코드를 사용했습니다. 이것을 배열로 만들어 arm_fir_init_f32 함수의 pCoeffs 매개변수에 입력해 주면 됩니다. 그리고 Frequency Bin Example에서 FFT를 수행하기 전에 arm_fir..
FIR Lowpass Filter Example CMSIS FIR 필터 함수 예제입니다. 입력 신호는 1KHz와 15KHz 주파수가 섞여 있고 노이즈는 없는 신호입니다. 그리고 데이터는 48KHz로 샘플링된 데이터입니다. CMSIS FIR 함수를 6KHz Low Pass Filter (LPF)로 만들어 예제 샘플링 데이터의 1KHz 성분만 필터링합니다. 여기서 신호를 그래픽으로 확인할 수 있고, 저도 arm_cfft_f32 함수와 arm_cmplx_mag_f32 함수를 사용해서 확인해 봤습니다. FFT Size가 작아서 그런지 예제 설명과 약간 다릅니다. 1KHz가 아닌 941KHz가 나타났습니다. FFT Size가 256이고 bin 인덱스 1당 주파수 간격은 188Hz(48KHz/255)입니다. 따라서 인덱스5가 인덱스6보다 1KHz에 더 가깝기는 ..
자체 개발한 Digital Band Pass Filter 함수 개발이라고 할 것까진 없지만 간단하게 원하는 주파수 부분만 남기고 모두 제거하는 함수를 만들어 봤습니다. arm_cfft_f32 함수로 시간 영역(Time Domain)인 샘플링 신호를 주파수 영역(Frequency Domain)으로 변환할 수 있었습니다. 여기서 10KHz 성분만 추출하여 다시 역 FFT를 수행하였습니다. 특정 주파수 영역만 추출하기 위해 아래와 같은 Band Pass Filter(BPF) 함수를 따로 만들었습니다. 참고로 다음 포스트에서 살펴보겠지만 CMSIS DSP 라이브러리는 FIR 필터 함수도 제공합니다. 이 필터 함수에 계수값만 조정하면, arm_cfft_f32 함수와 자체 제작한 BPF 함수를 사용할 때처럼 시간 영역과 주파수 영역을 오갈 필요 없이, 바로 시간 영역에서 시간..
샘플링 주파수를 감소시켰을 때 Frequency Bin Example Nyquist 정리에 의하면 입력 신호의 최대 주파수보다 최소한 2배는 빠르게 샘플링해야 본래 신호를 충분히 재현할 수 있다고 합니다. 그래서 샘플링 주파수가 낮았다면 어떻게 되었을까를 가정하여 실험해 보았습니다. 이를 위해 ARM 사에서 제공하는 FFT 예제의 기본 데이터를 아래와 같이 수정했습니다. 만약 24KHz로 샘플링 되었다면 주황색 영역이 없었을 것입니다. 그리고 12KHz로 샘플링 되었다면 보라색 영역이 없었을 것입니다. 물론 절대로 이렇게 동일한 값이 나올 수는 없겠지만, 분명한 것은 48KHz 샘플링 데이터와 대응한다는 것입니다. 그리고 이 데이터들을 사용한 결과와 48KHz 샘플링 데이터를 사용한 결과와 비교하는 것은 의미가 있다고 생각합니다. 다만 이렇게 하면 샘플링 데이터가 줄어들기..
FFT 원리와 Frequency Bin Example 먼저 DSP의 가장 기본이되는 FFT 이론이 프로그램으로 어떻게 구성되고 사용되는지 알아보기 위해 FFT 공식을 간단히 분석해 보고 ARM 사에서 제공하는 CMSIS DSP 함수중 하나인 FFT(Fast Fourier Transform) 함수 예제를 약간 수정해서 돌려보았습니다. MCU는 Cortex-M0 기반의 STM32F091RC를 사용했습니다. 처음엔 F가 붙은 Cortex MCU만 CMSIS DSP를 사용할 수 있다고 알고 있었는데, F는 DSP에 사용되는 Float 연산을 1~2 사이클 안에 처리해 주는 하드웨어인 Float Process Unit(FPU)의 탑제 여부만 의미할 뿐, FPU가 없는 Cortex-M0도 CMSIS DSP 라이브러리를 사용할 수 있습니다. 단지 Float 연산이 소프..