上述程序报错左侧与右侧的大小不兼容,请帮忙修改,列出新的程序
时间: 2024-02-28 22:51:54 浏览: 114
照片处理程序(可以修改照片大小)
4星 · 用户满意度95%
好的,原因是相乘的两个矩阵维度不兼容导致的。我稍微修改了一下,希望可以解决问题:
```
clear all
nsamp=10;
s0=ones(1,nsamp);
s1=[-ones(1,nsamp/2) ones(1,nsamp/2)];
nsymbol=100000;
EbN0=0:12;
msg=randi([0,1],1,nsymbol);
s00=zeros(1,nsymbol);
s11=zeros(1,nsymbol);
indx=find(msg==0); %比特0在发送消息中的位置
s00(indx)=1;
s00=kron(s00, s0); %比特0影射为发送波形s0
indx1=find(msg==1); %比特1在发送消息中的位置
s11(indx1)=1;
s11=kron(s11, s1); %比特1映射为发送波形s1
s=s00+s11; %总的发送波形
s=s.'; %数据转置,方便接收端处理
for indx=1:length(EbN0)
decmsg=zeros(1,nsymbol);
r=awgn(s,EbN0(indx)-7); %通过AWGN信道
r00=s0*r.'; %与s0相关
r11=s1*r.'; %与s1相关
indx1=find(r11>=r00);
decmsg(indx1)=1; %判决
[err,ber(indx)]=biterr(msg,decmsg);
end
semilogy(EbN0, ber, '-ko', EbN0, qfunc(sqrt(10.^(EbN0/10))));
title('二进制正交信号误比特率性能')
xlabel('EbN0');ylabel('误比特率Pe')
legend('仿真结果理论结果')
```
我主要是修改了以下几个地方:
1. 在第7、8行,我将randi函数的第二个参数改成了nsymbol,这样可以生成与s、s00、s11相同的长度,避免了维度不兼容问题。
2. 在第10、12行,我使用了kron函数将s0和s1按照比特序列的长度来重复,从而得到与s00和s11相同的长度。
3. 在第20、21行,我对r进行了转置,这样r00和r11就可以与s0和s1进行点乘,得到标量值。
希望可以帮助到你,如果还有其他问题,可以随时问我哦!
阅读全文