Call poly2trellis in Python

4 visualizaciones (últimos 30 días)
blue_sdr
blue_sdr el 23 de Feb. de 2017
Comentada: blue_sdr el 27 de Feb. de 2017
Hi!
I want to call 'poly2trellis' from Python:
my_trellis = eng.poly2trellis(7, [133, 171])
This results in the following error:
Error using commstr2poly (line 180) Input must be a character vector or a cell of character vectors.
Error in poly2trellis (line 42) cellOutput = commstr2poly(codeGenerator, 'octal');
Thus, I did
function [ trellis ] = get_trellis( )
trellis = poly2trellis(7, [133 171]);
end
It works with all I want to do, but obviously I lost the ability to parameterize it. This is my next approach:
function [ trellis ] = get_trellis( L_C )
trellis = poly2trellis(L_C, [133 171]);
end
This is called in Python with:
eng.get_trellis(7)
And it stops working with:
Error using poly2trellis_mex Input arguments must be nonempty real matrices.
Error in poly2trellis (line 51) trellis = poly2trellis_mex(varargin{:});
Error in get_trellis (line 4) trellis = poly2trellis(L_C, [133 171]);
The same function works if I call it in Matlab directly, but here I need MEfP, so this is not an option. Furthermore, I want to call 'poly2trellis' directly.
Any ideas how to make this work?
Thanks!

Respuesta aceptada

Bo Li
Bo Li el 27 de Feb. de 2017
You need to use mlArray in order to pass an array to MATLAB from Python. A Python list is converted into a MATLAB Cell array which is not accepted by "poly2trellis". Try this:
>>> eng.poly2trellis(7.0, matlab.double([133,171]))
Reference:

Más respuestas (3)

Image Analyst
Image Analyst el 23 de Feb. de 2017
It seems to be saying you called it without passing in anything for L_C
trellis = get_trellis();
Is that what you did? If so you'll need to pass in 7 or something
trellis = get_trellis(7);
  1 comentario
blue_sdr
blue_sdr el 24 de Feb. de 2017
I started with the first version without any arguments. This version works. But the second version with one argument does not work. It does not fail because of a missing argument, but because
Error in get_trellis (line 4) trellis = poly2trellis(L_C, [133 171]);
and I called it with
eng.get_trellis(7)
Also, it works in Matlab, but the MEfP call fails.

Iniciar sesión para comentar.


Bo Li
Bo Li el 24 de Feb. de 2017
How about trying following:
>>>eng.get_trellis(7.0)
It looks that the poly2trellis expects the first argument to be a double, but Python Engine convert 7 to int64:
In MATLAB, a number is by default "double" type. If you do following in MATLAB, you can the see the same error:
>> trellis = poly2trellis(int64(7), [133 171]);
Error using poly2trellis_mex
Input arguments must be nonempty real matrices.
Error in poly2trellis (line 51)
trellis = poly2trellis_mex(varargin{:});

blue_sdr
blue_sdr el 27 de Feb. de 2017
Thanks for the suggestions so far.
I modified my code
function [ trellis ] = get_trellis( lc )
lc = double(lc);
poly = [133 171];
trellis = poly2trellis(lc, poly);
end
Now, in MEfP, the call 'eng.get_trellis(7)' works.
Further, I want to 'poly' to be a parameter. I modified my function like this:
function [ trellis ] = get_trellis( lc, poly )
lc = double(lc);
if iscell(poly)
poly = cell2mat(poly);
poly = double(poly);
end
trellis = poly2trellis(lc, poly);
end
Now, this works too. with 'eng.get_trellis(7, [133, 171])'. This is something that really surprises me, because I tested it before and it failed on me.
Finally, I want to call 'poly2trellis' directly.
eng.poly2trellis(7.0, [133.0, 171.0])
This last one does not work. The error messages is as follows.
Error using commstr2poly (line 180) Input must be a character vector or a cell of character vectors.
Error in poly2trellis (line 42) cellOutput = commstr2poly(codeGenerator, 'octal');
How can I make the last call to 'poly2trellis' work?

Categorías

Más información sobre Error Detection and Correction en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by