1

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

 %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 load 通信),我得到了这行错误。

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

4

1 回答 1

1

Matlab 和 Octave 在de2bi. 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 中产生相同的输出。

已在 Octave 错误跟踪器上创建错误报告 59466 。

更新:已向上述错误报告提交了一个补丁,该补丁更正了 Octave 和 Matlab 版本的 di2be 之间不兼容的输入处理。如果在更新版本的软件包与补丁一起发布之前上述解决方法不充分,则其中还包括兼容版本的 di2be.m。

于 2020-11-16T12:17:02.690 回答