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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Использование Speex для сжатия речи, как заточить под свою платформу
frag666
сообщение Sep 6 2007, 06:23
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 31-10-06
Из: Челябинск
Пользователь №: 21 831



Имеется прекрасный Open Sourse проект Speex.Сжимает речь.Есть исходники.Под Windows получилось скомпилить и запустить,всё отлично работает.Теперь стоит задача использовать этот кодек на TMS320C28xx.Если я правильно понимаю,мне достаточно добавить все исходные файлы и библеотеки Speex в свой прект и всё будет работать?Если кто работал с этим кодеком поделитесь опытом.
Go to the top of the page
 
+Quote Post
fontp
сообщение Sep 6 2007, 06:49
Сообщение #2


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



Цитата(frag666 @ Sep 6 2007, 10:23) *
Имеется прекрасный Open Sourse проект Speex.Сжимает речь.Есть исходники.Под Windows получилось скомпилить и запустить,всё отлично работает.Теперь стоит задача использовать этот кодек на TMS320C28xx.Если я правильно понимаю,мне достаточно добавить все исходные файлы и библеотеки Speex в свой прект и всё будет работать?Если кто работал с этим кодеком поделитесь опытом.


Работать-то должно если типы данных окажутся соответствующими в файле speex_typedef.h
Но оптимизацию-то по быстродействию if any придётся самому проводить. Код имеет варианты оптимизации для tms54x, tms55x, tms6x, BF53х, arm4, arm5... Но не для tms28х.

Если нужно быстродействие подтягивать - лучше всего посмотреть, как это сделано для BF. Для наиболее критических модулей по быстродействию сделаны инлайновые ассемблерные вставки прямо в h-файлах. Нужно делать такие-же для тех -же модулей
Прагмы ещё могут помочь
Go to the top of the page
 
+Quote Post
frag666
сообщение Sep 6 2007, 11:41
Сообщение #3





Группа: Новичок
Сообщений: 5
Регистрация: 31-10-06
Из: Челябинск
Пользователь №: 21 831



Спасибо.
Попробую взять сорсы для С55 и переделать под С28.
Go to the top of the page
 
+Quote Post
Itch
сообщение Sep 6 2007, 17:51
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 358
Регистрация: 27-06-06
Из: Новосибирск
Пользователь №: 18 410



Надеюсь автор топика не обидится, если я здесь задам свой вопрос.
Вобщем захотелось мне заиметь speex под BF531, но вот компилировать я его собираюсь с помощью VDSP, а не gcc. При этом студия ругается на ошибку С1101, не нравятся ей ассемблер в одном из файлов. Кто-нибудь преодолевал эту проблему? Поиск на [Speex-dev] ничего вразумительного не дал.
Go to the top of the page
 
+Quote Post
frag666
сообщение Sep 7 2007, 03:45
Сообщение #5





Группа: Новичок
Сообщений: 5
Регистрация: 31-10-06
Из: Челябинск
Пользователь №: 21 831



Цитата(Itch @ Sep 6 2007, 20:51) *
Надеюсь автор топика не обидится, если я здесь задам свой вопрос.
Вобщем захотелось мне заиметь speex под BF531, но вот компилировать я его собираюсь с помощью VDSP, а не gcc. При этом студия ругается на ошибку С1101, не нравятся ей ассемблер в одном из файлов. Кто-нибудь преодолевал эту проблему? Поиск на [Speex-dev] ничего вразумительного не дал.

Не обижусь.Мне интересно всё,что связано с Speex smile.gif.Такую же ошибку и мне выдал мой комилятор,когда я хотел скомпилировать проект для C55 под С28.Потом начал ковырятся в исходники и нашёл эту строку.Там всего одна иструкция на асме написана.Вот сейчас узнаю,что она делает.
Go to the top of the page
 
+Quote Post
fontp
сообщение Sep 7 2007, 07:26
Сообщение #6


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



Цитата(Itch @ Sep 6 2007, 21:51) *
Надеюсь автор топика не обидится, если я здесь задам свой вопрос.
Вобщем захотелось мне заиметь speex под BF531, но вот компилировать я его собираюсь с помощью VDSP, а не gcc. При этом студия ругается на ошибку С1101, не нравятся ей ассемблер в одном из файлов. Кто-нибудь преодолевал эту проблему? Поиск на [Speex-dev] ничего вразумительного не дал.


Так у VDSP в отличие от gcc нет таких констрейнтов как "m", "W" другие буквы используются, другая конвенция

