Jump to content

    

AlexZabr

Свой
  • Content Count

    900
  • Joined

  • Last visited

Everything posted by AlexZabr


  1. Я тут потихоньку осваиваю азы имплементации алгоритмов обработки сигналов с прицелом на старый 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) напрямую через память, без применения промежуточных файлов ? Если да, то как ? Заранее благодарен, Саша
  2. Кому-нить из уважаемых форумчан доводилось имплементоривать filter bank на основе wavelet decomposition на конкретных DSP чипах ? Интересует сложность имплементации, в плане требования к ресурсам процессора/памяти. Пример: предполагаемый subband decomposition на 32 частотных полосы (5-и уровневый) посредством DWT (discrete wavelet transform). Какие аспекты практической реализации на DSP чипах ? Какая сложность реализации (в плане коль-ва вычислений) ? Мой алгоритм успользует все это, в МАТЛАБе все хорошо и весело ибо не в реальном времени и используем встроенный в МАТЛАб (точнее в DSP toolbox) DWT, но когда дело касается реализации а реальной hardware - подозреваю могут быть серьезные проблемы... Спасибо, Саша
  3. Оговорка: по части имплементации под 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 (С и ассемблерные сорсы) с целью совместной работы со взаимной передачей данных ? Заранее благодарен, Саша
  4. Спасибо всем, действительно как оказалось - все гениальное - просто...
  5. Есть ли возможность запускать программу в CCS ver. 3.3 без подключенного борта ? Пишу код под C5402 в недавно скаченной CCS 3.3. Я в этом новичок. CCS сконфигурировал на С5402 Simulator. Судя по описанию, для Runа программы (после успешного Build All ессно) - опязательно загрузить .out в подключенный борд (которого у меня пока нет) и тогда можно делать Run - будет бежать из процессора. А что-же тогда симулятор ? Неужели нельзя запускать программы в режиме симуляции, т.е. без подключенного hardware ? Если можно, то как ? МОжет нужно как-то еще сконфигурировать CCS ? Спасибо, Саша