Call poly2trellis in Python

4 views (last 30 days)
blue_sdr
blue_sdr on 23 Feb 2017
Commented: blue_sdr on 27 Feb 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!

Accepted Answer

Bo Li
Bo Li on 27 Feb 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:

More Answers (3)

Image Analyst
Image Analyst on 23 Feb 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 Comment
blue_sdr
blue_sdr on 24 Feb 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.

Sign in to comment.


Bo Li
Bo Li on 24 Feb 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 on 27 Feb 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?

Tags

Community Treasure Hunt

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

Start Hunting!