http://gcc.gnu.org/onlinedocs/gcc/Simple-C...ple-Constraints
Они ещё и машинно независимы, а значит не очень эффективны

Препроцессор надо писать для подстановки :-)

speex есть у AD в составе мультимедийного SDK. Нужно там смотреть подправили ли индусы констрейнты под VDSP
Go to the top of the page
 
+Quote Post
Itch
сообщение Sep 7 2007, 07:57
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 358
Регистрация: 27-06-06
Из: Новосибирск
Пользователь №: 18 410



Сейчас нашел на сайте ADI описание этой проблемы:
Цитата
Using "n" asm constraint results in compiler error
Prognosis: Fixed in Update 5.0 Base Release
Using the "n" constraint in an inline asm results in a compiler error when compiling with the Blackfin VDSP++ compiler.
The effect of the constraint should be to define a literal as an asm statement operand.
The same effect can be achieved by using the literal directly in the asm statement template.
So for example:
asm("// %0 " : : "n"(256) : ); // fails to compile
could be replaced by the following to workaround the problem:
asm("// 256 " : : : );

Т.е. проблема вроде решена в VDSP 5.0. Я не шарю в ассемблере для BF, может кто-нибудь более опытный скажет, как например переписать следущий листинг:
Код
__asm__  (
         "P0 = 15;\n\t"
         "R0 = %1;\n\t"
         "R1 = %2;\n\t"
         //"R0 = R0 + R1;\n\t"
         "R0 <<= 1;\n\t"
         "DIVS (R0, R1);\n\t"
         "LOOP divide%= LC0 = P0;\n\t"
         "LOOP_BEGIN divide%=;\n\t"
            "DIVQ (R0, R1);\n\t"
         "LOOP_END divide%=;\n\t"
         "R0 = R0.L;\n\t"
         "%0 = R0;\n\t"
   : "=m" (res)
   : "m" (a), "m" (bb)
   : "P0", "R0", "R1", "cc");

VDSP ругается здесь на строчку : "=m" (res)
Go to the top of the page
 
+Quote Post
fontp
сообщение Sep 7 2007, 08:19
Сообщение #8


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



Цитата(Itch @ Sep 7 2007, 11:57) *
Сейчас нашел на сайте ADI описание этой проблемы:

Т.е. проблема вроде решена в VDSP 5.0. Я не шарю в ассемблере для BF, может кто-нибудь более опытный скажет, как например переписать следущий листинг:
Код
__asm__  (
         "P0 = 15;\n\t"
         "R0 = %1;\n\t"
         "R1 = %2;\n\t"
         //"R0 = R0 + R1;\n\t"
         "R0 <<= 1;\n\t"
         "DIVS (R0, R1);\n\t"
         "LOOP divide%= LC0 = P0;\n\t"
         "LOOP_BEGIN divide%=;\n\t"
            "DIVQ (R0, R1);\n\t"
         "LOOP_END divide%=;\n\t"
         "R0 = R0.L;\n\t"
         "%0 = R0;\n\t"
   : "=m" (res)
   : "m" (a), "m" (bb)
   : "P0", "R0", "R1", "cc");

VDSP ругается здесь на строчку : "=m" (res)


Никак она не решена. Это просто разные вещи. Не работали константы - ну заработали
Все буквы разные для VDSP и gcc и часто даже смыслы разные

Для "m" надо писать "memory", если это временная переменная. Если входная или выходная -
нужно переписывать на косвенную или индексную адресацию сам код ([%0]) меняя констрейнты
на "a"
А что писать для разных W или "1"?
Практически это большая ручная работа - переписать эти ассемблерные вставки

Кроме того этот код не очень эффективен, он не знает какие апаратные регистры использовать.
Машинно-независимый ассемблер :-)
Надо смотреть мультимедийный SDK, там или разгребли констрейнты Gcc или отключили эту оптимизацию нафик и пускают С-код - вполне возможно что по быстродействию оптимизирующий компилятор VDSP выиграет у "машинно-независимого ассемблера" gcc :-)
Go to the top of the page
 
+Quote Post
Itch
сообщение Sep 7 2007, 08:38
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 358
Регистрация: 27-06-06
Из: Новосибирск
Пользователь №: 18 410



Цитата
Надо смотреть мультимедийный SDK, там или разгребли констрейнты Gcc или отключили эту оптимизацию нафик и пускают С-код

