Перейти к содержанию
    

AlexZabr

Свой
  • Постов

    900
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные AlexZabr


  1. price/performance - бред, всё зависит от количиства штук. Извините старьё достать для 1к коробочек не так то и просто.

     

    Ну во первых начните пожалуй "price/performance - бред IMHO" ибо это ваше мнение, не более того.

    Я говорю о реальности индустрии в которой 8 лет кручусь. Когда не говориться о продукции люксусного ранга - тут price/performance играет первостепенную роль. Ориентация на проэктируемую партию (те. кол-во) - это ессно часть фактора price/performance.

    Я работал как системщик (т.е. board design) в и области проэктирования цельных систем и в области ASICs.

    В псоледней идет борьба за каждый цент - если можно съэкономить цент без ощутомой потери качетсва/призводительности - за это горло перегрызут, ибо конкуренция задавит.

    С другой стороны, как-то работал в фирме продукт которой была систем обработки видео в реальном времени, очень тяжелые алгоритмы, система раасчитана на работу в телестудиях во время вещания спортивных програм (клеила виртуальную рекламу на фубольные поля, тенисные корты и т.д.) - там требования по качетсву сигнала были очень жестокие (и без них не пустят ни в какую студию), посему не скупились на дорогую элементную базу и сам дизайн. Но там сама hardware было единично, там было борты с 6 дорогущими на то время SHARKs и т.д..

  2. а можно больше не писать таких говорящих самих за себя заглавий тем? а писать в строчке тема(как бы это странно не звучало /для некоторых посетителей форума/) - тему сообщения !!!??? по заглавию вашему посту самое место в "Общение на свободные темы"

    :maniac: :bb-offtopic:

     

    Согласен, сорри.

    Поддался эмоциям... :)

  3. Скорее всего где-то была определена функция fir1, перекрывшая стандартную.

     

    Спасибо.

    Вроде не помню что-бы перегружал fir1, но проверить думаю стоит.

    Правда закрывал МАТЛАБ открывал заново не помогло. Clear All тоже не помогло (хотя и врядле помогло-бы оно ведь только переменные очищает)...

     

    Как проверить переопределения функции ?

     

    Спасибо.

  4. Либо я вдруг чокнулся, либо мой МАТЛАБ "поехал"...

    понадобился элементарный FIR (скажем low-pass), делаю как обычно:

    b = fir1(35, 3000/22050); - скажем 35ого порядка, 3kHz cut-off

     

    ожидаю ессно получить в векторе б 36 коеффициентов.

    Вместо этого получаю бред какой-то:

    b = 35.1360;

     

    тоже-самое с любыми другими комбинациями FIRа...

     

    не понимаю, что происходит...

     

    давно с такими вещами работаю - проблем не было, а тут вдруг какой-то глюк...

     

    Может кто в курсе что может быть с МАТЛАБом вдруг ?

     

     

    P.S. делаю то-же самое, на том-же MATLABе на моем лэптопе - все нормально, коееифиенты получаю как положено...

     

    Ничего не понимаю... :blink:

  5. В посте много обсуждалось разных причин использования DSP процессороввместо GPU, но надо

    добавить одну тоже немаловажную (в порядке самокритики) - лень разработчика :) . Освоив один камень и выловив его глюки, очень тяжело заставить себя перескочить на другое CPU. Программировал на 64х, а следующий проект на 8051, это как пересадка с формулы-1 на самокат, подсознательно ищешь причину взять побыстрее DSP и все за 2 дня закончить :biggrin: .

     

    Да, это мне кажется весьма реально...увы.. :)

    Тогда прймущество у того кто вначале осваивает более простые/дешовые процессоры, учиться укладыватся в как можно меньше ресурсов, а затем уже, по мере реальной надобности переходить на более серьезные "машинки". Тогда у опыт будет разносторонный может быть более подходящий для достижения лучшего price/performance в каждой кокретной апликации...

    Все конечно IMHO...

     

    Я вообще не привык к такому универсально-мощно-DSPшному подходу работая в соотв. индустрии у нас в стране (хотя я не DSPшник - я системщик). У нас обычно стараются подбирать типы/виды CPU под тип задач под конкретные апликации - все это с целью добиться price/performance. Обычно не стремятся к большим запасам производительности в плане "так, на всякий случай" когде не предполагается соотв. расширение прозводительности на тойьже базе hardware, ибо такой подход удорожает себестоимость (а значит и продажную стоимость что не есть хорошо).

    С другой стороны у нас тоже свойственен подход к re-use даже там где это не оправвдано технически , но оправдано в плане time-to-market. Т.е. например в прошлых проэктах требующих больших вычислительных мощностей использовали мощные/относительно не дешевые DSP, новый-же проэкт не требует таких производительных мощностей, но все равно первым делом будут рассматрвиать вариант использования прошлого процессора к которому привыкли, на который у инженеров скопулся немалыйй опыт а значти реализуя на котором можно серьезно сократить time-to-market показатель, даже ежели ресуры этого процессора будут использованы всего на 30-40% в новом проэкте. Естественно, при условии что его себестоимость фирме не слишком высока относительно требований проэкта...

  6. Ну если за ту-же цену, то логика есть. Мне казалось DSPшные процессоры в среднем дороже контроллеров схожих поколений...

    Мне (в принципе в следствии отсутствия персонального опыта) казалось так-же что программирование DSP будет посложнее чем контроллера или процессора общего назначения.

    Сейчас вот изучаю азы имплементации обрабоатки сигналов в среде TI с целью имплементации моего алгоритма определенной обработки аудио (фактически мой дипломный проэкт), вижу что пока вроде (на элементарном уровне) работа с кодом C и ассемблером - действительно не срашнее обычного контроллера/процессора общего назначения...

  7. Я на форуме относительно новичок, да и с цифровой обработкой сигналов имею дело пока только в академически рамках, посему мое недоумение вполне может показаться наивным, но все таки...

     

    Я обратил внимание многие на форумах тут озадачиваются подбором DSP процессоров для целей далеких от цифровой обработки сигналов как таковой. Я так понима вся сила и преймущества DSP процессоров в их специфике работы под задачи свойственные цифровой обработке сигналов, например наиболее употребимые вещи такие как цифровые фильтры (FIR, IIR), частотный анализ (DFT/FFT/SFFT), корреляции,

    фильтр банки, специализированные виды обработки (например узкополосные фильтр банки с DWT и им подобные) и т.д.

    Реализация этих вещей на практике сводится к очень большому числу однотипных математическхи операций которые часто съедают серьезные ресурсы (по скорости обработки например) у обычных процессоров, посему архитектура DSPшных процессоров заточена на такие цели. Наиболее распростарненный пример такого например специальные ассмблерные инструкции такие как MAC которые осуществляют наиболее употребимую в цифровой фильтрации, FFT и им подобным процедуру умножения и сложения за один такт и им подобные.

     

    Однако я замечаю многие на форумах озадачиваются DSP процессорами для работ не имеющих отношения к DSP как таковой.

    В чем причина ?

    Мне кажется для многих вещей не имеющих отношения к обработке сигналов либо к другим тяжелым математическим работам подошел бы какой-нить контроллер - они весьма дешевы, доступны и достаточно легки в программировании...

  8. Да, вполне вероятно что в недорогих мыльницах Кенон например предпочел дешевые CPU типа х86 или им подобные. Но их профи цифро-зеркалки и мыльницы высокого класса обычно идут с ихними propritary DSP заточенными под ихний image processing типа семейства DIGIC/DIGIC II.

     

    Когда речь идет об камерах среднего и ниже ценового диапазона - там часто (на сегодняшний день) интересы удешевления (производства и потребительских цен) начинают серьезно превалировать над интересами качества, особенно модели производимые китайскими/тайванскими/корейскими sub-contractors (т.е. примерно 80% рынка недорогих цифро-мыльниц в целом). Там экономия в пару центов на BOM, производстве и других связанных затратах часто важнее чем 10-15% добавочного качества (например качества image processingа). А посему чем более интегрирован будет камерны процессор - тем выгодней для производителя в условиях очень жестокой рыночной конкуренции цен.

    Тем более учитывая что уровень image processingа достигамеый в таких интегрированных чипах сегодня более чем неплох, хотя ессно будет уступать по возможностям специализированным, значительно более дорогим DSP под image processing. Думаю согласимся, что качесво картинок сегодня даже у относительно дешевых цифро-мыльниц весьма хорошее, скажем даже очень хорошее для нужд среднего потребителя - а это и есть 80-90% рынка. Остальные 10-20% готовы заплатить в 2,3,4,5 раз больше за те добавочные 10-25% качества которые дадут камеры высокого уровня построенные именно на качество.

  9. Хмм, тут у меня есть зацепка: многие производители цифро-мыльниц среднего и дешового уровня используют (китайцы, корейцы, тайвань и т.д., некоторые японцы тоже) изпользуют в своих дизайнах специализированные цифро-камерные процессоры. Инфа ин первых рук... :)

    Я до недавнего времени работал в Zoran Microelectronics которые одна из подразделений которой проэктирует main processor chip for digital cameras - т.е. специалиривоанный процессор (точнее поколения таковых) заточенный на цифро-камеры. Я работал именно в этом подразделении, но занимался не самим процессором а его системный board design (в teamе занимающимся этим).

    Такого типа процессоры имеют потчи все функционально-электронные части встроенные в чип, т.е. на одном силиконе. Цорановские процессоры так и называются: COACH (Camera-On-A-Chip). Там в чипе есть куча цифровых и аналоговых блоков, таких как блоки управления питанием и потреблением, интерфейсные блоки с внешним миром (карточки памяти, опер. память, USB, и т.д. и т.п.), блоки интерфейса с видео/still сенсорами разных типов, с аудио (микрофоном) audio codec и конечно-же core процессора (может быть ARM например или другие), а то и 2 кора. Естественно, в камерах немало image processingа, нередко весьма тяжелого, но такого типа коры обычно справляются (ессно, с необходимыми ресурсами, все индивидуально).

     

    Такого типа узко-специализированные процессоры в основном и идут в камеры среднего и мелкого пошиба которые мы и видим в магазинах. Ессно знаю конкретные фирмы (китайские, тайванские а так-же японские) цифро-мыльницы которых идут с Цорановксим чипом, назвать марки и модели не могу, сорри (подписан на это), но принцип думаю понятен. Немало камер такого разряда выпускается с Цорановскими чипами внутри, есть конечо-же и конкурирующие производители такого плана чипов (Тайванцы, Штаты).

    Камеры высокого класса (профи и очень дорогие мыльницы от "китов" типа Кенона, Никона), часто идут со своими in-house чипами. Не знаю точно насчет Никона, но Кенон напримерсам разрабатывает свои процессоры для камер.

     

    Саша

  10. Фотографы-любители среди нас (особенно die-hard дальномерщики) наверняка в курсе новой цифровой Лейки (М8). А в сочетаннии с нашим интересом DSP - думаю было-бы интересно изнать какой DSP выбрали инженеры Лейки для обработки сигнала (видимо image processing).

    Так вот - там стоит Analog Dev. BlackFin, а для контроля таботы камеры (экспозиция, UI, управление затвором и т.д.) изпользуется контроллер М16С от Renesas.

     

    Просто познавательно на каком DSP остановили свой выбор инженеры Лейки.

     

    Саша

  11. Мне не доводилось это делать, но когда рылся в техасовских доках, нашел, что в CCS есть целая библиотека для работы с вейвлет преобразованиями (функции реализованы на ассемблере, для вызова из C):

    //------------

    void IMG_wave_decom_one_dim(short *in_data, short *wksp, int *wavename, int length, int level )

    Description

    One dimensional wavelet pyramid decomposition. The wavelet filter coefficients are passed by the vector wavename. The length of the input vector should be divided by 2^level. The decomposition output is stored in the same vector of input. The IMG_wave_decom_one_dim function calls the decomInplace assembly function. Input and output data format is Q16.0.

    //------------

    void IMG_wave_decom_two_dim(short **image, short *wksp, int width, int height, int *wavename, int level );

    Description

    Two dimensional wavelet pyramid decomposition. The wavelet filter coefficients are passed by the vector wavename. The width and height of the image should be divided by 2^level. The decomposed image is stored in the same matrix of in_data. The IMG_wave_decom_two_dim function calls three assembly functions: decomInplace, col2row and decomCol. Input and output data format is Q16.0.

    //------------

    void IMG_wave_recon_one_dim(short *in_data, short *wksp, int *wavename, int length, int level );

    Description

    One dimensional wavelet pyramid reconstruction. The wavelet filter coefficients are passed by the vector wavename. The length of the input vector should be divided by 2^level. The reconstruction output is stored in the same vector of input. The IMG_wave_recon_one_dim function calls the reconInplace assembly function. Input and output data format is Q16.0.

    //------------

    void IMG_wave_recon_two_dim(short **image, short *wksp, int width, int height, int *wavename, int level );

    Description

    Two dimensional wavelet pyramid reconstruction. The wavelet filter coefficients are passed by the vector wavename. The width and height of the image should be divided by 2^level. The reconstructed image is stored in the same matrix of in_data. The IMG_wave_recon_two_dim function calls three assembly functions: decomInplace, col2row and decomCol. Input and output data format is Q16.0.

    //------------

    void IMG_wavep_decom_one_dim(short *in_data, short *wksp, int *wavename, int length, int level );

    Description

    One dimensional wavelet packet decomposition. The wavelet filter coefficients are passed by the vector wavename. The length of the input vector should be divided by 2^level. The decomposition output is stored in the same vector of input. The IMG_wavep_decom_one_dim function calls the decomInplace assembly function. Input and output data format is Q16.0.

    //------------

    И ещё какие-то. Берите хелп и смотрите. Там есть данные о производительности.

     

     

    Большое спасибо, это уже что-то.

    Буду рыться в хелпах и их онлайновких доках.

     

    Еще раз премного благодарен,

    Саша

  12. Я тут потихоньку осваиваю азы имплементации алгоритмов обработки сигналов с прицелом на старый 16-битный fixed point DSP.

     

    Сейчас поднял тему обмена данными между MATLABом и C кодом (написанным в CCS v.3.3).

    Мне дали готовый проэкт состящий из сорса C и 2х ассемблерных вспомагательных сорсов, а так-же 2 MATLABовских файла (m-files). Задача проста - МАТЛАБ генерирует 100 samples синуса, эта data записывается в файл (из МАТЛАБа). Затем в С, читается файл, оперируется samplами синуса и результат сохраняется в выходной файл котрый может читаться МАТЛАБом.

     

    Я так понимаю MATLAB оперирует numerical data в формате 32 бита floating point, так ? При сохранении в файл, читая его (в виде HEX значений) я вижу там хранение по байтовое, т.е. 100 samples синуса дали 400 байт в файле (каждое значение МАТЛАБовского синуса разбито на 4 отдельных, последовательно записанных в файле байта).

    При чтении файла в C, вначале содержимое читается в массив типа int размера 400. Затем вызывается ассемблерная рутина которая как я вижу пакует по-байтовое содержимое массива в 16-битные значения в отдельный массив размера 200 значений. Затем данный массив в памяти читается в С в массив типа float размера 100 значений (т.е. как я понимаю каждые последовательные два 16-битных значения формируют цельное 32-битное значение типа float).

     

    Затем, в коде С манипулируют значениями, после чего, во второй ассемблерной рутине, каждое значение обработанного массива разбивается на 4 бытовых значения записываемых в памяти которые затем в коде С читаются как массив 400 значений записываемых байтово в новый файл.

    Этот новый файл может читаться МАТЛАБом как numerical data.

     

    Все это до меня "дошло" изучая сорсы С и ассемблера (ну и МАТЛАБа ессно, но там все элементарно) и прогоняя проэкт (в CCS) в debuggerе.

     

    Исходя из этого, сделал для себя выводы насчет которых хотел-бы слышать подтверждение либо опровержение с указанием правильного подхода.

    Выводы:

     

    1. МАТЛАБ оперирует с 32х битными значениями (что касается numerical data) в формате float.

    2. При прямой записи в файл из МАТЛАБа, числа разбиваются побайтно, т.е. цельное значение в 32 бита разбивается на 4 отдельных, последовательно записываемых байта.

    3. При необходимости чтения такого файла в C с последующей обработкой (т.е. мы знаем что в оригиналезначения 32х битные типа float), нужно предварительно скомпоновать их в 16-битные значение.

    4. При чтении 16-битных данных в С (из памяти) в массив типа float - считываются 2 последовательных worda и принимаются как цельное 32х битное значение типа float.

     

    Это есть рецепт построения правильного обмена информацией между МАТЛАБом и С когда применяются промежуточные файлы храниения числовой информации.

    Это так ? Если не совсем (или совсем не так) - как именно ? Где я ошибаюсь в предположениях ?

     

    Есть ли возможность обмена числовой информацией между МАТЛАБом и С (в CCS с ориентировкой на 16-битные DSP fixed point) напрямую через память, без применения промежуточных файлов ? Если да, то как ?

     

    Заранее благодарен, Саша

  13. Кому-нить из уважаемых форумчан доводилось имплементоривать filter bank на основе wavelet decomposition на конкретных DSP чипах ?

    Интересует сложность имплементации, в плане требования к ресурсам процессора/памяти.

    Пример: предполагаемый subband decomposition на 32 частотных полосы (5-и уровневый) посредством DWT (discrete wavelet transform).

    Какие аспекты практической реализации на DSP чипах ? Какая сложность реализации (в плане коль-ва вычислений) ?

     

    Мой алгоритм успользует все это, в МАТЛАБе все хорошо и весело ибо не в реальном времени и используем встроенный в МАТЛАб (точнее в DSP toolbox) DWT, но когда дело касается реализации а реальной hardware - подозреваю могут быть серьезные проблемы...

     

    Спасибо, Саша

  14. Оговорка: по части имплементации под DSP я новичок, посему заранее мои извинения за возможно примитивные вопросы.

     

    Теперь к делу:

    Есть определенный алгоритм обработки аудио сигнала, алгоритм стабилизирован и симулирован в Матлабе с DSP toolboxом). Теперь пришло время имплементации, платформа - TMS320C5402 DSK.

    По первичным прикидкам, данный процессор не потянет имплементацию сего алгоритма в реальном времени, и даже post-processingе могут быть проблемы при имплементации алгоритма в его виде на данный момент (ввиду нехватки адресуемой процессором памяти).

     

    Вся эта работа - мой дипломный проэкт на B.Sc.EE. В универе (в конкретной лабе) есть только данная платформа, посему и вынужден изголяться имплементацией на ней, других вариантов нет.

     

    Цель задачи - не промышленная, просто показать разработанный алгоритм и его наметки реализации на DSP. Посему, и ввиду вышеизлоенного подумал о возможности имплеемнтации алгоритма на смешанной базе: MATLAB + Hardware. Т.е. основная рассчетно-интенсивная часть будет в Матлабе на PC, затем несколько кусков алгоритма должны бежать на DSP. Ессно, речь не идет о реальном времени, все будет в post-processing.

     

    Это предусматривает обмен информацией между частью алгоритма в Матлабе и его частями в hardware с след. виде:

    1.Начальная обработка сигнала в Матлабе, результат (вектора коеффициентов) и определенные части отцифрованного сигнала передаются на DSP (через цифровой интерфэйс DSK).

    2. DSP прогоняет полученную data реализуя свою часть алгоритма, затем передает обработаные части сигнала обратно Матлабу по тому-же интерфэйсу.

    3. Матлаб стыкует все части сигнала (свои и полученные с DSP) в единый сигнал (цифровой сигнал) который и есть output.

     

    Вопрос таков: реально (если да то насколько сложно) состыковать в работе Матлаб с процессором в плане такого типа обработки сигнала (можно считать нет жестких требований real-timeа) ?

    Если да, но как состыковывается таким образом сорсы Матлаба (скажем m-files) с сорсами в CCS v3.3

    (С и ассемблерные сорсы) с целью совместной работы со взаимной передачей данных ?

     

    Заранее благодарен, Саша

  15. Есть ли возможность запускать программу в CCS ver. 3.3 без подключенного борта ?

    Пишу код под C5402 в недавно скаченной CCS 3.3. Я в этом новичок.

    CCS сконфигурировал на С5402 Simulator.

     

    Судя по описанию, для Runа программы (после успешного Build All ессно) - опязательно загрузить .out в подключенный борд (которого у меня пока нет) и тогда можно делать Run - будет бежать из процессора.

    А что-же тогда симулятор ? Неужели нельзя запускать программы в режиме симуляции, т.е. без подключенного hardware ?

    Если можно, то как ? МОжет нужно как-то еще сконфигурировать CCS ?

     

    Спасибо, Саша

×
×
  • Создать...