- Elettronica Open Source - https://it.emcelettronica.com -

L’hardware per il riconoscimento vocale embedded

Il chip RSC-4128, prodotto molti anni fa dalla Sensory, è un microcontrollore  ad 8 bit dotato  di ADC, DAC, preamplificatore  microfonico, RAM, ROM, 24 GPIO (General Purpose Input Output) e 4 timer. Il chip implementa (tramite un apposito firmware precaricato, il FluentChipTM) algoritmi basati su reti neurali e DTW per consentire il riconoscimento vocale Speaker Independent (SI) [1] e Speaker Dependent (SD), anche in ambienti fortemente rumorosi.

INTRODUZIONE

Il chip RSC-4128 è basato su un core con istruzioni a lunghezza variabile (e comunque non superiori ai 3 byte), il cui set di istruzioni risulta molto simile a quello dell’8051. Il micro è programmabile tramite l’ambiente IDE (dotato di assembler e linker) gratuito oppure utilizzando come linguaggio il C. Fin qui nulla di particolare, sembrerebbe il classico micro ad 8 bit. La Figura 1 mostra un’immagine del package LQFP di questo componente.

Figura 1. Immagine del chip RSC-4128 [2]

Figura 1. Immagine del chip RSC-4128

Ma la particolarità dell’RSC-4128 è nel supporto di avanzate tecnologie vocali. La tecnologia SI necessita di una ROM (interna o esterna al chip) in cui memorizzare i comandi da riconoscere. Nel caso della speaker dependent, invece, è richiesta una memoria SRAM (ad esempio EEPROM o FLASH) per conservare i modelli da comparare e riconoscere. Molto interessante dal punto di vista implementativo è la tecnologia Speaker Verification (SV) che permette il riconoscimento biometrico dei comandi. Dopo una prima fase di training basata su una particolare frase di configurazione, è possibile riconoscere specifiche parole pronunciate  esclusivamente dalla persona che ha effettuato il training. Questa  funzionalità  risulta molto  utile  nei  sistemi  di sicurezza in cui si desidera garantire  l’accesso  tramite password  pronunciata   da una specifica persona. Particolarmente  attrattiva per gli audiofili risulta essere  la  sintesi  musicale  e vocale (SX) che è possibile implementare con questo chip, usando bitrate compresi tra 2.4Kbps e 10.8Kbps. La frequenza di campionamento massima è 16kHz. Interessante risulta essere la possibilità di comprimere l’audio usando la tecnica PCM ad 8bit (64kbps) o ADPCM a 4bit (32kbps).  La musica è generata con un sistema simile al MIDI, in cui è possibile gestire fino a 14 strumenti su altrettanti canali differenti. Con l’opzione Continuous Listening è possibile mettere il chip in attesa di un specifica parola, mentre con il Word Spotting esso riesce a riconoscere fino a 10 parole SI e 5 parole SD. Infine, con la funzionalità Record & Playback (detta anche Voice Memo) è possibile registrare e riprodurre suoni con vari livelli di compressione, pur mantenendo una buona qualità dell’audio. Con l’opzione di rimozione del silenzio è poi possibile risparmiare ulteriormente memoria. Grazie a tali peculiarità, questi chip sono ampiamente sfruttati,  tra l’altro, nella realizzazione di giochi elettronici che sono in grado di parlare, ascoltare e comprendere chi li utilizza. Un esempio su tutti: la nuova versione del celebre FURBY della HASBRO. La casa madre, in collaborazione con Sensory, ha impiegato una tecnologia denominata EMOTO-TRONICS, essenzialmente basata sulle capacità del chip RSC-4128. Ovviamente, per questa applicazione è stata usata la tecnologia speaker indipendent, in modo che chiunque (uomini, donne, bambini e adulti)  possano  utilizzarlo. Semplicemente sostituendo il contenuto della ROM interna il prodotto è stato reso multilingua. Particolarmente utile, in progetti di apparecchiature portatili, risulta essere la funzione di Audio Wakeup. Infatti, messo in modalità power down, il chip può essere riattivato oltre che con i normali eventi previsti per gli altri micro, anche mediante un suono particolare come un fischio o un battito di mani. Quello che si va a descrivere è quindi un completo sistema embedded [3], dal basso costo che può essere facilmente  sfruttato  a livello hobbistico, ma che viene anche impiegato dalle grandi case produttrici di elettronica. Si mostrerà come è organizzato internamente, come usare le differenti periferiche e quali sono i principali kit di sviluppo cost-sensitive  per muovere i primi  passi con queste tecnologie.

ARCHITETTURA DELL’RSC-4128

