Matlab 错误是什么;错误:1:指定的数据类型无效";什么意思?
这是我的代码,它生成一个信号,量化,编码,然后解调Matlab 错误是什么;错误:1:指定的数据类型无效";什么意思?,matlab,encoding,octave,quantization,modulation,Matlab,Encoding,Octave,Quantization,Modulation,这是我的代码,它生成一个信号,量化,编码,然后解调 %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 Quant
%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,所有的值都是正值,所以我不明白为什么这个函数不能工作
编辑:代码以八度运行。删除了不必要的代码。在
de2bi
的实现中,Matlab和Octave之间似乎不兼容。Octave似乎无法正确处理对de2bi的双输入调用,而第二个输入是有效位标志。它要求您同时提供输入编号和列数作为前两个输入,然后该标志可以成功地作为第三个输入处理(如果您指定了不同的基,则为第四个)。倍频程似乎也不能处理基值的空占位符,但它可以处理要显示的列数
e、 例如:
>> 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
但是,在带有通信组件1.2.2的倍频程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和倍频程中产生相同的输出
已在倍频程错误跟踪器上创建
更新:上面提到的bug报告中已经提交了一个补丁,该补丁修正了Octave和Matlab版本di2be之间不兼容的输入处理。如果上述解决方案在更新版本的软件包与补丁一起发布之前不足以解决问题,则还包括di2be.m的兼容版本。请回答您的问题,以澄清代码是否以八度运行。Octave和MATLAB不一样,其中一个的代码不需要在另一个中运行。你必须了解如何在八度音阶中完成你需要完成的任何事情。也请阅读。你发布的代码太多了,大部分都与你的错误无关。