lai5011 发表于 2006-4-11 12:23

Subscript indices must either be real positive integers o...

% 用matlab构建直接序列扩频通信系统,pn码用gold码,m序列用11级斐波纳契结构(SSRG)移位寄存器实现
% 通过加入加性高斯白噪声来判定系统性能,得出不同信噪比情况下的误码率
% 程序结构:gold码产生-》传送数据产生-》扩频-》加入噪声-》解扩-》样本求和、信息判决-》误码率记数
function=squense(N,S,s,p,bm)
clear all
syms N p s S bm
Lc=input('please input the value of Lc:');          % 每一信息比特的码片数目,即处理增益
N=input('please input the value of N:');            % 传送的信息比特数目
g=input('please input the value of g:');            % 是否要加高斯噪声
p=2047;                                             % 扩频序列长度
n=11;                                             % 序列级数
s1=;                         % m序列1初始化值
s2=;                         % m序列2初始化值

%function bm = subsindex(s)
for i=1:p
    al1=bm(s1(2),s1(11),0,0,0,0,0,0);
    for j=n:-1:2
      s1(j)=s1(j-1)
    end
    s1(1)=al1;
    l1(i)=s1(n);                                    % m序列1
end
for i=1:p
    al2=bm(s2(2),s2(3),s2(8),s2(11),0,0,0,0);
    for j=n:-1:2
      s2(j)=s2(j-1)
    end
    s2(1)=al2;
    l2(i)=s2(n);                                    % m序列2
end

function=bm(x,y,z,h,r,t,p,q)                   % m序列生成算法
add=x+y+z+h+r+t+p+q;
if(add==0|add==2|add==4|add==6|add==8)
    add=0;
else add=1;
end

编译后出现错误
Subscript indices must either be real positive integers or logicals.
Error in ==> squense at 16
    al1=bm(s1(2),s1(11),0,0,0,0,0,0);
当我去掉下行语句的百分号时
%function bm = subsindex(s)
编译后
程序不报错,也不运行,
请问各位高手
这是什么原因?
先在这里谢谢了

aspen 发表于 2006-4-11 14:44

错误提示是说下标出现了非正整数
你是不是把两个function写在一个m文件里了?

lai5011 发表于 2006-4-11 15:21

对啊
都是写在一个文件内
我是先没加function bm = subsindex(s)
报出上面的错误
后来我查了下subsindex的资料
就加了这句<BR>结果不报错也不运行了
几个function不能写在一块?
我是初学者,写的也是模仿人家的程序

unknowno 发表于 2007-6-29 09:00

real(y)=imag(a);
imag(y)=-real(a);
我的程序调试到这两行就一直报同样的错误,real和imag是函数,怎么会有下标的问题,我想可能是系统把real和imag当成两个变量了!
请指教!
我单独把y和a(1*1024的行向量)拿出来,运行real(y)=imag(a);imag(y)=-real(a);同样出错,请指教!附上向量y和a。


??? Subscript indices must either be real positive integers or logicals.

eight 发表于 2007-6-29 10:44

原帖由 unknowno 于 2007-6-29 09:00 发表 http://www.chinavib.com/forum/images/common/back.gif
real(y)=imag(a);
imag(y)=-real(a);
我的程序调试到这两行就一直报同样的错误,real和imag是函数,怎么会有下标的问题,我想可能是系统把real和imag当成两个变量了!
请指教!
我单独把y和a(1*1024的行向 ...

请先阅读一些基本的编程规则,了解赋值表达式的用法,特别是 = 号左边的意义

unknowno 发表于 2007-6-29 16:58

“基本的编程规则,了解赋值表达式的用法”这些东西不知道哪里能找到,我能找到的只有这些“赋值变量=赋值表达式”。因为我的大部分matlab书都是侧重应用方面,很少有基本编程规则!

难道matlab把=左边的real(y)当成变量了?我该怎么解决?
可是这些是一本matlab书里面的程序,我抄下来的!迷茫ing!
恳请再次赐教!

[ 本帖最后由 unknowno 于 2007-6-29 17:08 编辑 ]

eight 发表于 2007-6-29 17:10

原帖由 unknowno 于 2007-6-29 16:58 发表 http://www.chinavib.com/forum/images/common/back.gif
“基本的编程规则,了解赋值表达式的用法”这些东西不知道哪里能找到,我能找到的只有这些“赋值变量=赋值表达式”。因为我的大部分matlab书都是侧重应用方面,很少有基本编程规则!

难道matlab把=左边的rea ...

如果是赋值运算,则用 = ,且左边是一个变量;如果是比较运算,则用 ==,两边均是表达式

unknowno 发表于 2007-6-29 18:57

还是不懂!我要的就是赋值运算,把imag(a)赋给real(y),有什么不对?
难道问题还是出在等号左边?
你能不能告诉我怎么改,然后我再思考为什么这么改!

原程序在下面有截图:

[ 本帖最后由 unknowno 于 2007-6-29 19:20 编辑 ]

yizi0000 发表于 2007-6-29 22:26

real(y)=imag(a);imag(y)=-real(a);改成如下就可实现
a1=imag(a);
a2=real(a);
y=a1-a2*i;

unknowno 发表于 2007-6-29 22:30

呵呵!好办法,
难道书上写错了?

[ 本帖最后由 unknowno 于 2007-6-29 22:31 编辑 ]

eight 发表于 2007-6-29 23:02

原帖由 unknowno 于 2007-6-29 22:30 发表 http://www.chinavib.com/forum/images/common/back.gif
呵呵!好办法,
难道书上写错了?

书上那个是伪码,实际编程时要符合语法规则
页: [1]
查看完整版本: Subscript indices must either be real positive integers o...