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

 
 
> Функция и подфункция в Матлабе, Как сделать? Модель декодера
Muscat
сообщение Jun 29 2010, 09:29
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382



Добрый день, пишу следующую модель декодера Витерби.
Имеется начальная матрица путей и весов путей. С приходом каждой новой последовательности выполняются операции преобразования внутри "бабочки" путей.
Написанный код не работает, ругается что тут объявление функции ни к месту. Если переносить функцию в другой файл, то он ссылается на несуществующие массивы, попытка добавить их в атрибуты функции приводит к ошибке - слишком много атрибутов.
Я бы хотел сделать функцию сродни функции класса в С++. Входные параметры функции - те, что меняются в процессе работы. А ссылок на используемые матрицы не делать.
Путано наверное объясняю, в общем вот код

Код
clear all;
EnCoder;%Задание изначальной матрицы
%Работа декодера сводится к следующему. Изначально задается матрица,
%в которой выбирается начальная ветвь, ошибка которой =0, ошибки остальных
%представляются равными настолько большому числу, что должны отпастьв
%процессе отбора. Далее работа разбивается на бабочки, разбивка происходит
%в ручную, как и задание параметров для каждой бабочки. Параметрами
%являются следующие X1,X2 - входные состояния, Х3-Х4 - выходные состояния
%бабочки. A- переход в бабочке между Х1-Х3 И Х2=Х4, B- переход между двумя
%другими. Далее считается суммарная метрика и выбирается минимальная,
%приходящая в узлы Х3 и Х4.
%Если приходящая в узел Х3 метрика из Х1 меньше
%чем из Х2, то берем путь (1-19), по которому до этого пришли в Х1 и
%присваиваем строке (2-20), означающей путь в Х3,а первый элемент
%собственно само значение этого состояния ( задается для всех).
%Использование временных матриц обусловленно тем, что нельзя изменять
%метрику пути, приходящую в Х3 сразу, так как в следующей бабочке эта
%информация будет использоваться для других вычислений

AA_CB=[0,0];  %Вектора переходов
BD_DC=[0,1];
BC_DD=[1,0];
AB_CA=[1,1];

%Задание исходной матрицы путей
    Path_Matrix(1:4,1:20)=0;
    Path_Matrix(1:4)=1:4;
    T_Path(1:4,1:20)=0; %временная матрица
%Задание матрицы ошибок
    Err_Matrix(1:4)=(100);
    Err_Matrix(1)=(0); %задание начальной точки (1)
    T_err(1:4)=0; %временный вектор ошибок

%----Функция выполнения операции с одной бабочкой

function Buttefly(X1,X2,X3,X4,A,B,Y)
    X1_X3= sum(abs(A-Y)); %вычисление ошибок, приходяших в точки
    X1_X4= sum(abs(B-Y));
    X2_X4=X1_X3;
    X2_X3=X1_X4;

    T_Path(1:4,1)=1:4; %В каждый узел приходит один ветвь, значит
            %окончание каждому окончанию пути соответствует одна ветвь
    if (X1_X3<X2_X3) %выбор пути для Х3
        ERR_T(X3)=X1_X3; %Вес пути присваиваем новый
        T_Path(X3,2:20)=Path_Matrix(X1,1:19);
        % элементы со второго получают значение пути, пришедшего в Х1
    else
        ERR_T(X3)=X2_X3;
        T_Path(X3,2:20)=Path_Matrix(X2,1:19);
    end

    if (X1_X4<X2_X4)
        ERR_T(X4)=X1_X4; %Вес пути присваиваем новый
        T_Path(X4,2:20)=Path_Matrix(X1,1:19);
     else
        ERR_T(X4)=X2_X4;
        T_Path(X4,2:20)=Path_Matrix(X2,1:19);
    end
end


--------------------
Because it's there
Go to the top of the page
 
+Quote Post



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

 


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


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