Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ADPCM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
spoluer
Пытаюсь сделать сжатие звука на 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];
  }
}
spoluer
Имеется два CC430F6137. На одном из них с помощью таблицы синуса и шим генерируется синусоида, затем она подается на АЦП 8 бит, данные с АЦП кодируются с помощью IMA ADPCM и посылаются по радиоканалу. На втором данные принимаются, декодируются и поступаются на ШИМ, с помощью которого получаем синусоиду. В прикрепленных файлах исходники и картинка, поясняющая вышесказанное.
На приемнике используется двойная буферизация, т.е. таймер поочередно читает данные из двух массивов, а декодированные данные записываются в тот массив, который в данный момент не используется таймером.
Проблема заключается в следующем, в момент переключения буферов на получаемой синусоиде происходят скачки. Если на передатчике отключить АЦП и кодировать и передавать уже готовую таблицу синуса, то эти скачки исчезают и синусоида получается идеальной.
Как можно решить данную загвоздку?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.