Jump to content

    

Understand

Участник
  • Content Count

    12
  • Joined

  • Last visited

Community Reputation

0 Обычный
  1. нет. Этого я не учел. Наверное, дело в этом. Спасибо.
  2. Добрый день. Постановка задачи: На входе блока в Simulink матрица размером G[3][4] и две константы, имеющие смысл номера строки (i) и столбца (j), соответственно. На выходе блока элемент матрицы G(i,j). Подавая различные константы в пределах размера матрицы, меняется на выходе G(i,j). Суть проблемы: Если смоделировать такое устройство с помощью блока MATLAB Function, прописав туда простейший m-код function C = fcn(i,j,G) C = G(i,j); end все будет работать как надо Но если реализовать эту задачу с помощью С MEX S-function, прописав в .с #include "doubleIt.h" void fcn (int i, int j, double G[3][4], double *C) { *C = G[i][j]; } И создав файл .mexw32 с помощью Legacy code tool, я получаю на выходе не тот элемент, номер которого я заказывал с помощью констант i и j, а другой элемент, принадлежащий матрице G. Конечно, я учитываю то, что нумерация в С идет с 0, а не с 1 , как в Матлабе. Поясняющий рисунок, на котором сверху эта задача решается в MATLAB Function, а снизу в С MEX S-function. Матрица одна и там и там, разумеется. Задавая различные i и j получаю следующие результаты на выходе С MEX S-function i j G(i,j) [0] [0] 1 [1] [0] 6 [2] [0] 11 [3] [0] 6 [0] [1] 5 [0] [2] 9 [0] [3] 2 [0] [4] 6 [0] [5] 10 Что интересно: Если менять только номер j-ого элемента, а i=0, то выпадают числа матрицы последовтаельно перебирая мтарицу сверху вниз и слева направо. Даже при условии, что в моей мтарице j<4, можно ввести j>4 и получить число на выходе. Возможно что-то в самом файле S-функции, который я компилирую не так. Есть опасения по-поводу указателей. static void mdlOutputs(SimStruct *S, int_T tid) { /* * Get access to Parameter/Input/Output/DWork/size information */ int16_T *u1 = (int16_T *) ssGetInputPortSignal(S, 0); int16_T *u2 = (int16_T *) ssGetInputPortSignal(S, 1); real_T *u3 = (real_T *) ssGetInputPortSignal(S, 2); real_T *y1 = (real_T *) ssGetOutputPortSignal(S, 0); /* * Call the legacy code function */ fcn ( *u1, *u2, u3, y1); } Кто разбирается,скажите,пожалуйста,в чем может быть дело.
  3. Не помогло. Скорсоть работы декодера та же.
  4. Всем привет. Сделал в Simulink модель LDPC декодера. Если сравнивать работу оригинального декодера в библиотеке и моего написанного, результаты (BER, количество итераций) сходятся 1 в 1. Но моё устройство работает НАМНОГО медленнее оригинала. Сама модель, где мой декодер в виде подсистемы То,что внутри подсистемы Код алгоритма, исправляющего ошибки. http://www.ganjafile.ru/download.php?mid=39128&id=126791 Подскажите, что может мой декодер так тормозить? Знак ; в коде после всех = ставил. Не помогло. Работа ведется с массивами в 1200 бит и с матрицами 600 на 1200. В случае работы с массивом 7 бит и матрицами 3 на 7 - все быстро.
  5. Всем привет. Столкнулся вот с чем. Есть модель линии связи с модуляцией ФМ-2. Результаты моделирования сопоставимы с теорией. Пошел дальше и поставил перед модулятором BPSK блок, который кодирует последовательность, умножая входной вектор на порождающую матрицу. Иными словами из вектора А1 А2 А3 А4 делает вектор А1 А2 А3 А4 А5 А6 А7 и он уже передается. Ошибка в канале в этом случае оказывается больше, хотя характеристики канала не меняются (ОСШ битовое выставлено 8 дБ.) Похоже модель понимает, что шаг дискретизации во времени изменился и С/Ш рассчитывает для этого шага. В каких настройках следует полазить и что следует предпринять?
  6. Буду признателен. Помогите тёзке. Моделька живет тут http://www.ganjafile.ru/download.php?mid=39128&id=114419
  7. Всем привет. Столкнулся вот с чем. Дано: Генератор создает вектор [A1 A2 A3 A4 A5 A6 A7]. Этот веткор поступает на блок Binary Symmetric Channel , кторый вносит в этот вектор ошибку. На выходе получается вектор с ошибкой. Задача: Снять BER в точках ДО и ПОСЛЕ блока Binary Symmetric Channel , иными словами,посмотреть сколько он внесет ошибок. Нашел блок Error Rate Calculation . Но при его использовании вылезает ошибка. Error reported by S-Function 'scomerrrate2' in 'untitled/Error Rate Calculation': Multichannel operation is not supported. Вопрос: 1. Какой другой блок можно использовать для моей цели? 2. Как бороться с ошибкой? Как я понял, необходима какая то S- функция, которой у меня нет?
  8. Строка нужна для последующего перемножения её на матрицу.
  9. Всем привет! Не получается сгенерировать последовательность строкой. Генератор выдает фрейм-столбец,а не фрейм строку. Пробовал поиграть с буфером Но не помогло. Может быть подскажите, что можно предпринять?
  10. Всем привет! Преподаватель дал задание в Матлабе, точнее в Симулинке, но опыта работы в этих средах у меня нет почти. Задача: Есть три блока. 1,2,3 (Число их в схеме никто не ограничивает ,но мне видится решение этой задачи именно так.) Первый должен генерировать слово, скажем 4-ёх разрядное. Оно должно поступать на второй блок, где умножается на матрицу. Третий блок, каким-то образом должен отображать результат перемножения. Готовые блоки нельзя. Каждую внутренность блоков я должен написать сам (За исключением,наверное,блока 3, который выполняет по моему замыслу роль индиктаора). С чего начать, какие блоки взять, что именно почитать в хелпе и на что обратить внимание?
  11. В поле Workspace это понятно. Но откуда эти значения там появляются? Где они лежат в корне матлаба?
  12. Всем привет! Столкнулся с проблемой. Параметры генератора потока бит Вот вместо конкретных чисел там указано dvb.seed и dvb.bitPeriod . Очевидно это ссылки на конкретное число. То есть где то должно быть место,где напсиано dvb.seed = стока то dvb.bitPeriod= стока то Где найти это место?