Ага, тоже вот думаю - нафиг этот асм, буду С пока использовать. Времени в обрез, надо проект делать, а уж потом разберемся (:
Go to the top of the page
 
+Quote Post
fontp
сообщение Sep 7 2007, 08:45
Сообщение #10


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



Цитата(Itch @ Sep 7 2007, 12:38) *
Ага, тоже вот думаю - нафиг этот асм, буду С пока использовать. Времени в обрез, надо проект делать, а уж потом разберемся (:


А скачайте мультимедийный SDK с сайта AD. В нём объявлен SPEEX, наверняка под VDSP, gcc они не поддерживают
По идее должны быть исходники, но кто его знает... Всего то ничего - 65Мб

http://www.analog.com/processors/platforms/msk.html
Только там на analog.com нужно сначала зарегистрироваться. Посмотрите и расскажете :-)
Go to the top of the page
 
+Quote Post
Itch
сообщение Sep 8 2007, 17:46
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 358
Регистрация: 27-06-06
Из: Новосибирск
Пользователь №: 18 410



Скачал я этот SDK. Устанавливаться на студию июня 2006 года он отказывается, поэтому пришлось провести апгрейд до версии июля 2007. Встать то он встал, но вот студия перестала работать - на понравились ей старые лицензионные ключи sad.gif Так что пришлось довольствоваться только исходниками... Индусы похоже хлеб свой отрабатывают исправно, т.к. ассемблерные версии функций действительно были переписаны, все констрейнты в основном были заменены на "d". Правда кое-где остались "m", которые у меня на старой студии от 06.2006 не компилировались. В Readme к SDK пишут, что тестировали его на июльской версии, т.е. видимо от 2007г. Фиг с ними, с "m", остальные функции вроде работают нормально. Кстати Speex там старый, 1.1.9 от мая 2005г.
Наконец то запустил я этот speex (: Сильно порадовало качество речи при режиме сжатия 0 ( 2400 kbps ) - речь можно понять без проблем, я думал будет намного хуже. Хотя еще надо смотреть, как это все будет при сильном внешнем шуме и т.п....
Go to the top of the page
 
+Quote Post
Itch
сообщение Sep 10 2007, 08:44
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 358
Регистрация: 27-06-06
Из: Новосибирск
Пользователь №: 18 410



Да, все-таки не работает оптимизация Speex под ассемблер Blackfin в VDSP. Кодек, который идет с Multimedia SDK при компиляции использует только #define FIXED_POINT. Если включить BFIN_ASM, то не компилируется даже под студией версии 4.5 от 07.2007. Будем ждать VDSP 5.0...
Go to the top of the page
 
+Quote Post
blackfin
сообщение Sep 10 2007, 09:58
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Itch @ Sep 10 2007, 12:44) *
Будем ждать VDSP 5.0...
VDSP 5.0
Go to the top of the page
 
+Quote Post
fontp
сообщение Sep 10 2007, 11:09
Сообщение #14


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



Цитата(Itch @ Sep 10 2007, 12:44) *
Да, все-таки не работает оптимизация Speex под ассемблер Blackfin в VDSP. Кодек, который идет с Multimedia SDK при компиляции использует только #define FIXED_POINT. Если включить BFIN_ASM, то не компилируется даже под студией версии 4.5 от 07.2007. Будем ждать VDSP 5.0...


Так и было в предыдущих версиях SDK.
Причём не только констрейнты m не проходят. Там были явные ошибки с точки зрения VDSP. И в самих инструкциях, и в констрейнтах и с автоматической генерацией меток. Они потихоньку возятся, но оптимизацию при построении не включали никогда.
Где-то встречалась цифра про 15 каналов SPEEX по быстродействию с оптимизацией BFIN_ASM. Это 30-35 мипс на канал вместе с их эхоподавителем. Для demo столько и не надо. И не факт, что с VDSP 5_0 эта проблема будет решаться
С другой стороны, если понадобится кому реально speex, там не так много нужно исправить, ну не за день, конечно
Go to the top of the page
 
+Quote Post
Itch
сообщение Sep 11 2007, 13:07
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 358
Регистрация: 27-06-06
Из: Новосибирск
Пользователь №: 18 410



Цитата(blackfin @ Sep 10 2007, 16:58) *

Имеется в виду "будем ждать лекарство". (^:
http://electronix.ru/forum/index.php?showtopic=36351
Go to the top of the page
 
+Quote Post

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

 


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


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