L’RSC-4128 presenta al suo interno un elevato livello di integrazione di periferiche e motori DSP, fornendo al progettista una piattaforma mixed-signal per applicazioni general purpouse, dal costo competitivo e con strumenti semplici da utilizzare ed integrare nel proprio progetto.  Lo schema generale a  cui  si  farà  riferimento  nel corso dell’articolo è riportato in Figura 2.

Figura 2. Schema a blocchi [4]

Figura 2. Schema a blocchi

La parte analogica comprende, tra l’altro, un preamplificatore per microfono con controllo automatico del guadagno (AGC). Per quanto concerne invece le periferiche analogiche di uscita, sono presenti un PWM che è in grado di pilotare direttamente uno speaker oppure un DAC che necessita invece di finale esterno per il controllo di un altoparlante. Il chip dispone di 128kB di ROM e 4.8kB di RAM on-board. Il modulo sfrutta le potenzialità del firmware FluentChipTM, una suite di librerie ultra compatta per lo sviluppo di applicazioni basate sulle tecnologie di riconoscimento vocale e sintesi vocale/sonora. Sono sufficienti appena 20kB di ROM (il 15% di quella totale on-chip) per riconoscere  un  set  di  parole con una precisione elevatissima, speaker independent e con una ragionevole tolleranza al rumore ambientale.  Lo  sforzo  dei  progettisti  del  RSC-4128 per rendere quanto più semplice possibile l’utilizzo del chip, ha portato allo sviluppo della tecnologia T2SI (Text-to-Speaker-Independent). Essa consente la creazione di un set di parole da riconoscere  semplicemente  inserendole  in  un editor di testi apposito. La Figura 3 permette di comprendere meglio l’architettura  interna del chip.

Figura 3. Architettura interna del microcontrollore RSC-4128 [5]

Figura 3. Architettura interna del microcontrollore RSC-4128

Esso dispone  di un bus dati ad 8bit ed uno a 20bit per l’indirizzamento della memoria esterna. Il pin /XM permette di abilitare o disabilitare la ROM interna. I blocchi PORT1, PORT2 e PORT3 costituiscono i 24 pin di I/O general purpose, per il controllo o la comunicazione di/con dispositivi esterni. I pin da P2.0 a P2.4 possono essere configurati come comparatori analogici di ingresso. Come si nota dalla Figura 3, il micro dispone di due ingressi per il clock. Si tratta di un clock veloce (14,32MHz) e di uno a bassa frequenza (32,768kHz). Si può scegliere di usare una delle due sorgenti, ricordando però che per utilizzate le funzioni di riconoscimento vocale è necessaria la frequenza operativa più alta. Per pilotare OSC1 è possibile usare un economico quarzo a 3.58MHz e poi sfruttare il PLL  interno   per   arrivare  a 14,32MHz. Invece, OSC2 fornisce la possibilità di usare un quarzo esterno oppure il circuito RC interno (quindi senza nessun componente esterno). Come la maggior parte dei micro, anche l’RSC-4128 è dotato di timer/contatori  ad 8bit, tra cui quello di Watchdog che può essere usato per uscire da una condizione di blocco del firmware e quello Multi-tasking  per assegnare dei thread ai diversi processi in esecuzione.

UTILIZZO DELL’RSC 4128

Il set di istruzioni

L’instruction set del RSC-4128 conta 60 istruzioni, suddivise in 13 move, 7 rotate, 11 branch, 22 aritmetiche  e 7 di vario uso. Tutte le istruzioni sono lunghe al più 3byte e nessuna di esse richiede più di 10 cicli di clock per essere eseguita (questo significa tempi inferiori a 0,7ms se si usa un clock a 14.32MHz). La Tabella 1 mostra tutte le 13 operazioni di move, con i relativi operandi ed i cicli di clock richiesti per l’esecuzione.

Tabella 1. Istruzioni di move [6]

Tabella 1. Istruzioni di move

Esiste l’istruzione per l’accesso alla memoria di codice  (MOVC), alla memoria dati (MOVX), ai registri (MOV), all’area per le tecnologie di riconoscimento vocale (MOVY). Tutte le operazioni di move occupano 3byte, di cui 1byte per ciascun operando. Le 22 operazioni aritmetico/logiche sono elencate nella Tabella 2.

Tabella 2. Istruzioni aritmetico/logiche [7]

Tabella 2. Istruzioni aritmetico/logiche

Esse scrivono sempre il risultato nel registro indicato come “dest” e modificano il registro dei flag. L’utilizzo di ciascun bit del registro flag è specificato nella Tabella 3.

Tabella 3. Descrizione dei bit di flag [8]

Tabella 3. Descrizione dei bit di flag

Per il set completo delle istruzioni, il lettore può far riferimento al data sheet del componente.

Le memorie on-board

