마이크로 컨트롤러 기반 키트로 신속하게 'Alexa 내장' IoT 설계 구현
DigiKey 북미 편집자 제공
2020-02-11
음성 지원은 빠르게 발전하여 스마트 제품의 중요한 기능이 되었습니다. 현재 클라우드 기반 솔루션 중 Amazon의 Alexa Voice Service(AVS)는 주요 음성 지원 솔루션으로 등장했으며, 음성 인식 및 자연 언어 처리를 위해 Amazon 클라우드 리소스를 활용하는 턴키 기능을 제공합니다.
하지만 개발자에게 AVS의 성능 요구 사항과 설계 복잡성은 커넥티드 홈 및 사물 인터넷(IoT)에 대한 소형 마이크로 프로세서 기반 장치에 대한 상당한 진입 장벽으로 작용하고 있습니다. 맞춤형 응용 분야를 위한 드롭인 솔루션 및 참조 설계로 고안된 NXP Semiconductors의 키트는 리소스 제약이 있는 장치를 위해 특별히 설계된 Amazon AVS 제품을 제공합니다.
이 기사에서는 개발자가 NXP의 기성 솔루션을 사용하여 "Alexa 내장" 설계를 빠르게 구현할 수 있는 방법을 보여줍니다.
AVS란?
음성 지원 기술은 10년 전에 등장한 이후로 빠르게 진화하여 성장하는 스마트 스피커 시장을 견인하고 있습니다. 시장 분석 예측에 따르면 이미 미국 인구의 약 1/3이 이 시장에 참여하고 있다고 합니다. 경쟁 솔루션 중 Amazon Echo 스마트 스피커는 타사 Echo 앱 또는 Skills를 지원하는 클라우드 기반 리소스를 지원하기 위해 Amazon Web Services(AWS)의 성공을 활용하여 상당한 점유율을 확보했습니다.
ASK(Alexa Skills Kit) 및 연결된 응용 프로그래밍 인터페이스(API)를 사용하면 개발자가 빠르게 확장되는 Echo 스마트 스피커 설치 기반을 활용하여 커넥티드 장치의 음성 제어 수준을 강화할 수 있습니다. 이 방법을 사용하면 "Alexa와 함께 작동하는" 스마트 TV, 온도 조절기와 같은 연결된 제품이 Alexa 클라우드에서 수신되는 사용자의 음성 요청 및 연결된 명령에 응답할 수 있습니다(그림 1). 이 기사에서는 AVS를 요약하고 그 잠재성을 간략하게 살펴봅니다.
그림 1: Alexa 앱 또는 Skills를 빌드하여 개발자는 연결된 제품이 Amazon Echo 제품을 통해 사용자의 음성 명령과 상호 작용하도록 지원할 수 있습니다. (이미지 출처: Amazon Web Services)
Alexa 내장 설계
"Alexa와 함께 작동하는" 제품과 대조적으로 "Alexa 내장" 스마트 제품은 Alexa 음성 지원 장치와 AWS 리소스 사이에서 더 원활하고 대기 시간이 짧은 인터페이스를 구축합니다. 이러한 제품은 AVS를 연결된 장치 설계에 직접 통합합니다. AVS를 AWS IoT Core 플랫폼과 함께 사용하여 개발자는 사용자가 Alexa 지원 제품에서 음성 명령을 통해 연결된 장치를 제어하고 해당 장치에서 음성 응답을 수신할 수 있도록 도와주는 정교한 IoT 응용 제품을 구현할 수 있습니다(그림 2).
그림 2: Alexa 지원 장치에서 제공하는 음성 인터페이스를 사용하면 AWS IoT Core를 통해 Amazon Web Services 리소스에 연결된 IoT 장치(상단)를 제어하거나 해당 장치에서 알림을 수신할 수 있습니다. (이미지 출처: Amazon Web Services)
하지만 이전에는 이러한 IoT 응용 제품을 기반으로 하는 Alexa 지원 장치를 설계하려면 별도의 노력이 필요했습니다. 클라우드 기반 Alexa 서비스를 사용하려면 장치가 Android 또는 Linux 플랫폼에서 실행 중인 AVS 장치 소프트웨어 개발 키트(SDK)를 통해 제공되는 AVS 서비스 라이브러리를 실행하여 깨우기 언어를 감지하고, Alexa 클라우드와 통신하고, 지원되는 기능에 대한 명령어를 처리해야 합니다(그림 3).
그림 3: 이 구성도는 AVS 장치 SDK 부품 및 해당 부품 간 데이터 흐름을 보여주는 구성도 (이미지 출처: Amazon Web Services)
이러한 서비스 라이브러리를 지원하려면 일반적으로 Alexa 지원 장치 설계에서 AVS 처리 요구를 충족하는 고성능 응용 프로세서와 50MB 이상의 메모리가 필요합니다. 또한 이러한 설계에서는 잡음 환경에서 음성 오디오를 추출하고 음성 지원 장치에 필요한 원거리 음성 기능을 지원하는 데 필요한 복잡한 알고리즘을 실행하기 위해 디지털 신호 처리(DSP)를 통합하는 경우도 있습니다. 일반적으로 효과적인 Alexa 지원 장치를 빌드하기 위한 시스템 요구 사항은 일반 IoT 장치에 필요한 비용 및 복잡성 수준을 초과합니다.
하지만 AVS Integration for AWS IoT Core의 출시로 Amazon은 Alexa 내장 제품을 구현하는 데 필요한 프로세서 워크로드 및 메모리 실장 면적을 획기적으로 줄였습니다. 이 서비스에서는 컴퓨팅 및 메모리 집약적인 작업이 Alexa 지원 장치에서 클라우드의 연결된 가상 장치로 이동됩니다(그림 4).
그림 4: AVS for AWS IoT Core는 리소스 제약이 있는 IoT 장치에서 Alexa 음성 지원 기능을 구현할 수 있도록 메모리 및 처리 집약적 작업을 클라우드로 이동합니다. (이미지 출처: Amazon Web Services)
물리적 장치의 처리 책임은 보안 메시징, Alexa에서 안정적으로 오디오 데이터 송수신, 작업 관리, 장치 내에서 Alexa를 통한 이벤트 알림 등과 같은 기본 서비스 제공으로 축소됩니다. 물리적 장치와 Alexa 간의 데이터, 명령 및 알림 전송은 효율적인 MQTT(MQ Telemetry Transport) 메시징을 통해 MQTT 게시-구독 프로토콜의 일부 예약된 주제에 따라 수행됩니다. 마지막으로 컴패니언 모바일 앱은 장치 등록과 Alexa 지원 장치에 필요한 추가 사용자 상호 작용을 위해 Alexa 클라우드와 상호 작용합니다.
고강도 처리를 클라우드로 이동할 때 AVS for AWS IoT Core를 활용하면 개발자는 내장형 시스템 개발자에게 친숙한 플랫폼에서 Alexa 내장 제품을 제작할 수 있습니다. Linux 또는 Android에서 실행 중인 50MB의 메모리를 탑재한 응용 프로세서 대신 개발자는 실시간 운영 체제(RTOS) 소프트웨어를 실행 중인 1MB 미만의 RAM이 탑재된 적절한 마이크로 컨트롤러에서 이 설계를 구현할 수 있습니다. 실제로 AVS for AWS IoT Core로 작성된 Alexa 지원 설계에서는 전체 AVS 서비스 제품군을 로컬로 실행하기 위해 빌드된 설계에 비해 부품 명세서(BOM) 기준 비용을 50% 절감할 수 있습니다.
AVS for AWS IoT Core는 비용 효율적인 런타임 플랫폼을 지원하지만 인증된 Alexa 내장 제품을 구현하려면 복잡한 작업을 수행해야 합니다. AVS 및 IoT Core를 처음 사용하는 개발자는 보안, 통신, 계정 관리, 사용자 경험(UX) 설계 등에 대한 AWS 요구 사항 관련 작업을 힘들게 학습해야 할 수 있습니다. AWS 에코시스템에 익숙한지 여부에 상관없이 모든 Alexa 제품 개발자는 설계가 Amazon Alexa 인증을 획득하는 데 필요한 모든 사양 및 요구 사항을 충족하는지 확인해야 합니다.
Alexa를 위한 NXP의 마이크로 컨트롤러 기반 솔루션은 Amazon AVS for AWS IoT Core에 대한 장치측 하드웨어 및 소프트웨어 요구 사항을 완벽하게 구현하는 턴키 시스템 솔루션을 제공합니다.
마이크로 컨트롤러 기반 Alexa 솔루션
NXP i.MX RT106A 마이크로 컨트롤러를 기반으로 하는 NXP SLN-ALEXA-IOT AVS 키트는 기성 AWS 연결, AVS 인증 원거리 오디오 알고리즘, 에코 소거, Alexa 깨우기 언어 기능 및 응용 코드를 제공합니다. Arm Cortex-M7 코어를 기반으로 하는 키트의 i.MX RT106A 마이크로 컨트롤러는 IoT 에지 컴퓨팅용으로 특별히 고안된 크로스오버 프로세서의 NXP i.MX RT106x 제품군에 속합니다. 내장형 음성 응용 제품용으로 고안된 RT106A는 NXP i.MX RT1060 크로스오버 프로세서 제품군의 기본 아키텍처의 포괄적인 주변 장치 인터페이스, 포괄적인 내부 메모리, 광범위한 외부 메모리 옵션 지원에 특수 기능을 추가합니다(그림 5).
그림 5: NXP i.MX RT1060 크로스오버 프로세서 제품군은 Arm Cortex-M7 마이크로 컨트롤러 코어를 IoT 장치에 일반적으로 필요한 전체 주변 장치 인터페이스, 메모리 및 기타 기능과 통합합니다. (이미지 출처: NXP)
통합된 기능을 탑재한 i.MX RT106A 마이크로 컨트롤러는 AVS for AWS IoT Core를 구현하는 데 필요한 하드웨어 기반을 제공하기 위해 몇 가지 추가 부품이 필요합니다. SLN-ALEXA-IOT 키트에서 NXP는 시스템 모듈의 i.MX RT106A 마이크로 컨트롤러를 256Mb 플래시 메모리, Murata Electronics의 LBEE5KL1DX Wi-Fi/Bluetooth 트랜시버 모듈 및 Diodes의 AP2202K-3.3TRG1 벅 컨버터와 통합합니다(그림 6).
그림 6: NXP SLN-ALEXA-IOT AVS 키트 시스템 모듈 설계에서는 NXP i.MX RT106A 마이크로 컨트롤러를 외부 플래시 및 무선 트랜시버와 통합하는 데 필요한 간단한 하드웨어 인터페이스를 활용합니다. (이미지 출처: NXP)
이 시스템 모듈을 보완하여 SLN-ALEXA-IOT 키트의 음성 기판은 세 가지 구성품, 즉 Knowles SPH0641LM4H-1 펄스 밀도 변조(PDM) MEMS 마이크, PUI Audio AS01808AO 스피커 및 NXP TFA9894D D급 오디오 증폭기를 제공합니다. 개인용 컴퓨터에서 셸 콘솔을 실행하고 키트를 구동하는 데 필요한 USB Type C 커넥터와 함께 음성 기판은 이더넷, 직렬 주변 장치 및 i.MX RT106A 마이크로 컨트롤러 범용 입/출력(GPIO)을 위한 헤더를 제공합니다. 마지막으로 기판에는 다양한 LED 색상과 온/오프 순환 패턴을 사용하여 Amazon AVS UX Attention System 요구 사항을 충족하는 시각적 피드백용 LED와 기본 제어 입력을 위한 스위치를 포함합니다.
시스템 모듈 및 음성 기판과 함께 SLN-ALEXA-IOT 하드웨어는 AVS for AWS IoT Core 소프트웨어의 장치측 처리에 완벽한 플랫폼을 제공합니다. 하지만 앞서 언급한 대로 Alexa 지원 IoT 장치 설계에서는 하드웨어에 못지않게 최적화된 소프트웨어도 중요합니다. Amazon의 AVS for AWS IoT API를 사용하여 이러한 소프트웨어를 처음부터 작성하려면 개발자가 필요한 데이터 개체를 작성하고 연결된 프로토콜을 구현하는 과정을 진행해야 하므로 프로젝트가 크게 지연될 수 있습니다. 개발자가 설계에서 Alexa 내장 인증을 처리하고, 사용자와 Alexa 서비스 상호 작용의 각 측면과 관련한 AVS UX Attention System, AWS 보안 방법 및 기타 요구 사항을 준수하는 과정에서 추가적인 지연이 발생할 수 있습니다. NXP는 XIP(execute-in-place) 플래시, 연결 및 기타 하드웨어 부품을 위한 소프트웨어 드라이버 계층에 내장된 Amazon FreeRTOS를 기반으로 하는 포괄적인 런타임 음성 제어 소프트웨어 환경을 통해 이러한 문제를 해결합니다(그림 7).
그림 7: Amazon FreeRTOS를 기반으로 하는 NXP 음성 제어 시스템 환경에서는 머신 러닝 추론 및 오디오 프런트 엔드 처리를 위한 펌웨어 루틴을 비롯하여 포괄적인 미들웨어 서비스를 제공합니다. (이미지 출처: NXP)
이 소프트웨어 환경에서 음성 처리 기능의 기초가 되는 NXP의 지능형 툴박스 펌웨어는 오디오 신호 조절 및 최적화를 위한 머신 러닝(ML) 추론 엔진 및 ML 오디오 프런트 엔드를 비롯하여 모든 오디오 작업에 최적화된 기능을 제공합니다. 기타 미들웨어 서비스는 보안 연결, AWS 통신 및 오디오 기능을 지원합니다. 이 포괄적인 서비스 계층 이외에 AWS IoT Core용 소프트웨어, 기판 실장 및 기타 응용 제품 제어 기능은 AWS IoT OTA 서비스 및 Amazon FreeRTOS OTA 클라이언트를 기반으로 구축된 무선(OTA) 업데이트를 지원하여 2단계 부트로더를 통한 시동을 중재합니다.
이 환경에서 실행 중인 공장 설치 소프트웨어를 사용하여 개발자는 AWS IoT에 대한 NXP 데모 계정을 사용하도록 설계된 전체 Alexsa 지원 응용 제품에서 SLN-ALEXA-IOT 하드웨어 키트를 즉시 가동할 수 있습니다. NXP 설명서에서는 데모 계정을 사용하여 키트를 가동하고, Wi-Fi 자격 증명을 프로비저닝하고, AWS 장치 인증을 완료하는 과정을 자세히 안내합니다. 이 과정의 일부로 개발자는 소프트웨어 배포 패키지에 포함된 Android 모바일 앱을 사용하여 키트 및 AWS와 상호 작용합니다. 소프트웨어 배포 패키지는 각 SLN-ALEXA-IOT 키트와 함께 제공된 활성화 코드를 사용하여 NXP 사이트에서 다운로드할 수 있습니다. 몇 가지 간단한 단계를 마친 후 개발자는 에코 스마트 스피커에 제공된 것과 동일한 종류의 Alexa 음성 상호 작용을 통해 키트와 즉시 상호 작용할 수 있습니다.
Alexa 기능을 사용하여 시제품을 빠르게 제작할 수 있도록 SLN-ALEXA-IOT 키트와 공장 설치 소프트웨어에서는 기성 플랫폼을 제공합니다. 또한 키트 하드웨어 및 소프트웨어는 i.MX RT106A 마이크로 컨트롤러를 기반으로 맞춤형 Alexa 지원 설계를 작성하기 위한 빠른 개발 플랫폼 역할을 합니다.
맞춤형 개발
i.MX RT106A 기반 Alexa 솔루션 소프트웨어에서는 제품을 활성화할 때 소프트웨어 배포 패키지의 일부로 제공되는 NXP MCU Alexa Voice IoT SDK를 통해 NXP 음성 제어 런타임 환경의 기능을 활용합니다. NXP Eclipse 기반 MCUXpresso 통합 개발 환경(IDE)에 대한 애드온으로 고안된 이 SDK는 샘플 응용 프로그램, 드라이버 및 미들웨어를 위한 전체 소스 코드를 특수 펌웨어 기능(예: NXP 지능형 툴박스, ML 추론 엔진, ML 오디오 프런트 엔드)의 이진 배포용 헤더와 결합합니다.
Alexa 지원 제품을 빠르게 배포해야 하는 개발자는 원칙적으로 전체 Alexa 데모 응용 프로그램을 약간만 수정하여 사용할 수 있습니다. 가장 간단한 경우 이러한 수정을 통해 개발자의 보안 자격 증명을 사용하여 고유한 AWS 계정으로 응용 프로그램의 대상을 간단히 재설정할 수 있습니다. NXP는 이 과정을 완료하는 방법을 단계별로 설명합니다.
맞춤형 개발을 위해 소프트웨어 배포에 포함된 샘플 응용 프로그램에서는 NXP MCU Alexa Voice IoT SDK 작업 방법을 보여주는 실행 가능한 예제를 제공합니다. 전체 Alexa 데모 응용 프로그램으로 바로 뛰어드는 대신 개발자는 샘플 응용 프로그램을 탐구하여 오디오 프런트 엔드, Wi-Fi 및 Bluetooth 연결, 부트로딩을 비롯한 특정 기능을 중심으로 자세히 살펴볼 수 있습니다. 예를 들어, 오디오 프런트 엔드 샘플 응용 프로그램은 Amazon FreeRTOS 작업을 사용하여 깨우기 언어를 감지하는 기본 설계 패턴을 보여줍니다.
오디오 프런트 엔드 샘플 응용 프로그램에서 주 루틴은 개발자가 하드웨어 및 소프트웨어 서브 시스템을 초기화하고 FreeRTOS xTaskCreate 기능을 사용하여 기본 응용 프로그램 작업(appTask) 및 콘솔 셸 작업(sln_shell_task)을 시작한 다음 FreeRTOS 스케줄러에 제어권을 전달하는 방법을 보여줍니다(목록 1). (참고: FreeRTOS 스케줄러를 시작하는 vTaskStartScheduler 호출은 스케줄러에 메모리가 부족한 경우에만 반환됩니다.)
복사 void main(void) { /* Enable additional fault handlers */ SCB->SHCSR |= (SCB_SHCSR_BUSFAULTENA_Msk | /*SCB_SHCSR_USGFAULTENA_Msk |*/ SCB_SHCSR_MEMFAULTENA_Msk); /* Init board hardware. */ BOARD_ConfigMPU(); BOARD_InitBootPins(); BOARD_BootClockRUN(); .
.
.
RGB_LED_Init(); RGB_LED_SetColor(LED_COLOR_GREEN); sln_shell_init(); xTaskCreate(appTask, "APP_Task", 512, NULL, configMAX_PRIORITIES - 1, &appTaskHandle); xTaskCreate(sln_shell_task, "Shell_Task", 1024, NULL, tskIDLE_PRIORITY + 1, NULL); /* Run RTOS */ vTaskStartScheduler(); .
.
.
}
목록 1: NXP MCU Alexa Voice IoT SDK 배포에 포함된 샘플 오디오 프런트 엔드 응용 프로그램은 기본 응용 프로그램 작업 및 콘솔 쉘 작업을 위한 FreeRTOS 작업에 대한 기본 초기화 요구 사항과 생성을 보여줍니다. (코드 출처: NXP)
오디오 서브 시스템을 초기화한 후 기본 응용 프로그램 작업 appTask는 FreeRTOS 작업 쌍을 시작합니다. 한 작업에서는 오디오 입력을 처리하는 서비스 루틴 audio_processing_task를 실행하고, 다른 작업에서는 마이크 PDM 출력을 펄스 코드 변조(PCM)로 변환합니다. 추가 관리 후 appTask는 무한 루프로 이전하여 깨우기 언어가 감지되었음을 나타내는 RTOS 알림을 기다립니다(목록 2).
복사 void appTask(void *arg) { .
.
.
// Create audio processing task if (xTaskCreate(audio_processing_task, "Audio_processing_task", 1536U, NULL, audio_processing_task_PRIORITY, &xAudioProcessingTaskHandle) != pdPASS) .
.
.
// Create pdm to pcm task if (xTaskCreate(pdm_to_pcm_task, "pdm_to_pcm_task", 1024U, NULL, pdm_to_pcm_task_PRIORITY, &xPdmToPcmTaskHandle) != pdPASS) .
.
.
RGB_LED_SetColor(LED_COLOR_OFF); SLN_AMP_WriteDefault(); uint32_t taskNotification = 0; while (1) { xTaskNotifyWait(0xffffffffU, 0xffffffffU, &taskNotification, portMAX_DELAY); switch (taskNotification) { case kWakeWordDetected: { RGB_LED_SetColor(LED_COLOR_BLUE); vTaskDelay(100); RGB_LED_SetColor(LED_COLOR_OFF); break; } default: break; } taskNotification = 0; } }
목록 2: 샘플 오디오 프런트 엔드 응용 프로그램에서 기본 응용 프로그램 작업 appTask는 오디오 처리와 마이크 데이터 변환을 처리하는 작업을 시작한 다음 깨우기 언어가 감지되었다는(kWakeWordDetected) FreeRTOS 알림(taskNotification)을 기다립니다. (코드 출처: NXP)
결국 이 샘플 응용 프로그램의 오디오 처리 작업에서는 깨우기 언어 펌웨어 기능을 시작하고 깨우기 언어 감지 파라미터를 시작한 다음 무한 루프로 진입하여 처리된 마이크 데이터가 사용 가능하다는 마이크 데이터 변환 작업의 FreeRTOS 알림을 기다립니다. 이제 오디오 처리 작업에서는 오디오 데이터를 처리하고 ML 추론 엔진을 사용하여 깨우기 언어 감지를 수행하는 지능형 툴박스 펌웨어 기능을 호출합니다(목록 3).
복사 void audio_processing_task(void *pvParameters) { .
.
.
SLN_AMAZON_WAKE_Initialize(); SLN_AMAZON_WAKE_SetWakeupDetectedParams(&wakeWordActive, &wwLen); while (1) { // Suspend waiting to be activated when receiving PDM mic data after Decimation xTaskNotifyWait(0U, ULONG_MAX, &taskNotification, portMAX_DELAY); .
.
.
// Process microphone streams int16_t *pcmIn = (int16_t *)((*s_micInputStream)[pingPongIdx]); SLN_Voice_Process_Audio(g_externallyAllocatedMem, pcmIn, &s_ampInputStream[pingPongAmpIdx * PCM_SINGLE_CH_SMPL_COUNT], &cleanAudioBuff, NULL, NULL); // Pass output of AFE to wake word SLN_AMAZON_WAKE_ProcessWakeWord(cleanAudioBuff, 320); taskNotification &= ~currentEvent; if (wakeWordActive) { wakeWordActive = 0U; // Notify App Task Wake Word Detected xTaskNotify(s_appTask, kWakeWordDetected, eSetBits); } } }
목록 3: 샘플 오디오 프런트 엔드 응용 프로그램의 오디오 처리 작업에서는 펌웨어 깨우기 언어 엔진을 초기화하고, 마이크 데이터가 사용 가능하다는 FreeRTOS 알림을 기다린 다음 깨우기 언어 감지를 위한 NXP 지능형 툴박스 펌웨어 아날로그 프런트 엔드(SLN_Voice_Process_Audio) 및 ML 추론 엔진(SLN_AMAZON_WAKE_ProcessWakeWord)을 호출합니다. (코드 출처: NXP)
깨우기 언어를 감지한 후 오디오 처리 작업에서는 FreeRTOS 작업 알림을 실행하여 기본 응용 프로그램 작업 appTask에 해당 이벤트를 알립니다. 해당 알림이 수신되면 appTask는 파란색 LED를 잠깐 깜박입니다(목록 2 참조).
전체 Alexa 샘플 응용 프로그램에서는 간단한 오디오 프런트 엔드 응용 프로그램에 대해 설명된 것과 동일한 패턴을 따르지만 전체 Alexa 기능을 지원하도록 기본 코드 베이스를 크게 확장합니다. 예를 들어, ML 추론 엔진이 Alexa 샘플 응용 프로그램에서 깨우기 언어를 감지하면 오디오 처리 작업에서는 Alexa 처리 시퀀스의 각 스테이지와 연관된 일련의 FreeRTOS 알림을 수행합니다(목록 4).
복사 void audio_processing_task(void *pvParameters) { .
.
.
SLN_AMAZON_WAKE_Initialize(); SLN_AMAZON_WAKE_SetWakeupDetectedParams(&u8WakeWordActive, &wwLen); while (1) { // Suspend waiting to be activated when receiving PDM mic data after Decimation xTaskNotifyWait(0U, ULONG_MAX, &taskNotification, portMAX_DELAY); .
.
.
int16_t *pcmIn = (int16_t *)((*s_micInputStream)[pingPongIdx]); SLN_Voice_Process_Audio(g_w8ExternallyAllocatedMem, pcmIn, &s_ampInputStream[pingPongAmpIdx * PCM_SINGLE_CH_SMPL_COUNT], &pu8CleanAudioBuff, NULL, NULL); SLN_AMAZON_WAKE_ProcessWakeWord((int16_t*)pu8CleanAudioBuff, 320); taskNotification &= ~currentEvent; // If devices is muted, then skip over state machine if (s_micMuteMode) { if (u8WakeWordActive) { u8WakeWordActive = 0U; } memset(pu8CleanAudioBuff, 0x00, AUDIO_QUEUE_ITEM_LEN_BYTES); } if (u8WakeWordActive) { configPRINTF(("Wake word detected locally\r\n")); } // Execute intended state switch (s_audioProcessingState) { case kIdle: /* add clean buff to cloud wake word ring buffer */ continuous_utterance_samples_add(pu8CleanAudioBuff, PCM_SINGLE_CH_SMPL_COUNT * PCM_SAMPLE_SIZE_BYTES); if (u8WakeWordActive) { continuous_utterance_buffer_set(&cloud_buffer, &cloud_buffer_len, wwLen); u8WakeWordActive = 0U; wwLen = 0; // Notify App Task Wake Word Detected xTaskNotify(s_appTask, kWakeWordDetected, eSetBits); // App Task will now determine if we begin recording/publishing data } break; .
.
.
case kWakeWordDetected: audio_processing_reset_mic_capture_buffers(); // Notify App_Task to indicate recording xTaskNotify(s_appTask, kMicRecording, eSetBits); if (s_audioProcessingState != kMicRecording) { s_audioProcessingState = kMicCloudWakeVerifier; } configPRINTF(("[audio processing] Mic Recording Start.\r\n")); // Roll into next state case kMicCloudWakeVerifier: case kMicRecording: micRecordingLen = AUDIO_QUEUE_ITEM_LEN_BYTES; if (u8WakeWordActive) { u8WakeWordActive = 0U; } // Push data into buffer for consumption by AIS task status = audio_processing_push_mic_data(&pu8CleanAudioBuff, &micRecordingLen); .
.
.
} }
목록 4: 전체 Alexa 응용 프로그램의 오디오 처리 작업에서는 Alexa 시퀀스의 후속 오디오 처리 스테이지를 관리하는 추가 코드를 사용하여 오디오 프런트 엔드 응용 프로그램에서 수행되는 처리 단계를 강화합니다. (코드 출처: NXP)
로컬 ML 깨우기 언어가 감지되면 전체 Alexa 응용 프로그램의 오디오 처리 작업에서는 앞서 설명한 대로 기본 응용 프로그램 작업을 알립니다. 또한 이제 오디오 처리 상태를 관리해야 합니다. 이때 마이크를 열린 상태로 유지하여 로컬로 감지된 깨우기 언어를 포함하는 원래 데이터 스트림을 손실하지 않고 Alexa 클라우드에서 음성 처리를 위한 전체 오디오 입력을 캡처합니다. 이 전체 데이터 스트림은 깨우기 언어 알림과 추가 음성 처리를 위해 Alexa 클라우드에 전달됩니다.
이 처리 시퀀스의 각 스테이지에서 오디오 처리 작업은 기본 응용 프로그램 작업에 해당하는 FreeRTOS 알림을 실행합니다. 오디오 처리 작업과 마찬가지로 전체 Alexa 응용 프로그램에서는 오디오 프런트 엔드 응용 프로그램에 간단한 형식으로 표시되는 기본 응용 프로그램 작업을 확장합니다. 여기서 전체 응용 프로그램의 기본 응용 프로그램 작업 appTask는 Amazon AVS UX Attention System 요구 사항에 따라 Alexa 클라우드로 전송 이벤트와 키트의 LED 관리 이벤트를 모두 생성합니다. 예를 들어 깨우기 언어 감지 후 마이크를 열린 상태로 유지할 때 오디오 처리 작업에서는 기본 응용 프로그램 작업에 알림을 제공하여 적절한 UX 주의 상태(시안색 LED 표시등)를 설정합니다(목록 5의 노란색 강조 표시 및 목록 4의 해당 강조 표시 참조).
복사 void appTask(void *arg) { .
.
.
// Create audio processing task if (xTaskCreate(audio_processing_task, "Audio_proc_task", 1536U, NULL, audio_processing_task_PRIORITY, &xAudioProcessingTaskHandle) != pdPASS) .
.
.
// Create pdm to pcm task if (xTaskCreate(pdm_to_pcm_task, "pdm_to_pcm_task", 512U, NULL, pdm_to_pcm_task_PRIORITY, &xPdmToPcmTaskHandle) != pdPASS) .
.
.
while(1) { xTaskNotifyWait( ULONG_MAX, ULONG_MAX, &taskNotification, portMAX_DELAY ); if (kIdle & taskNotification) { // Set UX attention state ux_attention_set_state(uxIdle); taskNotification &= ~kIdle; } if (kWakeWordDetected & taskNotification) { if (reconnection_task_get_state() == kStartState) { if (!AIS_CheckState(&aisHandle, AIS_TASK_STATE_MICROPHONE)) { // Set UX attention state ux_attention_set_state(uxListeningStart); .
.
.
// Begin sending speech micOpen.wwStart = aisHandle.micStream.audio.audioData.offset + 16000; micOpen.wwEnd = aisHandle.micStream.audio.audioData.offset + audio_processing_get_wake_word_end(); micOpen.initiator = AIS_INITIATOR_WAKEWORD; AIS_EventMicrophoneOpened(&aisHandle, &micOpen); // We are now recording audio_processing_set_state(kWakeWordDetected); } } else { ux_attention_set_state(uxDisconnected); audio_processing_set_state(kReconnect); } taskNotification &= ~kWakeWordDetected; } .
.
.
if (kMicRecording & taskNotification) { // Set UX attention state and check if mute is active // so we don't confuse the user if (audio_processing_get_mic_mute()) { ux_attention_set_state(uxMicOntoOff); } else { ux_attention_set_state(uxListeningActive); } taskNotification &= ~kMicRecording; } .
.
.
목록 5: 전체 Alexa 응용 프로그램의 기본 응용 프로그램 작업에서는 Alexa 인증 요구 사항에 따라 LED 조명 제어를 비롯한 Alexa 처리 시퀀스를 조율합니다. (코드 출처: NXP)
마찬가지로 전체 Alexa 응용 프로그램의 주 루틴에서는 오디오 프런트 엔드 응용 프로그램에 간단한 형식으로 시연된 패턴을 확장합니다. 이 경우 기본 응용 프로그램은 후속 초기화 절차를 위한 추가 FreeRTOS 작업과 키트의 버튼 처리와 OTA 업데이트 지원을 위한 작업도 생성합니다.
이러한 샘플 응용 프로그램을 기반으로 하여 작성함으로써 개발자는 자체 i.MX RT106A 설계에서 NXP MCU Alexa Voice IoT SDK를 사용하여 Alexa 내장 기능을 안전하게 구현할 수 있습니다. AVS for AWS IoT Core를 최대한 활용하므로 이 실행 플랫폼을 사용하면 개발자가 정교한 IoT 응용 프로그램을 기반으로 리소스 제약이 있는 저비용 장치에서 Alexa 지원 솔루션을 광범위하게 배포할 수 있습니다.
결론
Amazon Alexa Voice Service를 활용하면 개발자가 Echo 스마트 스피커의 빠른 성장을 구동하는 동일한 음성 지원 기능을 구현할 수 있습니다. 이전에는 제품에서 탐나는 Alexa 내장 인증을 취득하려면 대용량 로컬 메모리와 고성능 처리 기능을 갖춘 실행 플랫폼이 필요했습니다. AVS for AWS IoT Core로 구축된 NXP의 키트는 마이크로 컨트롤러 및 연결된 소프트웨어 실행 환경을 사용하여 Alexa 내장 기능을 위한 드롭인 솔루션을 제공합니다.
면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.


