电子产业一站式赋能平台

PCB联盟网

搜索
查看: 1440|回复: 6
收起左侧

有通信大佬吗?有一个信号误码率测试代码有错无法运行,涉及到n

[复制链接]

589

主题

924

帖子

4975

积分

四级会员

Rank: 4

积分
4975
发表于 2022-11-8 14:28:25 | 显示全部楼层 |阅读模式
有通信大佬吗?有一个信号误码率测试代码有错无法运行,涉及到nakagami信道,有人能帮忙改错吗?可以you chang
回复

使用道具 举报

578

主题

936

帖子

4943

积分

四级会员

Rank: 4

积分
4943
发表于 2022-11-8 14:29:14 | 显示全部楼层
msk调制程序:
Rb = 64000;              %码速率
fc = 900000000;          %载频
sample_num = 50;         %每个码元采样点数
datanum = 1000;            %产生的码元个数
data=rand_binary(datanum);%产生随机码元
ts = 1/sample_num/Rb;    %采样时间间隔
%%
% %进行msk调制
Ts = 1/Rb;                         %单个码元时间   
ts = Ts/sample_num;                %采样点的时间间隔
f = 1/(4*Ts);                      %振荡频率
len = length(data);
fs = 1/ts;diffdata = diffen(data);         %差分编码
P(1) = 1;                        %串并变换
for i = 1:2:datanum  
     Q(i) = diffdata(i);  
     Q(i+1) = diffdata(i);  
end  
for i = 2:2:datanum
     P(i+1) = diffdata(i);  
     P(i) = diffdata(i);  
end               
for i = 1:sample_num                                 %时延
     datat(i:sample_num:len*sample_num) = data(1:len);
     diffdatat(i:sample_num:len*sample_num) = diffdata(1:len);
     Pt(i:sample_num:len*sample_num) = P(1:len);
     Qt(i:sample_num:len*sample_num) = Q(1:len);
endt = 0:ts:len*Ts-ts;          %步长保证了对应点采样的正确性

%对应采样点进行点乘加权
P1_out = Pt.*cos(2*pi*f*t);     
Q1_out = Qt.*sin(2*pi*f*t);              %与载波相乘
P_out=P1_out.*cos(2*pi*fc*t);
Q_out=Q1_out.*sin(2*pi*fc*t);datain = P_out-Q_out;       %msk信号输出
plot(t,datain);
%%
for i=1:len*sample_num;       %信道
     naka1(i)=nakagami(0.5,1);
     naka2(i)=nakagami(1,1);
     naka3(i)=nakagami(2,1);
end
%%
data1=naka1.*datain;  %通过信道后的信号
data2=naka2.*datain;
data3=naka3.*datain;
回复 支持 反对

使用道具 举报

591

主题

959

帖子

5157

积分

四级会员

Rank: 4

积分
5157
发表于 2022-11-8 14:29:43 | 显示全部楼层
nakagami信道函数:
function [ realamp ] = nakagami( m,omaga )
r=[0:0.1:2];
dt=0.01;
gam=0;
for n=0:0.01:20;
     gam=gam+(n.^(m-1)).*exp(-n).*dt;
end
tosam=0;
tocnt=0;
for rr=1:21
     pdf(rr)=((2*m^m)*((r(rr))^(2*m-1))*(exp(-(m/omaga)*(r(rr))^2)))/(gam*omaga^m);
     sam(rr)=round(pdf(rr)*10);
     tosam=tosam+sam(rr);
     cnt(rr)=0;
end
toamp=0;
for n1=1:400;
     amp(n1)=round(rand*20);
     for n2=1:21
         if amp(n1)==round(r(n2)*10)
             cnt(n2)=cnt(n2)+1;
             break;
         end
     end
     if cnt(n2)>sam(n2)
         cnt(n2)=cnt(n2)-1;
         amp(n1)=-1;
     end
end
for n3=1:21
     tocnt=tocnt+cnt(n3);
end
for n4=1:200
     number=round(rand*400);
     if number==0
         number=round(rand*400);
     end
     realamp=amp(number)/10;
     if realamp~=-0.1
         break;
     end
end
return
回复 支持 反对

使用道具 举报

578

主题

936

帖子

4943

积分

四级会员

Rank: 4

积分
4943
发表于 2022-11-8 14:30:19 | 显示全部楼层
运行报错,实在不知道怎么改
有通信大佬吗?有一个信号误码率测试代码有错无法运行,涉及到n-1.jpg
回复 支持 反对

使用道具 举报

591

主题

959

帖子

5157

积分

四级会员

Rank: 4

积分
5157
发表于 2022-11-8 14:30:50 | 显示全部楼层
那不告诉你错误了,是你的数据的问题,你可以单独选中那个变量。F9单独运营一下,考是否出现非整数了
回复 支持 反对

使用道具 举报

591

主题

959

帖子

5157

积分

四级会员

Rank: 4

积分
5157
发表于 2022-11-8 14:31:41 | 显示全部楼层
有通信大佬吗?有一个信号误码率测试代码有错无法运行,涉及到n-1.jpg
回复 支持 反对

使用道具 举报

604

主题

970

帖子

5115

积分

四级会员

Rank: 4

积分
5115
发表于 2022-11-8 14:32:30 | 显示全部楼层
求问楼主,这个nakagami子函数最后输出的是什么,
我也在做nakagami这个小尺度衰落,请问我要是通过matlab自带的内置函数,根据分布求得到一组随机数,这个随机数r能和大尺度衰落一起得到整个信道的衰落吗
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表