QNX Technical Articles
QNX® Aviage® Acoustic Processing 1.1 for TI 64xx DSPs: Release Notes
Date of this edition: January 07, 2008
Target hardware: TMS320C64x+ DSP on TI Jacinto (TI DRA466)
Contents
- What's in this package?
- Fixed issues
- Additional changes
- Known issues
- Benchmarks
- Documentation
- Technical support
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.0 include:
- Acoustic Echo Cancellation (AEC)
- Noise Reduction (NR)
- Send-side Automatic Gain Control (AGC)
- Send-side Parametric Equalization (PEQ)
The new features include:
- Dual-channel Capability (MIX)
- High Frequency Encoding (HFE)
- Wind Buffet Suppression (WNDB)
- Send-side Dynamic Limiter (SDL)
- Diagnostics API (DIAG)
- Remote Control Server (RCS)
- Windows Remote Control Client (QWALive)
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
- Sample 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/copyright.tex
- help/html/doxygen.css
- help/html/doxygen.png
- help/html/examples.html
- 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_p_i_generic.html
- help/html/group___d_e_f.html
- help/html/group___e_r_r_o_r.html
- help/html/group___operation.html
- help/html/group___param.html
- help/html/guide.html
- help/html/index.html
- help/html/LatencyDiagram.jpg
- help/html/main.html
- help/html/modules.html
- help/html/pages.html
- help/html/ParamEQ2.png
- 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___obj.html
- help/html/struct_i_q_w_a___params.html
- help/html/struct_i_q_w_a___status.html
- help/html/SystemBlockDiagram.jpg
- help/html/tabs.css
- help/html/tab_b.gif
- help/html/tab_l.gif
- help/html/tab_r.gif
- help/html/tree.html
- help/html/xqwa__example_8c-example.html
- help/pdf/qap_xdais_user_guide.pdf
- help/qaap_xdais_inst.html
- help/qaap_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
- Memory access error if IQWA_RECSwitch is qwaIdle and IQWA_AECSwitch is qwaOff at initialization. QWA_ERR_PARAM will now be returned instead since this is an invalid configuration. (Ref# 53896)
- IQWA_SendParamEQNodes set call can return error for a valid set of node inputs. In certain node combinations where both valley and peak nodes were used, the internal error check would falsely detect that the node combination would fall outside the range requirement of -1200 to +1200 cdB. (Ref# 53809)
- The operation of IQWA_SendAGCGainVals was modified so that if this parameter is set prior to the first call to qwaAudioIn(), the 'start' gain value would be used. Previously, the 'start' gain value would only take affect if qwaReset() was called. (Ref# 53499)
- Error checking was corrected for IQWA_RefDelay and IQWA_RefMaxDelay so that invalid negative values will cause an error return of QWA_ERR_PARAM. Previously the negative value would be truncated incorrectly to a tQwaU16. (Ref# 52618)
- When switching from pass through mode (IQWA_PassThruSwitch is qwaOn) to normal mode (IQWA_PassThruSwitch is qwaOff), the output audio will be invalid for the first ~500 ms after the switch. (Ref# 51927)
- Divide by zero occurs in the armle and TI C64 QAAP 1.1 libraries. This issue was extremely hard to create but reproducible with an appropriate input file. (Ref# 51891)
- Corrected the documentation for the IQWA_SendAGCGainVals to indicate the correct possible range of values -2000 to +4000 cdB. (Ref# 50358)
- For any valid values for the parameter IQWA_SendParamEQNodes the calculated frequency curve had a 3% frequency error. An example would be a node of f_center = 3000 Hz, f_FWHM = 150 Hz and cdB_boost = 300 cdB, the actual computed curve would correspond to 2900 Hz. (Ref# 49783)
- Added missing "extern C" around API declarations in xqwa.h header so that the library could be linked properly with C++ applications. (Ref# 52373)
- Resolved issue where NDEBUG was not defined in the released library. Technically, this could result in assertions in some circumstances, although none have been reported. (Ref# 52372)
Additional changes
- The configuration structure IQWA_Params was modified to support the new features available with QWA 1.1. To accommodate this, two of the parameters were renamed: FrameShift was renamed to FrameShiftIn, and SampleRate was renamed to SampleRateIn. Support for the older 1.0 version of the structure was maintained internally.
- A new function 'reset' was added to the end of the IQWA_Fxns structure and a corresponding wrapper QWA_reset() was added which resets the library back to it's initialization state.
- The wrapper QWA_Create() was modified to return an error code rather than a handle so more information was available to users regarding initialization failures. The handle is now passed in as a pointer argument.
- The data types used throughout were changed from XDAIS types to TI System types (defined in tistdtypes.h referred to by the TI std.h), to enable platform independence of header inclusions when creating DSPLink interfaces.
- In the default parameter initialization structure IQWA_PARAMS in iqwa.c, the default maximum frequency processed was changed from 4000 to 0. The value 0 indicates 'use the default value' which for IQWA_HandsFree mode is 4000.
Known issues
- In very rare cases when operating in Voice Recognition mode after resetting the library, internal parameters are not restored to their values at initialization. (Ref# 54202)
- When using dual-channel and High Frequency Encoder (HFE) the background noise estimation is based only on the left microphone channel. (Ref# 54199)
Benchmarks
We determined all these benchmarks on the TMS320C64x+ DSP on TI Jacinto.
ROM Benchmarks
| ROM | 216 KB |
|---|
MIPS/RAM Benchmarks
Handsfree mode, 8K Sample Rate AEC on, NR on
- Base = AEC + NR
- Full Featured = Base + PEQ + SDL + AGC + WNDB
| Frame Shift | Base | Full | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| MCycles/s | MIPS | Persistent | Scratch | Total RAM | MCycles/s | MIPS | Persistent | Scratch | Total RAM | |
| 128 | 33 | 40 | 25.3 KB | 4.5 KB | 29.8 KB | 35 | 42 | 26 KB | 4.5 KB | 30.5 KB |
| 64 | 62 | 74 | 25 KB | 4.5 KB | 29.5 KB | 65 | 78 | 25.75 KB | 4.5 KB | 30.3 KB |
Handsfree mode, 8K sample rate AEC on, NR on, MIX on
- Base = AEC + NR + MIX
- Full Featured = Base + PEQ + SDL + AGC + WNDB
| Frame Shift | Base | Full | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| MCycles/s | MIPS | Persistent | Scratch | Total RAM | MCycles/s | MIPS | Persistent | Scratch | Total RAM | |
| 128 | 54 | 64 | 38 KB | 4.5 KB | 42.6 KB | 55 | 66 | 38.75 KB | 4.5 KB | 43.3 KB |
| 64 | 102 | 122 | 37.8 KB | 4.5 KB | 42.3 KB | 105 | 126 | 38.5 KB | 4.5 KB | 43 KB |
Handsfree mode, 16K sample rate AEC on, NR on
- Base = AEC + NR
- Full Featured = Base + PEQ + SDL + AGC + WNDB + HFE
| Frame Shift | Base | Full | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| MCycles/s | MIPS | Persistent | Scratch | Total RAM | MCycles/s | MIPS | Persistent | Scratch | Total RAM | |
| 256 | 40 | 48 | 29.6 KB | 4.5 KB | 34.2 KB | 43 | 52 | 40.5 KB | 4.5 KB | 45 KB |
| 128 | 72 | 87 | 29 KB | 4.5 KB | 33.5 KB | 78 | 94 | 40 KB | 4.5 KB | 44.5 KB |
Handsfree mode, 16K sample rate AEC on, NR on, MIX on
- Base = AEC + NR + MIX
- Full Featured = Base + PEQ + SDL + AGC + WNDB + HFE
| Frame Shift | Base | Full | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| MCycles/s | MIPS | Persistent | Scratch | Total RAM | MCycles/s | MIPS | Persistent | Scratch | Total RAM | |
| 256 | 64 | 77 | 44.4 KB | 4.5 KB | 48.9 KB | 67 | 80 | 55.2 KB | 4.5 KB | 59.7 KB |
| 128 | 117 | 140 | 43.7 KB | 4.5 KB | 48.2 KB | 123 | 148 | 54.6 KB | 4.5 KB | 59.1 KB |
Voice-recognition mode, 11K sample rate, NR on base
| Frame Shift | Base (NR) | Full (+WNDB) | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| MCycles/s | MIPS | Persistent | Scratch | Total RAM | MCycles/s | MIPS | Persistent | Scratch | Total RAM | |
| 128 | 12 | 15 | 18 KB | 1.5 KB | 19.6 KB | 13 | 16 | 18.6 KB | 1.5 KB | 20.1 KB |
Voice-recognition mode, 11K sample rate, NR on, MIX on base
| Frame Shift | Base (NR) | Full (+WNDB) | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| MCycles/s | MIPS | Persistent | Scratch | Total RAM | MCycles/s | MIPS | Persistent | Scratch | Total RAM | |
| 128 | 22 | 27 | 23.9 KB | 1.5 KB | 25.4 KB | 24 | 29 | 24.6 KB | 1.5 KB | 26.2 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/qap_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.