L’RSC-4128 ha uno spazio della memoria RAM appositamente  destinato  ai registri (896byte), di cui 262 per l’applicazione dell’utente. Inoltre, esiste uno spazio supplementare di 64byte dedicato agli SFR (Special Function Register), per un totale di 960byte. L’architettura del chip prevede un indirizzamento limitato ad 8bit, non sufficienti ad indirizzare tutti i 960byte di memoria. Perciò è necessario ricorrere ad uno schema di banking per garantire l’accesso alla memoria. Di seguito gli intervalli di memoria e come sono organizzati:

Figura 4. Suddivisione della memoria RAM (960byte) [9]

Figura 4. Suddivisione della memoria RAM (960byte)

Il chip può indirizzare fino a 2Mbyte di memoria esterna (ROM, RAM e Flash) senza l’aggiunta di circuiti di decodifica addizionali. Questo è possibile grazie alle 16 linee di indirizzamento (A[15:0]), più altre quattro per l’indirizzamento esteso (A[19:16]). I 2Mbyte di memoria indirizzabili sono separati in Constant/Code e Data Space, ciascuno di 1Mbyte. La prima area di memoria è utilizzata per contenere il codice programma oppure per applicazioni speaker independent; essa può essere interna (128Kbyte) oppure esterna ()1Mbytes). La loro selezione avviene tramite il pin /XM. La Data Space è, invece, sempre esterna. Il suo tipico uso è memorizzare i modelli in applicazioni speaker dependent. Secondo quanto riportato nello schema di Figura 3, oltre alle linee dati (D[7:0]) e indirizzo (A[19:0]), esistono altre quattro segnali per effettuare lo strobe in lettura/scrittura (/RDR, /WRC, /RDF e /WRD). L’architettura dell’RSC-4128 presenta uno stack a 16 livelli, ciascuno da 16bit per il salvataggio del PC (Program Counter) nelle chiamate a subroutine o interrupt. Esso è organizzato secondo una struttura ciclica, nel senso che in caso di overflow inizia a scrivere dalla prima locazione (wrap around). Nel registro del flag (Tabella  3) la condizione di stack overflow è segnalata dal bit stkoflo, mentre quella di stack pieno è indicata dal bit stkfull.

Gli interrupts

L’RSC-4128 dispone di 8 sorgenti di interruzione della CPU. Sono tutte attivate sul fronte di salita, eccetto le due richieste di interrupt esterno, che sono invece programmabili. Essi sono attivati da un “interruttore generale” che è il bit GIE contenuto nel registro dei flag. Esistono due registri per la loro configurazione:

La Tabella 4 mostra la posizione di ogni interrupt nei  registri  appena  descritti  e  la  corrispondente funzione. Un interrupt è disabilitato scrivendo 0 nel relativo bit del registro IMR. Comunque, una richiesta di interrupt attiva potrebbe  rimanere pendente. Per essere certi che un interrupt non si verifichi, dopo essere stato disattivato, si deve usare il codice riportato nel listato 1.

cli;         ; GIE = 0
and imr,#0FEH ; Disattiva le
  ;successive richeiste di inerrupt
mov irq,#0FEH ; Disattiva qualsiasi
  ;richiesta pendente di interrupt
sti          ; GIE = 1
Listato 1

Ogni richiesta di interrupt viene servita ad un indirizzo della memoria programma differente, secondo quanto riportato nella colonna “Indirizzo” della Tabella 4.

Tabella 4. Interrupt nei registri IMR e IRQ. [10]

Tabella 4. Interrupt nei registri IMR e IRQ.

Gli ingressi analogici

Il front end analogico (AFE) del chip RSC-4128 è costituito  da un preamplificatore  con controllo del guadagno, da un ADC a 16bit ed un filtro di canale. Tutto il modulo AFE può essere disattivato per ridurre i consumi. Il tipico  ingresso a questo modulo è il segnale analogico generato da un microfono. L’amplificatore fornisce 4 livelli di amplificazione, selezionabili con i due bit D5[4:3] e riportati in Tabella 5.

Tabella 5. I quattro livelli di amplificazione dell’AFE [11]

Tabella 5. I quattro livelli di amplificazione dell’AFE

Il segnale di ingresso deve dunque essere nel range adeguato, altrimenti si avrebbe una saturazione dello stesso. Il segnale amplificato è processato da un convertitore sigma-delta. Questo flusso passa poi attraverso un filtro ed un decimatore per produrre campioni a 16bit, con velocità di 18636 campioni a secondo. Il micro dispone di due differenti ingressi microfonici: MICIN1 e MICIN2. Il primo è utilizzato per le normali operazioni di riconoscimento vocale, mentre il secondo è impiegato per la funzione Audio Wakeup. Questa differenziazione è dovuta al fatto che il consumo di corrente e la risposta in frequenza sono diversi nei due casi. Rientrano nella sezione delle periferiche analogiche di ingresso anche i 2 comparatori analogici di cui il chip è dotato. Sono selezionabili diverse modalità di comparazione mediante il registro CmpCtl, riassunte in Figura 5.

