IPB

Welcome Guest ( Log In | Register )

TransPCM—use Float16/24 to reduce bit-depth, also promotes compression, 2013-05-30: beta 0.1.3a / formerly HalfPrecision / ref.: IEEE 754-2008
Nick.C
post Sep 12 2011, 22:03
Post #1


lossyWAV Developer


Group: Developer
Posts: 1772
Joined: 11-April 07
From: Wherever here is
Member No.: 42400



When I first became aware of the Float16 type I found it interesting in terms of maybe having potential as a possible lossy storage type.

Attached is a processed version of the sample in this thread which has been decoded back to PCM. The processing is as follows (at this stage as there is no player that I am aware of):
Input file Sample [PCM] > FLOAT16 > [PCM] > Output File.

The conversion from integer to Float16 reduces the number of significant bits of the 24-bit sample to (a maximum of) 11. There is therefore an amount of added noise due to truncation. The added noise has been noise shaped using SG's adaptive noise shaping method as used in lossyWAV.

Original Sample

Lossy Float16 Processed Sample [edit] removed due to TransPCM executable / foobar2000 Float16 playback availability, 29th May 2012. [/edit]

If the 24-bit coded sample is encoded with FLAC (wFormatTag left as 0x0001 as FLAC does not handle Floating Point samples and wBitsPerSample is left as 24) there is a saving of in excess of 20% in filesize.

I don't see any practical advantage using this storage type for native 16-bit PCM.

Changelog:

TransPCM beta 0.1.3a 30/05/2013
  • Bug fix in Float24 handling (thanks Bryant!).
  • Bug fix in WAVE_FORMAT_EXTENSIBLE chunk handling (thanks again Bryant!).
TransPCM beta 0.1.2 02/06/2012
  • Modification to adaptive noise shaping for 44.1/48kHz input;
  • Amendment to tracer fingerprinting.


This post has been edited by Nick.C: May 30 2013, 07:57
Attached File(s)
Attached File  TransPCM_beta_0.1.3a.zip ( 79.66K ) Number of downloads: 64
 


--------------------
lossyWAV -q X -a 4 --feedback 4| FLAC -8 ~= 320kbps
Go to the top of the page
+Quote Post
 
Start new topic
Replies
Nick.C
post Oct 20 2011, 12:53
Post #2


lossyWAV Developer


Group: Developer
Posts: 1772
Joined: 11-April 07
From: Wherever here is
Member No.: 42400



HalfPrecision beta 0.0.2cd attached. [bugfix] [superseded].

HalfPrecision is a tool to convert PCM in WAV format to Float16 in WAV format. Noise is added during the conversion process. By default this noise is adaptively shaped, however fixed noise shaping is also available along with the option to disable all noise shaping.

The -P, --precision <n> parameter selects the number of mantissa bits to use (8<=n<=11). Reducing the number of mantissa bits increases added noise.

By default, processed audio is output in Float16 format. Using the --decoded parameter converts the processed audio from Float16 back to the PCM in the original sample bitdepth (which may add a further small amount of noise) to allow the audio to be played in existing players.

NB: the Float16 audio is normalised in the range ±65504.0 rather than the standard ±1.0 (32bit and 64bit floating point audio). This allows a greater dynamic range of sample values (±65504 to ±6.1035E-05 [normalised]; ±5.9605E-08 [denormal]) to be stored. Returning samples to expected ±1.0 range is achieved by simple multiplication by 2^-16.

Bug-reports, comments and (constructive) criticism are welcomed.

This post has been edited by Nick.C: Oct 24 2011, 18:26


--------------------
lossyWAV -q X -a 4 --feedback 4| FLAC -8 ~= 320kbps
Go to the top of the page
+Quote Post
Gumboot
post Dec 22 2011, 23:19
Post #3





Group: Members
Posts: 51
Joined: 11-December 11
From: United Kingdom
Member No.: 95728



QUOTE (Nick.C @ Oct 20 2011, 11:53) *
NB: the Float16 audio is normalised in the range ±65504.0 rather than the standard ±1.0 (32bit and 64bit floating point audio).


That's going to be a huge surprise for any software that naively implements "normal" floating-point behaviour on 16-bit data. And doesn't that eliminate all of floating point's clipping headroom?


Anyway; what I was going to say was that if you take all the negative values and eor them with 0x7fff, that should look fairly linear to flac, and it may have a reasonable shot at compressing it. Except the normalisation probably leaves a huge discontinuity across zero because denormal LSBs won't line up with 24-bit LSBs.

It might have some chance of compressing better than 24-bit native, though. Have you tried it?
Go to the top of the page
+Quote Post

