QNX Technical Articles
QNX® Aviage® Acoustic Processing 1.1 Release Notes
Date of this edition: May 12, 2009
Target OS: This software is compatible with target systems running QNX® Neutrino® 6.3.0 SP3, 6.3.2, or 6.4.0.
Host OS: You must have already installed the QNX® Momentics® development suite 6.3.0 SP3 or 6.3.2 or the QNX Software Development Platform 6.4.0 as a self-hosted QNX® Neutrino® system, or on one of the following development hosts:
| Version | Microsoft Windows | Linux |
|---|---|---|
| QNX Momentics 6.3.0 SP3 | Windows Vista, XP SP2, 2000 SP4, or NT SP6a | Linux Red Hat 8 or 9, Red Hat Enterprise WS 3 or 4, Red Hat Fedora Core 3 or 4, Debian 3.1, or SUSE 10 |
| QNX Momentics 6.3.2 | Windows Vista, XP SP2, or 2000 SP4 | Linux Red Hat Enterprise Workstation 4 or 5, Red Hat Fedora Core 6 or 7, Ubuntu 6.0.6 LTS or 7.0.4, or SUSE 10 |
| QNX SDP 6.4.0 | Windows Vista, XP SP2 or SP3, or 2000 SP4 | Linux Red Hat Enterprise Workstation 4 or 5, Red Hat Fedora Core 6 or 7, Ubuntu 6.0.6 LTS or 7, or SUSE 10 |
Contents
Throughout this document, you may see reference numbers associated with particular issues, changes, etc. When corresponding with our Technical Support staff about a given issue, please quote the relevant reference number. You might also find the reference numbers useful for tracking issues as they become fixed.
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 kit?
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)
Binaries
The following binary files are installed under $QNX_TARGET/, in subdirectories for each supported target platform:
ARMLE
- armle/lib/libqwa.a
- armle/lib/libqwaS.a
- armle/lib/libqwa_rcs.a
- armle/lib/libqwaS_rcs.a
PPCBE
- ppcbe/lib/libqwa.a
- ppcbe/lib/libqwaS.a
- ppcbe/lib/libqwa_rcs.a
- ppcbe/lib/libqwaS_rcs.a
SHLE
- shle/lib/libqwa.a
- shle/lib/libqwaS.a
- shle/lib/libqwa_rcs.a
- shle/lib/libqwaS_rcs.a
Header files
- usr/include/qwa_rcs_err.h
- usr/include/qwa_rcs.h
- usr/include/qwa_err.h
- usr/include/qwa_defs.h
- usr/include/qwa.h
The following binary files are installed under $QNX_CONFIGURATION\ on Windows systems:
- bin\QWALive.exe
Sample source code
The following source code files with examples of how to use QNX Aviage Acoustic Processing 1.1 are installed under $QNX_TARGET/:
- etc/readme/qap/qwa_hf_example.c
- etc/readme/qap/qwa_rcs_example.c
- etc/readme/qap/qwa_vr_example.c
Fixed issues
- The links in the table of contents (i.e. the Contents pane in the IDE's help window, or the Topics pane in the Photon helpviewer) for the User's Guide now work correctly. (Ref# 49438)
- Memory access error if qwaRECSwitch is qwaIdle and qwaAECSwitch is qwaOff at initialization. QWA_ERR_PARAM will now be returned instead since this is an invalid configuration. (Ref# 53896)
- qwaSendParamEQNodes 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 qwaSendAGCGainVals 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 qwaRefDelay and qwaRefMaxDelay 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 (qwaPassThruSwitch is qwaOn) to normal mode (qwaPassThruSwitch 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 qwaSendAGCGainVals to indicate the correct possible range of values -2000 to +4000 cdB. (Ref# 50358)
- For any valid values for the parameter qwaSendParamEQNodes 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)
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 used the following hardware for our benchmarks:
| Freescale Media5200 platform (PPCBE) | Hitachi/Renesas Biscayne board (SHLE) | TI board (DaVinci CPU DM6446) (ARMLE) | |
|---|---|---|---|
| CPU | MPC5200B | SH-4 SH7760 (float support) | ARM926EJ-S + TI C64x DSP |
| Float unit | Yes | Yes | No (both ARM9 and C64x) |
| Frequency | 400 MHz | 200 MHz | ARM9: 283 MHz C64x: 566 MHz |
| Cache | 16 KB instruction; 16 KB data | 16 KB instruction; 32 KB data | ARM9: 16 KB instruction; 8 KB data
C64x: 32 KB instruction (L1P); 80 KB data (L1D) |
| Int. RAM | None | ARM9: 16 KB C64x: 64 KB (L2) |
|
| Ext. RAM | 256 MB DDR SDRAM | 64 MB SDRAM | 128 MB DDR2 (shared for both ARM9 and C64x) |
| Flash | 32 MB | 64 MB | 32 MB |
| Vax-MIPS (see below) |
523 | 165 | 162 (ARM9) |
The Vax-MIPS rating of the embedded hardware was determined by compiling a release-mode Dhrystone executable from source code with the -o6 optimization level and running the resulting executable on the target hardware under QNX Neutrino 6.3. As vendor-supplied CPU MIPS ratings typically reflect the performance of hand-crafted assembler code, our Vax-MIPS rating is typically around 50% of the vendor reported one.
ROM Benchmarks
| Target HW | ROM |
|---|---|
| PPCBE | 194 KB |
| SHLE | 179 KB |
| ARMLE | 203 KB |
MIPS/RAM Benchmarks
Handsfree mode, 8K Sample Rate AEC on, NR on
- Base = AEC + NR
- Full Featured = Base + PEQ + SDL + AGC + WNDB
| HF 8K SR | MIPS | RAM | ||||
|---|---|---|---|---|---|---|
| Base = AEC + NR | Base | Full Featured | Base | +PEQ+SDL+AGC | +WNDB | |
| 128 FS | PPCBE | 41 | 43 | 50.5 KB | 50.6 KB | 51.4 KB |
| SHLE | 26 | 27 | 50.5 KB | 50.6 KB | 51.4 KB | |
| ARMLE | 41 | 42 | 33.8 KB | 33.9 KB | 34.4 KB | |
| 64 FS | PPCBE | 77 | 78 | 50.3 KB | 50.5 KB | 51.2 KB |
| SHLE | 46 | 48 | 50.3 KB | 50.5 KB | 51.2 KB | |
| ARMLE | 73 | 74 | 33.6 KB | 33.8 KB | 34.2 KB |
Handsfree mode, 8K sample rate AEC on, NR on, MIX on
- Base = AEC + NR + MIX
- Full Featured = Base + PEQ + SDL + AGC + WNDB
| HF 8K SR | MIPS | RAM | ||||
|---|---|---|---|---|---|---|
| Base = AEC + NR + MIX | Base | Full Featured | Base | +PEQ+SDL+AGC | +WNDB | |
| 128 FS | PPCBE | 67 | 68 | 76.1 KB | 76.3 KB | 77.0 KB |
| SHLE | 40 | 40 | 76.1 KB | 76.3 KB | 77.0 KB | |
| ARMLE | 67 | 68 | 46.8 KB | 46.9 KB | 47.4 KB | |
| 64 FS | PPCBE | 127 | 129 | 76.0 KB | 76.2 KB | 76.9 KB |
| SHLE | 74 | 75 | 76.0 KB | 76.2 KB | 76.9 KB | |
| ARMLE | 123 | 124 | 46.6 KB | 46.8 KB | 47.2 KB |
Handsfree mode, 16K sample rate AEC on, NR on
- Base = AEC + NR
- Full Featured = Base + PEQ + SDL + AGC + WNDB + HFE
| HF 16K SR | MIPS | RAM | |||||
|---|---|---|---|---|---|---|---|
| Base = AEC + NR | Base | Full Featured | Base | +PEQ+SDL+AGC | +WNDB | +HFE | |
| 256 FS | PPCBE | 52 | 54 | 59.7 KB | 59.9 KB | 60.6 KB | 78.7 KB |
| SHLE | 33 | 34 | 59.7 KB | 59.9 KB | 60.6 KB | 78.7 KB | |
| ARMLE | 51 | 52 | 37.3 KB | 37.5 KB | 37.9 KB | 47.7 KB | |
| 128 FS | PPCBE | 88 | 92 | 59.6 KB | 59.7 KB | 60.4 KB | 78.6 KB |
| SHLE | 56 | 58 | 59.6 KB | 59.7 KB | 60.4 KB | 78.6 KB | |
| ARMLE | 87 | 89 | 37.2 KB | 37.3 KB | 37.8 KB | 47.6 KB |
Handsfree mode, 16K sample rate AEC on, NR on, MIX on
- Base = AEC + NR + MIX
- Full Featured = Base + PEQ + SDL + AGC + WNDB + HFE
| HF 16K SR | MIPS | RAM | |||||
|---|---|---|---|---|---|---|---|
| Base = AEC + NR + MIX | Base | Full Featured | Base | +PEQ+SDL+AGC | +WNDB | +HFE | |
| 256 FS | PPCBE | 82 | 84 | 90.5 KB | 90.7 KB | 91.4 KB | 109.6 KB |
| SHLE | 49 | 50 | 90.5 KB | 90.7 KB | 91.4 KB | 109.6 KB | |
| ARMLE | 81 | 82 | 52.4 KB | 52.6 KB | 53.0 KB | 62.8 KB | |
| 128 FS | PPCBE | 148 | 152 | 90.4 KB | 90.5 KB | 91.2 KB | 109.4 KB |
| SHLE | 88 | 90 | 90.4 KB | 90.5 KB | 91.2 KB | 109.4 KB | |
| ARMLE | 147 | 148 | 52.3 KB | 52.4 KB | 52.9 KB | 62.6 KB |
Voice-recognition mode, 11K sample rate, NR on base
| VR 11K SR | MIPS | RAM | |||
|---|---|---|---|---|---|
| Base = NR | Base | +WNDB | Base | +WNDB | |
| 128 FS | PPCBE | 27 | 28 | 31.1 KB | 32.0 KB |
| SHLE | 17 | 18 | 31.1 KB | 32.0 KB | |
| ARMLE | 20 | 20 | 26.7 KB | 27.2 KB |
Voice-recognition mode, 11K sample rate, NR on, MIX on base
| VR 11K SR | MIPS | RAM | |||
|---|---|---|---|---|---|
| Base = NR + MIX | Base | +WNDB | Base | +WNDB | |
| 128 FS | PPCBE | 45 | 47 | 43.2 KB | 44.1 KB |
| SHLE | 27 | 27 | 43.2 KB | 44.1 KB | |
| ARMLE | 35 | 36 | 32.6 KB | 33.2 KB |
MIPS benchmarks were calculated when running the library alone on the platforms listed above. MIPS benchmarks may vary with the audio input to the library.
Documentation
The functionality provided by this package is described in the QNX Aviage Acoustic Processing User's Guide, which you'll find in the IDE's help system, as well as in $QNX_TARGET/usr/help/product/qap_en/bookset.html. On self-hosted Neutrino systems, you can also find the documentation in the Photon helpviewer. You'll find the QWALive User's Guide installed as $QNX_CONFIGURATION\bin\QWALive\QWALive.pdf on Windows systems.
You'll find the sample programs and a PDF version of the User's Guide in the $QNX_TARGET/etc/readme/qap directory.
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.