Figura 5. Modalità del comparatore [12]

Figura 5. Modalità del comparatore

Le uscite analogiche

Il DAC consiste  di una rete resistita R-2R con 10bit di risoluzione ed una impedenza di uscita di 11ko circa. Per pilotare uno speaker è necessario interporre un amplificatore esterno che piloti il carico. I 10bit di risoluzione corrispondono ad un range di tensioni analogiche tra 0V e Vdd meno 1 LSB (corrispondente  a 3mV). Ad esempio, il valore  000h  è  convertito  come  0,000V,  200h come 1,500V e 3FFh come 2,997V. Ci sono due modalità  con  cui  utilizzare il DAC: full-scale  e half-scale. Nel primo caso la tensione di uscita può variare tra 0V e VDD - 1LSB. Nella modalità half-scale, invece, l’uscita è compresa tra VDD/4 e 3VDD/4 – 1LSB. Per convertire un campione digitale  è  sufficiente  scriverlo  nel  registro  del DAC (FA). Il PWM permette di implementare la modulazione della larghezza dell’impulso. Il chip è dotato di 2 uscite: PWM0 e PWM1. La risoluzione del modulo è pari ad 8bit oppure a 10bit, in base alla modalità imposta nel registro di controllo (pwmCtl). Con tale modulo è possibile pilotare direttamente uno speaker.  Ovviamente è necessario interporre un filtro passa-basso per eliminare le componenti spettrali indesiderate e dovute alla modulazione.

Caratteristiche elettriche e meccaniche

La Tabella 6 riporta le principali caratteristiche elettriche del chip RSC-4128, mentre la Tabella 7 specifica  le condizioni  limite  di funzionamento.

Tabella 6. Caratteristiche elettriche DC [13]

Tabella 6. Caratteristiche elettriche DC

 

Tabella 7. Condizioni massime di funzionamento [14]

Tabella 7. Condizioni massime di funzionamento

Come si nota la tensione di alimentazione tipica è pari 3V. Il consumo  di corrente quando il chip è alimentato a 3V ed  è attivo  è pari  a 10mA. In modalità  sleep il consumo  si riduce ad appena 1µA. Un potente toolkit di sviluppo (Quick T2SI) assicura una enorme flessibilità e velocità nello sviluppo di applicazioni speaker independet o dependent. Il T2SI sfrutta le più recenti tecniche di reti neurali combinate al modello statistico HMM [15] (Hidden Markov Model) per creare un potente riconoscitore vocale, semplicemente inserendo le parole desiderate come in un comune editor di testi. Il toolkit include, oltre al software per PC, anche una scheda di sviluppo, RSC-4x Demo/Evaluation Board. La scheda risulta già equipaggiata, oltre che con il micro, anche di microfono e varie memorie (RAM, ROM e Flash). La possibilità di estendere la capacità di memorizzazione dei vocaboli è assicurata dalla predisposizione di una memory stick esterna. Un altro prodotto per lo sviluppo di applicazioni cost-sensitive è VR-Stamp (Figura 6).

Figura 6. Scheda compatta VR-Stamp [16]

Figura 6. Scheda compatta VR-Stamp

Il modulo, di dimensioni ridottissime e con piedinatura DIP40, combina tutto il necessario per sviluppare applicazioni SI e SD. Esso si presta bene come add-on in progetti modulari. La scheda comprende anche un banco di memoria Flash da 1Mbit. Per la programmazione ed il testing del VR-Stamp è possibile utilizzare sia l’evaluation kit fornito da Sensory che quello sviluppato appositamente da Mikroelektronika, dotato di speaker e connettore per compact flash.  La tecnologia SI e SD può essere facilmente testata grazie al display LCD 2x16 ed ai numerosi LED e pulsanti presenti sulla scheda. Per completare il quadro della situazione relativa al chip RSC-4128 non resta che parlare dell’ambiente di sviluppo IDE messo a disposizione dalla stessa Sensory: il PhytonTM IDE. Il suo utilizzo è reso più semplice grazie alla presenza di un nutrito numero di esempi sia per applicazioni speaker dependent che
independent. Infatti, la tecnica consigliata da Sensory per iniziare a sviluppare progetti è proprio di partire da tali template per comprendere le tecniche di programmazione. Al programmatore è offerta la possibilità di scrivere il firmware in assembly, C oppure entrambi i linguaggi. L’IDE, comprese le librerie FluentChipTM, sono scaricabili gratuitamente dal sito del produttore.