Posts in this topic
- Nick.C   TransPCM—use Float16/24 to reduce bit-depth, also promotes compression   Sep 12 2011, 22:03
- - AndyH-ha   This differs from simply reducing the bit depth?   Sep 12 2011, 22:11
- - Nick.C   Yes - in that values up to c. +/- 2^31 can still b...   Sep 12 2011, 22:19
- - saratoga   Isn't this pretty much what ADPCM does? Excep...   Sep 12 2011, 22:32
|- - C.R.Helmrich   You mean a-Law/µ-Law? Makes me wonder how many bi...   Sep 12 2011, 23:05
- - bryant   QUOTE (Nick.C @ Sep 12 2011, 14:03) Attac...   Sep 13 2011, 06:13
- - Nick.C   The plan was to simply set wFormatTag= 0x0003 and ...   Sep 15 2011, 21:09
|- - benski   QUOTE (Nick.C @ Sep 15 2011, 16:09) The p...   Sep 16 2011, 14:03
- - knutinh   float16 could be very efficient on GPU hardware if...   Sep 16 2011, 13:49
- - Nick.C   I understand that currently players are rather unl...   Sep 16 2011, 19:26
- - Nick.C   Below is Delphi / IA32 & x87 code used to enco...   Sep 22 2011, 13:05
- - Nick.C   HalfPrecision beta 0.0.2cd attached. [bugfix] [sup...   Oct 20 2011, 12:53
|- - Gumboot   QUOTE (Nick.C @ Oct 20 2011, 11:53) NB: t...   Dec 22 2011, 23:19
- - lvqcl   foobar2000 1.1.9 beta1: "Implemented experime...   Oct 22 2011, 10:54
- - Nick.C   RE: TransPCM—use Float16/24 to reduce bit-depth, also promotes compression   Oct 22 2011, 14:24
- - Nick.C   HalfPrecision beta 0.0.2e attached [superseded]. F...   Oct 24 2011, 18:23
- - pdq   I once had an idea for how to encode audio data. T...   Oct 24 2011, 19:29
- - Nick.C   That would be one way of doing it. However sample ...   Oct 24 2011, 21:02
- - Nick.C   HalfPrecision beta 0.0.2f attached superseded . ...   Nov 1 2011, 13:53
- - Nick.C   HalfPrecision beta 0.0.2g attached. Superseded. ...   Nov 10 2011, 13:41
- - Didjeridoo   Nick.C Thank you for your innovation. It remains t...   Nov 11 2011, 11:36
- - Nick.C   @Didjeridoo: Thanks - I am also looking forward to...   Nov 11 2011, 23:05
- - Nick.C   HalfPrecision beta 0.0.2h attached. Superseded ...   Nov 14 2011, 21:22
- - Didjeridoo   Nick.C I watch all the moves and develops Is not...   Nov 15 2011, 10:32
|- - lvqcl   QUOTE (Didjeridoo @ Nov 15 2011, 13:32) P...   Nov 15 2011, 15:53
- - Ljubo44   Do you have any sample of command line for foobar.   Nov 15 2011, 19:13
- - Nick.C   HalfPrecision beta 0.0.2i attached. Superseded. F...   Nov 15 2011, 20:05
- - Ljubo44   on 16/44,1 size is same after compress halfp.wav 1...   Nov 15 2011, 21:24
|- - Nick.C   QUOTE (Ljubo44 @ Nov 15 2011, 20:24) .......   Nov 15 2011, 22:05
- - Ljubo44   You are right, I used foobar 1.1.9 to convert to f...   Nov 15 2011, 22:37
- - Nick.C   HalfPrecision beta 0.0.2j attached. Superseded. ...   Nov 15 2011, 23:02
- - Nick.C   HalfPrecision beta 0.1.0a attached. Superseded. ...   Nov 17 2011, 14:20
- - Didjeridoo   I hope the developers do not ignore innovation   Nov 18 2011, 19:44
- - Nick.C   foobar2000 1.1.10 beta 1 adds Float24 support - re...   Nov 18 2011, 21:24
- - pompon   QUOTE (Nick.C @ Sep 12 2011, 16:03) When ...   Dec 5 2011, 06:37
- - FreaqyFrequency   @pompon: This is different from those coding sche...   Dec 5 2011, 08:44
- - Nick.C   Right then people - HalfPrecision needs a new name...   Dec 22 2011, 20:34
- - Nick.C   .... a surprise, yes, however as the standard has ...   Dec 23 2011, 08:20
|- - Gumboot   Well, by "huge surprise" I mean "de...   Dec 23 2011, 08:43
|- - Nick.C   It would surprise me if, when using any type of fl...   Dec 23 2011, 09:01
|- - Gumboot   Well it's not really in its infancy. I includ...   Dec 23 2011, 22:02
- - Nick.C   I accept that the Float16 proposal must have been ...   Dec 27 2011, 21:34
- - FreaqyFrequency   I fear that I may need a little more clarification...   Jan 9 2012, 05:48
- - Nick.C   Hi there, Using HalfPrecision to convert from 24-...   Jan 9 2012, 20:05
- - FreaqyFrequency   Thanks for the reply, Nick. Looking at the Replay...   Jan 10 2012, 03:36
- - Nick.C   TransPCM beta v0.1.1 attached. Superseded Chang...   May 29 2012, 21:51
- - Nick.C   TransPCM beta 0.1.2 attached. Superseded. Chang...   Jun 2 2012, 13:57
- - Ljubo44   CODE/d /c C:\bin\TransPCM_beta_0.1.2...   Jun 14 2012, 01:29
|- - lvqcl   QUOTE (Ljubo44 @ Jun 14 2012, 04:29) What...   Jun 14 2012, 15:47
- - db1989   Why do you have switches before the executable? An...   Jun 14 2012, 09:02
- - Nick.C   The use of --stdinname %d is to tell the program w...   Jun 14 2012, 17:47
- - Nick.C   Rockbox now has added Float16 compatibility* - tha...   Nov 24 2012, 23:15
- - saratoga   No problem. Hope its useful to people.   Nov 25 2012, 00:28
- - Nick.C   TransPCM beta 0.1.3a attached to post #1 in this t...   May 30 2013, 07:58


Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 



RSS Lo-Fi Version Time is now: 18th April 2014 - 19:56