[music-dsp] A-Law Mu-Law Compression on adsp2186m
ayyams ayyams
japintokio at yahoo.com
Fri Jan 16 22:23:01 EST 2004
hi
thank u for ur response.....
i here with sending my code for compression and expension...i am not trying look up table method.its normal linear method.
but i couldn't fine where i am doing fault....Looking forward for your favorable reply
ALaw_Compression:
/*
This routine determines the 8-bit (right-justified)
a-Law value from the 16-bit (right-justified) linear
input.
Calling Parameters
AR = 16-bit (right-justified) linear input
Return Values
AR = 8-bit log (a-Law) output
Altered Registers
AR, AF, AX0, AY0,
SR, SE
Computation Time
21 Cycles
*/
AR=ABS AR; // {Take absolute value}
AY0=1;
IF NEG AR=AR+AY0;
SR=ASHIFT AR BY -1 (HI);
AR=PASS SR1;
AY0=4095; // {Maximum PCM value}
AF=AR-AY0; // {Cap input}
IF GT AR=PASS AY0; // {If in excess}
AY0=31; // {Check ofor zero segment}
AF=AR-AY0;
IF GT JUMP upper_seg;
SR=LSHIFT AR BY -1 (LO);
AR=0x4000;
IF NEG AR=PASS 0;
SR=SR OR LSHIFT AR BY -7 (LO);
AY0=0x55;
AR=SR0 XOR AY0;
RTS;
upper_seg: SE=EXP AR (HI); //{Find exponent adjustmet}
AX0=SE, SR=NORM AR (HI); //{Normalize input}
AY0=0x4000;
AR=SR1 XOR AY0; //{Remove first significant bit}
SR=LSHIFT AR BY -10 (LO); //{Shift position bits}
AR=PASS AY0;
IF NEG AR=PASS 0; //{Create sign bit}
SR=SR OR LSHIFT AR BY -7 (LO); // {Position sign bit}
AY0=10;
AR=AX0+AY0; //{Compute segment}
IF LT AR=PASS 0;
SR=SR OR LSHIFT AR BY 4 (LO); //{Position segment bits}
AY0=0x55;
AR=SR0 XOR AY0; //{Invert bits}
RTS;
ALaw_Expansion:
/*
This routine determines the 16-bit (right-justified) linear
value from an 8-bit log (a-law) input
Calling Parameters
AR = 8-bit log (a-law) value
Return Values
AR = 16-bit linear output
Altered Registers
AR, AF, AX0, AY0,
SR, SE
Cycle Count
16 Cycles
*/
AY0=0x0055;
AR=AR XOR AY0;
SR1=0x0008; //{Always set sign bit}
SR0=0x0800; //{Set LSB of interval}
SR=SR OR LSHIFT AR BY 12 (LO); //{Isolate segment, interval}
AY0=32;
AX0=AR, AF=PASS AY0;
AY0=9; //{Segment bias}
AR=SR1-AY0; //{Determine shift value}
IF LT AF=PASS 0; //{No extra MSB bit}
IF EQ AR=PASS 0; //{No less then zero bits}
SR=LSHIFT SR0 BY -11 (LO); //{Isolate Interval}
SE=AR, AR=SR0 OR AF; //{Add bit if necessary}
SR=LSHIFT AR (LO); //{Position output}
AY0=0xFF80;
SR=ASHIFT SR0 BY 1 (HI);
AR=SR1, AF=AX0+AY0; //{Is sign bit set?}
IF LT AR=-SR1; //{Yes, so invert word}
RTS;
Erik de Castro Lopo <erikd-music-dsp at mega-nerd.com> wrote:
On Fri, 16 Jan 2004 00:35:09 -0800 (PST)
ayyams ayyams wrote:
>
> hi all,
>
> i have to change 16-bit data to 8-bit data.For that i am
> trying to apply either A-Law or Mu-Law compression algorithm.i got
> a sample code from ADI but it not working fine.
Please elaborate on "not working".
A-law and u-law encoding are relatively trivial and can be implemented
using lookup tables.
Erik
--
+-----------------------------------------------------------+
Erik de Castro Lopo nospam at mega-nerd.com (Yes it's valid)
+-----------------------------------------------------------+
Linux: the only OS that makes you feel guilty when you reboot
-- Kenneth Crudup in comp.os.linux.misc
dupswapdrop -- the music-dsp mailing list and website:
subscription info, FAQ, source code archive, list archive, book reviews, dsp links
http://shoko.calarts.edu/musicdsp
http://ceait.calarts.edu/mailman/listinfo/music-dsp
---------------------------------
Do you Yahoo!?
Yahoo! Hotjobs: Enter the "Signing Bonus" Sweepstakes
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://music.columbia.edu/pipermail/music-dsp/attachments/20040116/3dca2c7f/attachment-0001.html
More information about the music-dsp
mailing list