What does the error "error: ones: invalid data type specified" mean?
What does the error "error: ones: invalid data type specified" mean?
这是我的代码,它生成一个信号,对其进行量化、编码,然后对其进行解调。
%Quantization
n=8;
L=2^n;
vmax=8;
vmin=-vmax;
del=(vmax-vmin)/L;
part=vmin:del:vmax; % level are between vmin and vmax with difference of del
code=vmin-(del/2):del:vmax+(del/2); % Contaion Quantized valuses
[ind,q]=quantiz(s,part,code); % Quantization process
% Encoding Process
figure;
code=de2bi(ind,'left-msb'); % Cnvert the decimal to binary
k=1;
l1=length(ind);
l2=length(q);
for i=1:l1
for j=1:n
coded(k)=code(i,j); % convert code matrix to a coded row vector
j=j+1;
k=k+1;
end
i=i+1;
end
当我 运行 它(已经为 quantiz 函数执行了 pkg 加载通信)时,我得到了这行错误。
error: ones: invalid data type specified
error: called from
de2bi at line 79 column 5
PCM1 at line 33 column 6
(PCM1为文件名)
我尝试从 de2bi 函数中删除 'left-msb' 参数,这使得代码 运行 没有错误,但最终输出不正确,所以我需要 'left-msb'。
据我所知,这段代码在 MATLAB 上运行良好,但我没有 MATLAB 密钥来尝试它。
关于此错误的含义以及如何修复它有什么想法吗?数组 ind 是 double 类型,所有正值,所以我不明白为什么函数不起作用。
编辑:Octave 中的代码是 运行。删除了不必要的代码。
在 de2bi
的实现中,Matlab 和 Octave 之间似乎存在不兼容性。 Octave 似乎无法正确处理对 de2bi 的双输入调用,其中第二个输入是有效位标志。它要求您提供输入编号和列数作为前两个输入,然后该标志可以作为第三个输入成功处理(如果您指定不同的基数,则为第四个)。 Octave 似乎也不处理基值的空占位符,但它可以处理要显示的列数。
例如:
>> de2bi(19)
ans =
1 1 0 0 1
在 Matlab 2020a 中,以下都产生相同的输出:
>> de2bi(19,'left-msb')
ans =
1 0 0 1 1
>> de2bi(19,[],'left-msb')
ans =
1 0 0 1 1
>> de2bi(19,[],[],'left-msb')
ans =
1 0 0 1 1
但是在带有通信 pkg 1.2.2 的 Octave 5.2.0 中:
>> de2bi(19)
ans =
1 1 0 0 1
>> de2bi(19, 'left-msb')
error: ones: invalid data type specified
error: called from
de2bi at line 79 column 5
>> de2bi(19,[],'left-msb')
ans =
1 0 0 1 1
>> de2bi(19,[],[],'left-msb')
ans = [](0x0)
>> de2bi(19,[],2,'left-msb')
ans =
1 0 0 1 1
>> de2bi(19,5,2,'left-msb')
ans =
1 0 0 1 1
在报告和修复此兼容性错误之前,目前看来最好的解决方法是使用上面倒数第二个语法,使用空占位符来表示要显示的列数,并使用 2 作为基数。此语法将在 Matlab 和 Octave 中产生相同的输出。
Bug report 59466 已在 Octave 错误跟踪器上创建。
更新:已向上述错误报告提交补丁,纠正 Octave 和 Matlab 版本的 di2be 之间不兼容的输入处理。如果在更新版本的包与补丁一起发布之前,上述解决方法还不够,则还包括 di2be.m 的兼容版本。
这是我的代码,它生成一个信号,对其进行量化、编码,然后对其进行解调。
%Quantization
n=8;
L=2^n;
vmax=8;
vmin=-vmax;
del=(vmax-vmin)/L;
part=vmin:del:vmax; % level are between vmin and vmax with difference of del
code=vmin-(del/2):del:vmax+(del/2); % Contaion Quantized valuses
[ind,q]=quantiz(s,part,code); % Quantization process
% Encoding Process
figure;
code=de2bi(ind,'left-msb'); % Cnvert the decimal to binary
k=1;
l1=length(ind);
l2=length(q);
for i=1:l1
for j=1:n
coded(k)=code(i,j); % convert code matrix to a coded row vector
j=j+1;
k=k+1;
end
i=i+1;
end
当我 运行 它(已经为 quantiz 函数执行了 pkg 加载通信)时,我得到了这行错误。
error: ones: invalid data type specified
error: called from
de2bi at line 79 column 5
PCM1 at line 33 column 6
(PCM1为文件名) 我尝试从 de2bi 函数中删除 'left-msb' 参数,这使得代码 运行 没有错误,但最终输出不正确,所以我需要 'left-msb'。 据我所知,这段代码在 MATLAB 上运行良好,但我没有 MATLAB 密钥来尝试它。
关于此错误的含义以及如何修复它有什么想法吗?数组 ind 是 double 类型,所有正值,所以我不明白为什么函数不起作用。
编辑:Octave 中的代码是 运行。删除了不必要的代码。
在 de2bi
的实现中,Matlab 和 Octave 之间似乎存在不兼容性。 Octave 似乎无法正确处理对 de2bi 的双输入调用,其中第二个输入是有效位标志。它要求您提供输入编号和列数作为前两个输入,然后该标志可以作为第三个输入成功处理(如果您指定不同的基数,则为第四个)。 Octave 似乎也不处理基值的空占位符,但它可以处理要显示的列数。
例如:
>> de2bi(19)
ans =
1 1 0 0 1
在 Matlab 2020a 中,以下都产生相同的输出:
>> de2bi(19,'left-msb')
ans =
1 0 0 1 1
>> de2bi(19,[],'left-msb')
ans =
1 0 0 1 1
>> de2bi(19,[],[],'left-msb')
ans =
1 0 0 1 1
但是在带有通信 pkg 1.2.2 的 Octave 5.2.0 中:
>> de2bi(19)
ans =
1 1 0 0 1
>> de2bi(19, 'left-msb')
error: ones: invalid data type specified
error: called from
de2bi at line 79 column 5
>> de2bi(19,[],'left-msb')
ans =
1 0 0 1 1
>> de2bi(19,[],[],'left-msb')
ans = [](0x0)
>> de2bi(19,[],2,'left-msb')
ans =
1 0 0 1 1
>> de2bi(19,5,2,'left-msb')
ans =
1 0 0 1 1
在报告和修复此兼容性错误之前,目前看来最好的解决方法是使用上面倒数第二个语法,使用空占位符来表示要显示的列数,并使用 2 作为基数。此语法将在 Matlab 和 Octave 中产生相同的输出。
Bug report 59466 已在 Octave 错误跟踪器上创建。
更新:已向上述错误报告提交补丁,纠正 Octave 和 Matlab 版本的 di2be 之间不兼容的输入处理。如果在更新版本的包与补丁一起发布之前,上述解决方法还不够,则还包括 di2be.m 的兼容版本。