реклама на сайте
подробности

 
 
> ADPCM
spoluer
сообщение Jul 12 2011, 08:44
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 17-09-10
Пользователь №: 59 546



Пытаюсь сделать сжатие звука на 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
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 1)
spoluer
сообщение Jul 15 2011, 04:30
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 17-09-10
Пользователь №: 59 546



Имеется два CC430F6137. На одном из них с помощью таблицы синуса и шим генерируется синусоида, затем она подается на АЦП 8 бит, данные с АЦП кодируются с помощью IMA ADPCM и посылаются по радиоканалу. На втором данные принимаются, декодируются и поступаются на ШИМ, с помощью которого получаем синусоиду. В прикрепленных файлах исходники и картинка, поясняющая вышесказанное.
На приемнике используется двойная буферизация, т.е. таймер поочередно читает данные из двух массивов, а декодированные данные записываются в тот массив, который в данный момент не используется таймером.
Проблема заключается в следующем, в момент переключения буферов на получаемой синусоиде происходят скачки. Если на передатчике отключить АЦП и кодировать и передавать уже готовую таблицу синуса, то эти скачки исчезают и синусоида получается идеальной.
Как можно решить данную загвоздку?
Прикрепленные файлы
Прикрепленный файл  Sinus.zip ( 13.96 килобайт ) Кол-во скачиваний: 25
 
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 02:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01326 секунд с 7
ELECTRONIX ©2004-2016