Borrar filtros
Borrar filtros

Problem with variable size

3 visualizaciones (últimos 30 días)
Catteau Ophélie
Catteau Ophélie el 24 de Mzo. de 2021
Comentada: Walter Roberson el 24 de Mzo. de 2021
Hello, I am trying to do a customize buffer but it says that my output has a variable size and I don't wont it.
Can someone help me to resolve it ? I put my code below ( u is a vector of 8 double and FFTLength is a size of the buffer)
function data = custom_buffer( FFTLength, u)
%#codegen
persistent buffer next_index
% Define initial values
if isempty(buffer)
buffer = zeros(FFTLength,1);
next_index = 1;
end
% Populate the buffer
for k = 1 :8
buffer(next_index) = u(k);
end
% Increment the location to write to at the next time
if next_index < FFTLength
next_index = next_index + 9;
else
next_index = 1;
end
data = buffer;
end
  4 comentarios
Catteau Ophélie
Catteau Ophélie el 24 de Mzo. de 2021
OK, thank you I forgot this, I change it but it doesn't solve my problem about the variable size of data.
function data = custom_buffer( FFTLength, u)
%#codegen
persistent buffer next_index
% Define initial values
if isempty(buffer)
buffer = zeros(FFTLength,1);
next_index = 1;
end
% Populate the buffer
for k = 1 :8
buffer(next_index) = u(k);
next_index = next_index +1;
end
% Increment the location to write to at the next time
if next_index < FFTLength
next_index = next_index + 1;
else
next_index = 1;
end
data = buffer;
end
Walter Roberson
Walter Roberson el 24 de Mzo. de 2021
No, that way of coding can expand the array.
Suppose that we have reached next_index = FFTLength - 1. Then buffer(next_index)=u(1) puts u(1) into second last location, increment next_index to FFTLength - 0. u(2) is put there, increment next_index to FFTLength + 1. u(3) is put there... Ooops, we expanded the array!

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 24 de Mzo. de 2021
function data = custom_buffer( FFTLength, u)
%#codegen
persistent buffer next_index
% Define initial values
if isempty(buffer)
buffer = zeros(FFTLength,1);
next_index = 1;
end
% Populate the buffer
for k = 1 : 8
buffer(next_index) = u(k);
next_index = mod(next_index, FFTLength) + 1;
end
data = buffer;
end
  2 comentarios
Catteau Ophélie
Catteau Ophélie el 24 de Mzo. de 2021
I corrected like to write but there is always the variable size 's issue...
Walter Roberson
Walter Roberson el 24 de Mzo. de 2021
Is your FFTLength input defined as a Constant block? If there is any chance that the value could change between function calls, then the block is variable length.
The typical work-around for this is to define a maximum length using coder.varsize() or to
buffer = zeros(maximum_FFTLength,1);
and
assert(FFTLength <= maximum_FFTLength)

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Programming en Help Center y File Exchange.

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by