![]() |
【求助】走遍了所有的Matlab社区都没人能够解答的一个小问题
我在仿真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 [channelout]=qpsk(input,No) u=input.x; sgma=sqrt(No); %信号映射成qpsk s00=[1 0]; s01=[0 1]; s11=[-1 0]; s10=[0 -1]; 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([c00 c01 c10 c11 ]); 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 |
发现问题所在了:设置断点运行后发现u变量的大小为u:1x21435 double运行到dsource1就变成了1x21432。数组的大小不匹配。可是以前后8PSK调制的时候没遇到这个问题,改成4psk就不通了。如何修改dsource这个变量,请达人指教!
|
呵呵!!我们通信的课还没有学到这个!!:D
|
所有时间均为北京时间。现在的时间是 08:55。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.