【问题标题】:What does the error "error: ones: invalid data type specified" mean?错误“错误:那些:指定的数据类型无效”是什么意思?
【发布时间】:2021-02-27 00:18:07
【问题描述】:

这是我的代码,它生成一个信号,量化它,编码它,然后解调它。

 %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 中运行。删除了不必要的代码。

【问题讨论】:

  • edit 澄清您在 Octave 中运行代码的问题。 Octave 和 MATLAB 不一样,一个的代码不需要在另一个中运行。您必须了解如何在 Octave 中完成您需要完成的任何事情。
  • 另请阅读minimal reproducible example。您发布的代码太多,其中大部分与您的错误无关。

标签: matlab encoding octave quantization modulation


【解决方案1】:

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

但是在 Octave 5.2.0 中使用通信 pkg 1.2.2:

>> 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 2023-03-25
    • 1970-01-01
    • 2021-05-19
    相关资源
    最近更新 更多