QNX Technical Articles
QNX® Aviage® Acoustic Processing 1.2 for TI 64xx DSPs: Release Notes
Date of this edition: June 20, 2008
Target hardware: TMS320C64x+ DSP on TI Jacinto (TI DRA466)
Contents
For the most up-to-date version of these release notes, go to our website, www.qnx.com, log into your myQNX account, and then go to the Download Center.
What's in this package?
New Acoustic Processing options
The core features of QNX Aviage Acoustic Processing version 1.1 include:
- Acoustic Echo Cancellation (AEC)
- Noise Reduction (NR)
- Send-side Automatic Gain Control (AGC)
- Send-side Parametric Equalization (PEQ)
- Dual-channel Capability (MIX)
- High Frequency Encoding (HFE)
- Wind Buffet Suppression (WNDB)
- Send-side Dynamic Limiter (SDL)
- Diagnostics API (DIAG)
The new features include:
- Receive-side Bandwidth Extension (RBWE)
- Receive-side Parametric Equalization (RPEQ)
- Receive-side Automatic Gain Control (RAGC)
- Receive-side Dynamic Limiter (RDL)
- Receive-side Dynamic Level Control (RDLC)
- Additional Diagnostics (DIAG)
To support the new features the following parameters were added:
- IQWA_RecvEQSwitch
- IQWA_RecvAGCSwitch
- IQWA_RecvBWESwitch
- IQWA_RecvDLCSwitch
- IQWA_RecvClipStats
- IQWA_RecvInRMS
- IQWA_RecvOutRMS
- IQWA_RecvLimitThresh
- IQWA_RecvParamEQNodes
- IQWA_RecvEQCoeff
- IQWA_RecvGain
- IQWA_RecvResetClipStats
- IQWA_RecvClipStatsMode
- IQWA_NCGainFactor
- IQWA_NCNoiseLevel
- IQWA_NCParams
- IQWA_DiagLatencyTestRef
For the description of these parameters, please see the “Parameters” section in the User's Guide.
API Changes
The following lists all the API changes in this version:
- The configuration structure IQWA_Params was modified to support the new features available with QWA 1.2. Support for the older 1.1 version of the structure was maintained internally.
- Changed the default values for qwaSendAGCMaxRates and qwaRecvAGCMaxRates to target the audio output to use the full PCM value range. This change requires that the send-side limiter be switched on to avoid distortions in certain cases.
- Modified the output sample rate handling to operate as follows:
- The microphone output sample rate is the same as the microphone input sample rate except for the following cases:
- If the receive path is enabled the microphone output sample rate is the same as the receive input sample rate
- Else if the AEC is enabled the microphone output sample rate is the same as the reference input sample rate
- The receive output sample rate is always the same as the microphone input sample rate
To support the output sample rate changes the following read-only parameters were added:
- IQWA_RecvSampleRateOut
- IQWA_RecvFrameShiftOut
- The microphone output sample rate is the same as the microphone input sample rate except for the following cases:
- Changed parameter IQWA_SendParamEQNodes to be both readable and writable
- The mute switches no longer switch abruptly on/off but fade in/out gradually over the length of a frame, to minimize artifacts at the point of switching.
- Added an additional latency test that measures the latency from receive output to reference input.
- The minimum duration for signal playback in the diagnostics module was reduced from 1,000ms to 100ms.
This package contains the following:
- qwa_qnx.l64P
- Acoustic Processing XDAIS Algorithm object library for C4x+ DSP.
- iqwa.h
- Header file including types, defines, and error codes supporting the Acoustic Processing API.
- iqwa.c
- Source code file for default parameters to the Acoustic Processing XDAIS Algorithm.
- qwa_qnx.h
- Header file including additional types and function tables supporting the Acoustic Processing API.
- xqwa.h
- Header file including the general API to the Acoustic Processing XDAIS Algorithm.
- xqwa.c
- Source code file for access to the general API to the Acoustic Processing XDAIS Algorithm.
- xqwa_vr_example.c
- Example application using the implementation of QWA Acoustic Processing XDAIS Algorithm (in voice recognition mode).
- xqwa_hf_example.c
- Source code file for the Acoustic Processing sample application using the general API (hands-free mode).
- Documentation
- The QNX Acoustic Processing (for XDAIS) User's Guide; see “Documentation,” below.
The following files are installed in the directory where you unzip the archive:
- help/html/1QWA_Overview.png
- help/html/2QWA_Details.png
- help/html/3AEC.png
- help/html/4HFE.png
- help/html/BWE.png
- help/html/diag.html
- help/html/doxygen.css
- help/html/doxygen.png
- help/html/examples.html
- help/html/form_0.png
- help/html/form_1.png
- help/html/form_2.png
- help/html/form_3.png
- help/html/form_4.png
- help/html/form_5.png
- help/html/form_6.png
- help/html/form_7.png
- help/html/formula.repository
- help/html/ftv2blank.png
- help/html/ftv2doc.png
- help/html/ftv2folderclosed.png
- help/html/ftv2folderopen.png
- help/html/ftv2lastnode.png
- help/html/ftv2link.png
- help/html/ftv2mlastnode.png
- help/html/ftv2mnode.png
- help/html/ftv2node.png
- help/html/ftv2plastnode.png
- help/html/ftv2pnode.png
- help/html/ftv2vertline.png
- help/html/glossary.html
- help/html/group___a_d_j.html
- help/html/group___a_p_i_generic.html
- help/html/group___c_f_g.html
- help/html/group___d_e_f.html
- help/html/group___d_i_a_g.html
- help/html/group___e_r_r_o_r.html
- help/html/group___parameters.html
- help/html/group___q_w_a.html
- help/html/index.html
- help/html/LatencyDiagram.jpg
- help/html/main.html
- help/html/MIX.png
- help/html/modules.html
- help/html/NR.png
- help/html/one.html
- help/html/pages.html
- help/html/ParamEQ2.png
- help/html/qwa_ref_extrecvout.png
- help/html/qwa_ref=rcvout.png
- help/html/recv.html
- help/html/recvp.html
- help/html/send.html
- help/html/sendp.html
- help/html/struct_i_q_w_a___clip_stats.html
- help/html/struct_i_q_w_a___frame_info_struct.html
- help/html/struct_i_q_w_a___params.html
- help/html/struct_i_q_w_a___status.html
- help/html/syscnf.html
- help/html/tab_b.gif
- help/html/tab_l.gif
- help/html/tab_r.gif
- help/html/tabs.css
- help/html/tree.html
- help/html/tune.html
- help/html/xqwa__hf_example_8c-example.html
- help/html/xqwa__vr_example_8c-example.html
- help/pdf/aap_xdais_user_guide.pdf
- help/aap_xdais_inst.html
- help/aap_xdais_rel.html
- lib/qwa_qnx.l64P
- sample/xqwa_vr_example.c
- sample/xqwa_hf_example.c
- src/iqwa.c
- src/iqwa.h
- src/qwa_qnx.h
- src/xqwa.c
- src/xqwa.h
Fixed issues
- Fixed issue that in very rare cases when operating in Voice Recognition mode after resetting the library, internal parameters were not restored to the same values as at initialization. (Ref# 54202)
- Corrected for possible overflows in RMS calculations on input and output. (Ref# 55772)
- Improved error messages for initializations using invalid combinations for parameter values. (Ref# 53908)
- Fixed issue that setting mixer post filter attenuation did not have any real effect on mixer output. (Ref# 57279)
- Improved robustness after cellular network dropouts. This improvement only takes effect when receive processing is active. (Ref# 57486)
- Fixed issue where the diagnostics module could play up to 1 additional frame when synthesizing a signal. e.g At some frameshifts, specifying the signal: sine-wave, duration=1,000 ms, duty-cycle=40% would instead of producing a 400ms sine-wave followed by 600ms of zeros, add an additional 64 points of the next duty cycle of the sine-wave at the end. (Ref# 58088)
Known issues
- When using dual-channel mode and High Frequency Encoding (HFE), the background noise estimation is based only on the left microphone channel. (Ref# 54199)
- For the integer version, in certain non-realistic receive input scenarios including low-level negative DC values, the acoustic echo cancellation module may adapt incorrectly to the non-realistic input. When the signal first returns to normal on the reference input some artifacts may be heard on the echo cancelled output as it recovers to normal operation. (Ref# 59027)
Benchmarks
Here's a summary of the abbreviations used in this section. For more details, see the Acoustic Processing User's Guide.
| Abbreviation | Meaning |
|---|---|
| AEC | Acoustic Echo Cancellation |
| AGC | Automatic Gain Control |
| BWE | BandWidth Extension |
| DLC | Dynamic Level Control |
| FS | Frame Shift |
| HF | Hands Free |
| HFE | High Frequency Encoding |
| Mic-In | Microphone Input Audio Signal |
| Mic-Out | Microphone Output Audio Signal |
| MIPS | Millions of Instructions Per Second |
| MIX | Dual-channel Capability |
| NR | Noise Reduction |
| PEQ | Parametric Equalization |
| RAGC | Receive-side Automatic Gain Control |
| Recv-In | Receive Input Audio Signal |
| Recv-Out | Receive Output Audio Signal |
| RPEQ | Receive-side Parametric Equalization |
| SDL | Send-side Dynamic Limiter |
| SR | Sample Rate |
| VR | Voice Recognition |
| WNDB | Wind Buffet |
We determined all these benchmarks on the TMS320C64x+ DSP on TI Jacinto.
ROM Benchmarks
| ROM | 251 KB |
|---|
MIPS/RAM Benchmarks
Handsfree mode, 8K or 11K Sample Rate AEC on, NR on
- Base = AEC + NR
- Send-side Full Featured = Base + PEQ + SDL + AGC + WNDB
- Receive-side Full Featured = Base + BWE + RPEQ + RAGC + RDLC
- Scratch RAM = 4.5 KB for all configurations
- Persistent RAM = Total RAM - Scratch RAM
| Frame Shift | Base | Send Full | +RPEQ +RAGC +RDLC | Receive Full | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MCycles/s | MIPS | Total RAM | MCycles/s | MIPS | Total RAM | MCycles/s | MIPS | Total RAM | MCycles/s | MIPS | Total RAM | |
| 128 | 38 | 43 | 31.4 KB | 38 | 45 | 32.1 KB | 40 | 48 | 32.3 KB | 41 | 50 | 33.5 KB |
| 64 | 66 | 79 | 30.8 KB | 70 | 84 | 31.6 KB | 72 | 87 | 31.8 KB | 74 | 89 | 32.6 KB |
Handsfree mode, 8K or 11 K Sample Rate AEC on, NR on, MIX on
- Base = AEC + NR + MIX
- Send-side Full Featured = Base + PEQ + SDL + AGC + WNDB
- Receive-side Full Featured = Base + BWE + RPEQ + RAGC + RDLC
- Scratch RAM = 4.5 KB for all configurations
- Persistent RAM = Total RAM - Scratch RAM
| Frame Shift | Base | Send Full | +RPEQ +RAGC + RDLC | Receive Full | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MCycles/s | MIPS | Total RAM | MCycles/s | MIPS | Total RAM | MCycles/s | MIPS | Total RAM | MCycles/s | MIPS | Total RAM | |
| 128 | 57 | 68 | 44.1 KB | 58 | 70 | 44.9 KB | 61 | 73 | 45.0 KB | 62 | 74 | 46.2 |
| 64 | 107 | 128 | 43.6 KB | 110 | 132 | 44.3KB | 114 | 137 | 44.5 KB | 115 | 138 | 45.3 |
Handsfree mode, 16K Sample Rate AEC on, NR on
- Base = AEC + NR
- Send-side Full Featured = Base + PEQ + SDL + AGC + WNDB
- Receive-side Full Featured = Base + BWE + RPEQ + RAGC + RDLC
- Scratch RAM = 4.5 KB for all configurations
- Persistent RAM = Total RAM - Scratch RAM
| Frame Shift | Base | Send Full | +RPEQ +RAGC +RDLC | Receive Full | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MCycles/s | MIPS | Total RAM | MCycles/s | MIPS | Total RAM | MCycles/s | MIPS | Total RAM | MCycles/s | MIPS | Total RAM | |
| 256 | 44 | 53 | 37.4 KB | 49 | 58 | 48.4 KB | 51 | 61 | 48.5 KB | 57 | 68 | 50.4 KB |
| 128 | 79 | 94 | 36.3 KB | 87 | 104 | 47.2 KB | 90 | 107 | 47.4 KB | 96 | 116 | 48.6 KB |
Handsfree mode, 16K Sample Rate AEC on, NR on, MIX on
- Base = AEC + NR + MIX
- Send-side Full Featured = Base + PEQ + SDL + AGC + WNDB
- Receive-side Full Featured = Base + BWE + RPEQ + RAGC + RDLC
- Scratch RAM = 4.5 KB for all configurations
- Persistent RAM = Total RAM - Scratch RAM
| Frame Shift | Base | Send Full | +RPEQ +RAGC +RDLC | Receive Full | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MCycles/s | MIPS | Total RAM | MCycles/s | MIPS | Total RAM | MCycles/s | MIPS | Total RAM | MCycles/s | MIPS | Total RAM | |
| 256 | 68 | 81 | 52.2 KB | 72 | 87 | 63.1 KB | 75 | 90 | 63.3 KB | 81 | 98 | 65.2 KB |
| 128 | 125 | 150 | 51.0 KB | 132 | 159 | 62.0 KB | 136 | 163 | 62.1 KB | 145 | 173 | 63.3 KB |
Voice-recognition mode, 11K Sample Rate, NR on base
- Scratch RAM = 1.5 KB for all configurations
- Persistent RAM = Total RAM - Scratch RAM
| Frame Shift | Base (NR) | Full (+WNDB) | ||||
|---|---|---|---|---|---|---|
| MCycles/s | MIPS | Total RAM | MCycles/s | MIPS | Total RAM | |
| 128 | 13 | 16 | 19.8 KB | 15 | 18 | 20.4 KB |
Voice-recognition mode, 11K Sample Rate, NR on, MIX on base
- Scratch RAM = 1.5 KB for all configurations
- Persistent RAM = Total RAM - Scratch RAM
| Frame Shift | Base (NR) | Full (+WNDB) | ||||
|---|---|---|---|---|---|---|
| MCycles/s | MIPS | Total RAM | MCycles/s | MIPS | Total RAM | |
| 128 | 24 | 29 | 25.9 KB | 25 | 30 | 26.5 KB |
TI uses MCycles/s in their specifications rather than MIPS. TI also quotes Persistent and Scratch memory rather than total RAM.
Documentation
The functionality provided by this package is described in the QNX Aviage Acoustic Processing (for XDAIS) User's Guide. This package includes this document as:
- HTML: help/html/index.html
- PDF: help/pdf/aap_xdais_user_guide.pdf
Technical support
To obtain technical support for any QNX product, visit the Support + Services area on our website (www.qnx.com). You'll find a wide range of support options, including community forums.