一个qpsk调制小程序,总提示出错
我在仿真RS码时用8PSK来进行调制,想对比分析一下,就换做QPSK调制。可是程序写出来,总不对,麻烦大家帮忙看一下,运行的时候提示这样的错误:??? Attempted to access dsource1(21433); index out of bounds because numel(dsource1)=21432.
Error in ==> qpsk at 28
if((dsource1(i)==0)&(dsource2(i)==0))
程序如下:
function =qpsk(input,No)
u=input.x;
sgma=sqrt(No);
%信号映射成qpsk
s00=;
s01=;
s11=[-1 0];
s10=;
for i=1:length(u)
switch u(i)
case 0
dsource1(i)=0;
dsource2(i)=0;
case 1
dsource1(i)=0;
dsource2(i)=1;
case 2
dsource1(i)=1;
dsource2(i)=0;
case 3
dsource1(i)=1;
dsource2(i)=1;
end;
end;
%经过高斯信道
for i=1:length(u)
n=gngauss(sgma);
if((dsource1(i)==0)&(dsource2(i)==0))
r=s00+n;
elseif((dsource1(i)==0)&(dsource2(i)==1))
r=s01+n;
elseif((dsource1(i)==1)&(dsource2(i)==0))
r=s10+n;
else
r=s11+n;
end;
%计算互相关度
c00=dot(r,s00);
c01=dot(r,s01);
c10=dot(r,s10);
c11=dot(r,s11);
%对第i个符号进行判决
c_max=max();
if(c00==c_max)
decis1(i)=0;
decis2(i)=0;
elseif(c01==c_max)
decis1(i)=0;
decis2(i)=1;
elseif(c10==c_max)
decis1(i)=1;
decis2(i)=0;
else
decis1(i)=1;
decis2(i)=1;
end;
end;
%映射成多进制信号
for i=1:length(u)
if((decis1(i)==0)&(decis2(i)==0))
channelout(i)=0;
elseif((decis1(i)==0)&(decis2(i)==1))
channelout(i)=1;
elseif((decis1(i)==1)&(decis2(i)==0))
channelout(i)=2;
else
channelout(i)=3;
end
end
[ 本帖最后由 eight 于 2007-5-14 15:02 编辑 ] 原帖由 iwannaher 于 2007-5-14 13:29 发表 http://www.chinavib.com/forum/images/common/back.gif
我在仿真RS码时用8PSK来进行调制,想对比分析一下,就换做QPSK调制。可是程序写出来,总不对,麻烦大家帮忙看一下,运行的时候提示这样的错误:
??? Attempted to access dsource1(21433); index out of bound ...
像这种越界问题根据出错提示的位置设置断点,然后调试一下就可以了 没法调试呀,不知道该怎样改程序。无语了~~~ 原帖由 iwannaher 于 2007-5-14 15:39 发表 http://www.chinavib.com/forum/images/common/back.gif
没法调试呀,不知道该怎样改程序。无语了~~~
如果你自己都调试不到,外人怎帮到你? 你误会我的意思了。如果我能改过来的话我就不到论坛上来提问了,正是因为有问题所以才来问。肯定是某个细节出了问题。 原帖由 iwannaher 于 2007-5-14 17:25 发表 http://www.chinavib.com/forum/images/common/back.gif
你误会我的意思了。如果我能改过来的话我就不到论坛上来提问了,正是因为有问题所以才来问。肯定是某个细节出了问题。
我的意思是,如果连熟悉该背景的你都无法知道哪里出问题了,而且你的程序带输入参数,但没有任何数据可以测试,试问外人如何帮你看?从相反的角度想想,如果我给你这样的函数,你能否回答哪里出问题了? 这只是一个子程序,输入的参数放在主程序中的。我就想看看这个子程序有问题没 原帖由 iwannaher 于 2007-5-15 22:17 发表 http://www.chinavib.com/forum/images/common/back.gif
这只是一个子程序,输入的参数放在主程序中的。我就想看看这个子程序有问题没
如果你用的是2006以上的matlab,可以用 cell mode 功能 发现问题所在了:设置断点运行后发现u变量的大小为u:1x21435 double运行到dsource1就变成了1x21432。数组的大小不匹配。可是以前后8PSK调制的时候没遇到这个问题,改成4psk就不通了。如何修改dsource这个变量,请达人指教! 原帖由 iwannaher 于 2007-5-18 10:35 发表 http://www.chinavib.com/forum/images/common/back.gif
发现问题所在了:设置断点运行后发现u变量的大小为u:1x21435 double运行到dsource1就变成了1x21432。数组的大小不匹配。可是以前后8PSK调制的时候没遇到这个问题,改成4psk就不通了。如何修改dsource这个变量, ...
使用变量前最好先预分配空间,建议多看看 置顶贴:聚宝盆 中提到的精华贴:“写给学习 matlab 的新手们” 把你的程序发到我的邮箱。8psk.qpsk都发
邮箱是michaeler@163.com
我是学生我也做8PSK调制,能不能参考一下
邮箱caowei986@sina.com
[ 本帖最后由 eight 于 2007-6-1 17:33 编辑 ]
页:
[1]