BPSK的matlab仿真

% bpsk调制解调仿真
% data:20227月 author:北京理工大学·信息与电子学院·李润洲
% 环境: MATLAB R2016a
clc;
close all;
%参数设置
EBN0 = -5:5;%信噪比(dB)
myber = [];%用来记录实际误码率
len = 100000; %码元个数
span = 6;
sps = 16;%samples per symbol
b = rcosdesign(0.35,span,sps,'sqrt');
m = make_m_seq(7);%m序列
m_length = length(m);%127
for ebn0 = EBN0
    
bit_rate = 1000;%1s内1000个比特
symbol_rate = 1000;%二进制相位键控的符号率应该与比特率相同
fc = 20000;%载波频率
fs = sps.*bit_rate;%也就是16000hz,信号频率中最高是8000hz

%信号源
msg_source = randi(2,1,len)-1;%随机信号

%发送机
bipolar_msg_source = 2.*msg_source-1;%0,1映射为-1,1

%根升余弦滤波器
rcos_msg_source = upfirdn(bipolar_msg_source,b,sps);%上采样16% figure;
% plot(rcos_msg_source);
% title('time');
% 
% figure;
% plot(abs(fft(rcos_msg_source)));
% title('freq');

%载波调制
n = 1:length(rcos_msg_source);
rcos_msg_source_carrier = rcos_msg_source.*cos(2*pi*fc.*n/fs);

% figure;
% plot(rcos_msg_source_carrier);
% title('调制信号时域波形');
% 
% figure;
% plot(abs(fft(rcos_msg_source_carrier)));
% title('调制信号频域波形');


%信道
snr = 10*log10(2)+ebn0-10*log10(16);
rcos_msg_source_carrier_addnoise = awgn(rcos_msg_source_carrier,snr,'measured');
% figure;
% plot(abs(fft(rcos_msg_source_carrier_addnoise)));
% title('加噪后的调制信号频域波形');

%接收机
%匹配滤波器
%%载波恢复,生成本地载波
rcos_msg_source_addnoise = rcos_msg_source_carrier_addnoise.*cos(2*pi*fc.*n/fs);
% figure;
% plot(abs(fft(rcos_msg_source_addnoise)));
% title('本地载波频域波形');

%低通滤波
% fir_lp = fir1(128,0.1);
% rcos_msg_source_lp = filter(fir_lp,1,rcos_msg_source_addnoise);


%开始匹配滤波
rcos_msg_source_MF = filter(b,1,rcos_msg_source_addnoise);

% figure;
% plot(rcos_msg_source_MF);
% title('匹配滤波后的时域波形');
% figure;
% plot(abs(fft(rcos_msg_source_MF)));
% title('匹配滤波后的频域波形');

%%%最佳采样点、
%选取最佳采样点
decision_site = 160-128/2; %(96+128+96)/2 = 160,三个滤波器延时48,9648
%每个symbol选一个判决点
rcos_msg_source_MF_option = rcos_msg_source_MF(decision_site+1:sps:end);
%%%判决
rcos_msg_source_MF_option_sign = sign(rcos_msg_source_MF_option);
% figure; 
% plot(rcos_msg_source_MF_option_sign,'-*');
% title('判决结果');

% eyediagram(rcos_msg_source,sps);
% title('发射端眼图');
% eyediagram(rcos_msg_source_MF,sps);
% title('接收端眼图');
% 
% scatterplot(rcos_msg_source(48+1:16:end-48));
% title('bpsk星座图');



%误码性能
%误码率=传输中的误码/所传输的总码数*100%
%rcos_msg_source_MF_option_sign,bipolar_msg_source
totalnum = length(rcos_msg_source_MF_option_sign);
wrong = 0;
for i = 1:totalnum
    if bipolar_msg_source(i)~=rcos_msg_source_MF_option_sign(i)
        wrong = wrong + 1;
    end
end


myber = [myber,wrong/totalnum];
end

ber = berawgn(EBN0,'psk',2,'nondiff');
figure;
plot(EBN0,10*log10(myber),'r');%红色是实际值
hold on;
plot(EBN0,10*log10(ber),'g');%绿色是理论值
legend('实际误码率','理论误码率')


  • 5
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值