Ошибки неверного типа данных

Исходный алгоритмНовый алгоритм

Функция:

function y = mysum(x,T)  %#codegen  
	 y = zeros(size(x), 'like', T.y);
    for n = 1:length(x)
        y = y + x(n);
    end
end

Проблема:

y использует установку fimath по умолчанию FullPrecision для свойства SumMode. В каждой итерации цикла for в функциональном mysum размер слова y растет на один бит. Во время симуляции в MATLAB® нет никакой проблемы, потому что типы данных могут легко измениться в MATLAB. Однако ошибка несоответствия типов происходит во время изготовления, потому что типы данных должны остаться статичными в C.

Фиксация:

Перепишите функцию, чтобы использовать преобразованное в нижний индекс присвоение в цикле for.

Путем перезаписи y = y + x (n) как y (:) = y + x (n), значение справа присвоено в типу данных y. Это присвоение сохраняет numerictype y и избегает ошибки несоответствия типов.

Функция:

function y = mysum(x,T)  %#codegen  
	 y = zeros(size(x), 'like', T.y);
    for n = 1:length(x)
        y(:) = y + x(n);
    end
end

Таблица типов:

function T = mytypes(dt)
	switch(dt)
        case 'fixed'
        F = fimath('RoundingMethod', 'Floor')
        T.x = fi([],1,16,11, F);
        T.y = fi([],1,16,6, F);
    end
end

Таблица типов:

function T = mytypes(dt)
	switch(dt)
        case 'fixed'
        F = fimath('RoundingMethod', 'Floor')
        T.x = fi([],1,16,11, F);
        T.y = fi([],1,16,6, F);
    end
end