声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 8401|回复: 10

[编程技巧] Subscript indices must either be real positive integers o...

[复制链接]
发表于 2006-4-11 12:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
% 用matlab构建直接序列扩频通信系统,pn码用gold码,m序列用11级斐波纳契结构(SSRG)移位寄存器实现
% 通过加入加性高斯白噪声来判定系统性能,得出不同信噪比情况下的误码率
% 程序结构:gold码产生-》传送数据产生-》扩频-》加入噪声-》解扩-》样本求和、信息判决-》误码率记数
function[l1]=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=[1,0,0,0,0,0,0,0,0,0,1];                         % m序列1初始化值
s2=[1,0,0,0,0,0,0,0,0,0,0];                         % 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[add]=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)
编译后
程序不报错,也不运行,
请问各位高手
这是什么原因?
先在这里谢谢了

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2006-4-11 14:44 | 显示全部楼层
错误提示是说下标出现了非正整数
你是不是把两个function写在一个m文件里了?
 楼主| 发表于 2006-4-11 15:21 | 显示全部楼层
对啊
都是写在一个文件内
我是先没加function bm = subsindex(s)
报出上面的错误
后来我查了下subsindex的资料
就加了这句<BR>结果不报错也不运行了
几个function不能写在一块?
我是初学者,写的也是模仿人家的程序
发表于 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.

y&a.mat

32.25 KB, 下载次数: 7

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


请先阅读一些基本的编程规则,了解赋值表达式的用法,特别是 = 号左边的意义
发表于 2007-6-29 16:58 | 显示全部楼层
“基本的编程规则,了解赋值表达式的用法”这些东西不知道哪里能找到,我能找到的只有这些“赋值变量=赋值表达式”。因为我的大部分matlab书都是侧重应用方面,很少有基本编程规则!

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

[ 本帖最后由 unknowno 于 2007-6-29 17:08 编辑 ]
发表于 2007-6-29 17:10 | 显示全部楼层
原帖由 unknowno 于 2007-6-29 16:58 发表
“基本的编程规则,了解赋值表达式的用法”这些东西不知道哪里能找到,我能找到的只有这些“赋值变量=赋值表达式”。因为我的大部分matlab书都是侧重应用方面,很少有基本编程规则!

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


如果是赋值运算,则用 = ,且左边是一个变量;如果是比较运算,则用 ==,两边均是表达式
发表于 2007-6-29 18:57 | 显示全部楼层
还是不懂!我要的就是赋值运算,把imag(a)赋给real(y),有什么不对?
难道问题还是出在等号左边?
你能不能告诉我怎么改,然后我再思考为什么这么改!

原程序在下面有截图:

[ 本帖最后由 unknowno 于 2007-6-29 19:20 编辑 ]
jietu.BMP
发表于 2007-6-29 22:26 | 显示全部楼层
real(y)=imag(a);imag(y)=-real(a);改成如下就可实现
a1=imag(a);
a2=real(a);
y=a1-a2*i;

评分

1

查看全部评分

发表于 2007-6-29 22:30 | 显示全部楼层
呵呵!好办法,
难道书上写错了?

[ 本帖最后由 unknowno 于 2007-6-29 22:31 编辑 ]
发表于 2007-6-29 23:02 | 显示全部楼层
原帖由 unknowno 于 2007-6-29 22:30 发表
呵呵!好办法,
难道书上写错了?


书上那个是伪码,实际编程时要符合语法规则
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-19 11:36 , Processed in 0.069630 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表