Пытаюсь сделать сжатие звука на CC430F6137 посредством IMA ADPCM кодека. Кодирую 8-битные сэмплы в 4 бита. Но что-то я совсем запутался с этим ADPCM(( Пытаюсь разобраться с простейшей программой. Есть таблица выборок синусоиды. Кодирую ее ADPCM, затем декодирую и смотрю что получилось. Как я понимаю на выходе должна получиться таблица с идентичными значениями. Но в массиве на выходе все значения равны 0х8000. В чем может быть дело? Ниже привожу код программы, а в прикрепленных файлах ADPCM.
Код
#include "adpcm.h"
#include "cc430f6137.h"
#define buf_len 16
signed int buf[buf_len] =
{
0x80,0xB0,0xDA,0xF6,0xFF,0xF6,0xDA,0xB1,0x80,0x4F,0x25,0x09,0x00,0x09,0x25,
0x4E
};
unsigned long count_sample = buf_len;
unsigned char encoded_buf[8];
unsigned long size_in;
signed int decoded_buf[16];
void main(void)
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
while(1)
{
size_in = encode_adpcm(buf,count_sample,encoded_buf,0,0);
count_sample = decode_adpcm(encoded_buf,size_in,decoded_buf,0,0);
// for(int idx=0;idx<count_sample;idx++)
// TA1CCR1 = decoded_buf[idx];
}
}
Прикрепленные файлы
adpcm.zip ( 3.09 килобайт )
Кол-во скачиваний: 19