返回信息流这几天做一个BPSK误码率的仿真,自己做出来的误码率与通原书上理论公式得到的误码率相差甚远,从书上画的图来看,在信噪比是0dB的情况下,BPSK的相关解调的误码率大概是1/2左右,但是我做出来的是从只要信噪比大于-5dB,相关解调的误码率就是为0了。下面是我的代码,不知道有没有做过相关仿真的可以指导一下。
clc; close all; clear all;
% 脉冲宽度和信噪比的取值数量
bitCounts=500000;
SNR=-8;
%% BPSK基本参数的设置
Fs = 10000;% 采样频率
Fc = 1000;%载波频率
Ts= 0.01;%比特宽度
Interval=1/Fs;%采样间隔
t=[0:Interval:Ts-Interval];%每个比特的采样时刻
N=Fs*Ts;%每个比特的采样数目
carr=cos(2*pi*Fc*t);%载波波形
%% 产生bit序列
s_rand=rand(1,bitCounts);
for i=1:bitCounts
if(s_rand(i)>0.5)
seq(i)=1;
else
seq(i)=-1;
end
end
s=zeros(1,N*bitCounts);%提前为信号分配内存,后续可以提高赋值的速度
car_local=zeros(1,N*bitCounts);%用于相关解调的本地载波
%% BPSK调制
for i=1:bitCounts
if seq(i)==1
s((i-1)*N+1:i*N)=carr;
else
s((i-1)*N+1:i*N)=-carr;
end
car_local((i-1)*N+1:i*N)=carr;
end
%% 经过信道
s_awgn=awgn(s,SNR,'measured');%叠加噪声使得信噪比为SNR
%% 相关解调
d_s=s_awgn.*car_local;
%% 抽样判决。
%书上是给接收信号乘以载波然后再积分,这里是离散信号,所以就是把每个bit的采样点求和然后判决
for j=1:bitCounts
if sum(d_s((j-1)*N+1:j*N))>0
d_seq(j)=1;
else
d_seq(j)=-1;
end
end
sum(abs(d_seq-seq))/bitCounts%计算误码率
这是一条镜像帖。来源:北邮人论坛 / communications / #29010同步于 2020/10/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Communications机器人发帖
【问题】通过Matlab仿真BPSK的误码率问题
RunningMa
2020/10/22镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
【 在 buptliqk 的大作中提到: 】
: 我先仿真看看结果吧
非常感谢你的回复,我已经解决了,我利用matlab库函数awgn添加的高斯白噪声的方式不对。现在的做法已经和理论曲线重合了。非常漂亮。
好哒,我还没发现这个问题
【 在 RunningMa (RunningMa) 的大作中提到: 】
: 非常感谢你的回复,我已经解决了,我利用matlab库函数awgn添加的高斯白噪声的方式不对。现在的做法已经和理论曲线重合了。非常漂亮。
【 在 whitehorsele 的大作中提到: 】
: 判决代码优化建议:
: seq = s_rand;
: seq(seq > 0.5) = 1;
: ...................
对,后来我是这样判决的,谢谢哈