QNX Technical Articles
QNX® Aviage® Acoustic Processing 1.2 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 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)
- Remote Control Server (RCS)
- Windows Remote Control Client (QWALive)
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)
- Improved source code examples
- Changes to QWALive interface
- Added wavefile markers for audio streaming
- Added file meta information pertaining to the QWA library state
- Added the ability to directly enter value for custom sliders
- Added hot key support with tool tips to show hot key
- Added warning if PEQ produces more than 1200 cdB gain (line turns red)
- Added reading of Voice to Noise Ratio (VNR)
- Changed sliders to snap to 50 cdB increments
- Changed limiter sliders to show increments in logarithmic scale
- All controls are collapsible with an auto-expand option
- Added Receive tab with all Receive controls
- Added button to apply latency estimate from diagnostics module
- Improved connection loss detection
- Improved GUI updating efficiency and speed
To support the new features the following parameters were added:
- qwaRecvEQSwitch
- qwaRecvAGCSwitch
- qwaRecvBWESwitch
- qwaRecvDLCSwitch
- qwaRecvClipStats
- qwaRecvInRMS
- qwaRecvOutRMS
- qwaRecvLimitThresh
- qwaRecvParamEQNodes
- qwaRecvEQCoeff
- qwaRecvGain
- qwaRecvResetClipStats
- qwaRecvClipStatsMode
- qwaNCGainFactor
- qwaNCNoiseLevel
- qwaNCParams
- qwaDiagLatencyTestRef
For the description of these parameters, please see the “QWA Parameters” section in the User's Guide.
API Changes
The following lists all the API changes in this version:
- 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:
- qwaRecvSampleRateOut
- qwaRecvFrameShiftOut
- The microphone output sample rate is the same as the microphone input sample rate except for the following cases:
- Changed parameter qwaSendParamEQNodes 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.
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.2 are installed under $QNX_TARGET/:
- etc/readme/aviage-ap/qwa_hf_example.c
- etc/readme/aviage-ap/qwa_rcs_example.c
- etc/readme/aviage-ap/qwa_vr_example.c
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)
- Fixed issue where settings are not saved correctly in QWALive when the application is installed in the root directory. (Ref# 54605)
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 |
| VNR | Voice to Noise Ratio |
| VR | Voice Recognition |
| WNDB | Wind Buffet |
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 | 232 KB |
| SHLE | 213 KB |
| ARMLE | 243 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
| HF 8K SR | MIPS | RAM | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Base = AEC + NR | Base | Send-side Full Featured | +RPEQ + RAGC + RDLC | Receive-side Full Featured | Base | +PEQ+SDL+AGC | +WNDB | +RPEQ + RAGC + RDLC | +BWE | |
| 128 FS | PPCBE | 46 | 49 | 52 | 55 | 52.5 KB | 52.7 KB | 53.6 KB | 54.1 KB | 56.0 KB |
| SHLE | 26 | 27 | 30 | 31 | 52.5 KB | 52.7 KB | 53.6 KB | 54.1 KB | 56.0 KB | |
| ARMLE | 45 | 47 | 49 | 53 | 33.2 KB | 33.3 KB | 34.0 KB | 35.0 KB | 36.1 KB | |
| 64 FS | PPCBE | 82 | 89 | 92 | 96 | 52.4 KB | 53.5 KB | 53.7 KB | 53.3 KB | 54.9 KB |
| SHLE | 47 | 49 | 51 | 55 | 52.4 KB | 53.5 KB | 53.7 KB | 53.3 KB | 54.9 KB | |
| ARMLE | 79 | 83 | 87 | 91 | 33.1 KB | 33.3 KB | 33.9 KB | 34.4 KB | 35.2 KB |
Handsfree mode, 8K or 11K 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
| HF 8K SR | MIPS | RAM | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Base = AEC + NR + MIX | Base | Send-side Full Featured | +RPEQ + RAGC + RDLC | Receive-side Full Featured | Base | +PEQ+SDL+AGC | +WNDB | +RPEQ + RAGC + RDLC | +BWE | |
| 128 FS | PPCBE | 72 | 76 | 78 | 82 | 75.0 KB | 75.2 KB | 76.1 KB | 76.7 KB | 78.6 KB |
| SHLE | 41 | 43 | 44 | 46 | 75.0 KB | 75.2 KB | 76.1 KB | 76.7 KB | 78.6 KB | |
| ARMLE | 74 | 76 | 78 | 82 | 45.9 KB | 46.0 KB | 46.6 KB | 47.7 KB | 48.8 KB | |
| 64 FS | PPCBE | 135 | 140 | 145 | 148 | 75.0 KB | 75.2 KB | 76.0 KB | 76.3 KB | 77.5 KB |
| SHLE | 76 | 79 | 80 | 83 | 75.0 KB | 75.2 KB | 76.0 KB | 76.3 KB | 77.5 KB | |
| ARMLE | 134 | 137 | 144 | 147 | 45.9 KB | 46.0 KB | 46.6 KB | 47.1 KB | 47.9 KB |
Handsfree mode, 16K Sample Rate AEC on, NR on
- Base = AEC + NR
- Send-side Full Featured = Base + PEQ + SDL + AGC + WNDB + HFE
- Receive-side Full Featured = Base + BWE + RPEQ + RAGC + RDLC
| HF 16K SR | MIPS | RAM | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Base = AEC + NR | Base | Send-side Full Featured | +RPEQ + RAGC + RDLC | Receive-side Full Featured | Base | +PEQ+SDL+AGC | +WNDB | +RPEQ + RAGC + RDLC | +BWE | |
| 256 FS | PPCBE | 51 | 53 | 67 | 76 | 57.4 KB | 57.7 KB | 58.5 KB | 61.9 KB | 65.3 KB |
| SHLE | 29 | 30 | 41 | 47 | 57.4 KB | 57.7 KB | 58.5 KB | 61.9 KB | 65.3 KB | |
| ARMLE | 48 | 49 | 59 | 67 | 35.7 KB | 35.8 KB | 36.4 KB | 40.4 KB | 42.3 KB | |
| 128 FS | PPCBE | 95 | 98 | 110 | 120 | 57.4 KB | 57.6 KB | 58.5 KB | 60.2 KB | 62.2 KB |
| SHLE | 53 | 55 | 66 | 71 | 57.4 KB | 57.6 KB | 58.5 KB | 60.2 KB | 62.2 KB | |
| ARMLE | 85 | 88 | 100 | 112 | 35.6 KB | 35.8 KB | 36.4 KB | 38.5 KB | 39.7 KB |
Handsfree mode, 16K Sample Rate AEC on, NR on, MIX on
- Base = AEC + NR + MIX
- Full Featured = Base + PEQ + SDL + AGC + WNDB + HFE
- Receive-side Full Featured = Base + BWE + RPEQ + RAGC + RDLC
| HF 16K SR | MIPS | RAM | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Base = AEC + NR + MIX | Base | Send-side Full Featured | +RPEQ + RAGC + RDLC | Receive-side Full Featured | Base | +PEQ+SDL+AGC | +WNDB | +RPEQ + RAGC + RDLC | +BWE | |
| 256 FS | PPCBE | 84 | 87 | 100 | 110 | 84.0 KB | 84.2 KB | 85.1 KB | 88.4 KB | 94.2/91.9 KB |
| SHLE | 48 | 49 | 59 | 64 | 84.0 KB | 84.2 KB | 85.1 KB | 88.4 KB | 91.9 KB | |
| ARMLE | 80 | 82 | 92 | 103 | 50.4 KB | 50.5 KB | 51.1 KB | 55.1 KB | 57.1 KB | |
| 128 FS | PPCBE | 159 | 164 | 176 | 187 | 84.0 KB | 84.2 KB | 85.0 KB | 86.8 KB | 88.7 KB |
| SHLE | 89 | 92 | 101 | 108 | 84.0 KB | 84.2 KB | 85.0 KB | 86.8 KB | 91.3/88.7 KB | |
| ARMLE | 150 | 153 | 165 | 178 | 50.4 KB | 50.5 KB | 51.1 KB | 53.2 KB | 54.4 KB |
Voice-recognition mode, 11K sample rate, NR on base
| VR 11K SR | MIPS | RAM | |||
|---|---|---|---|---|---|
| Base = NR | Base | +WNDB | Base | +WNDB | |
| 128 FS | PPCBE | 31 | 34 | 36.0 KB | 36.9 KB |
| SHLE | 17 | 18 | 36.0 KB | 36.9 KB | |
| ARMLE | 22 | 25 | 26.2 KB | 26.8 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 | 50 | 52 | 45.4 KB | 46.3 KB |
| SHLE | 27 | 28 | 45.4 KB | 46.3 KB | |
| ARMLE | 39 | 41 | 32.0 KB | 32.6 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/acoustic_processing_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/aviage-ap 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.