Home
Developer Resources
Technical Articles

QNX Technical Articles

QNX® Aviage® Acoustic Processing 1.1 for TI 64xx DSPs: Release Notes

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

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.