clear all
close all
a=1;    % 载波振幅
fc=2;   % 载波频率(Hz)
SNRindB1=-5:1:12;     % 信噪比范围 (dB)
SNRindB2=-5:0.2:12;   % 信噪比范围 (dB)
N_sample=100;%每个码元的的采样点数
N=10000;  % 码元数
Ts=1;   % 码元宽度
d=sign(rand(1,N)-0.5+eps);%产生双极性二进制码元
df=0.01;
simu_err_prb=zeros(1,length(SNRindB1));
%理论误码率
for i=1:length(SNRindB2)  % 计算信噪比值
    SNR=10^(SNRindB2(i)/10);
 %计算普通接收机的理论误码率
theo_err_prb(i)=0.5*erfc(sqrt(SNR));%蒙特卡洛仿真误码率
theo_err_prb1(i)=0.5*erfc(sqrt(2*SNR));%最佳接收机理论误码率          
end
%普通2PSK接收机实际误码率
for i=1:length(SNRindB1)
[numoferr,panjue,desingal,t]=bpskberr(A,fc,SNRindB1(i),N_sample,N,Ts,d,df);
simu_err_prb(i)=numoferr;
end
% 画误码率曲线图
semilogy(SNRindB2,theo_err_prb,SNRindB1,simu_err_prb,'o',SNRindB2,theo_err_prb1,'*');
axis([-5 12 0.00000001 1]);
xlabel('SNR in dB');
ylabel('Prb of Err');
legend('蒙特卡洛仿真误码率','2psk接收机实际误码率','最佳接收机理论误码率');

2psk误码率计算子程序
function [numoferr,panjue,desingal,t]=bpskberr(A,fc,snr,N_sample,N,Ts,d,df)
%求误码率 
%-------------------系统仿真参数
% A;    %载波振幅
% fc;   %载波频率(Hz)
% snr;  %
% N_sample;% 
% N;  %  码元数
% Ts;   % 码元宽度
%d;输入二进制代码
%df:频率分辨率
% -------------------输出(返回)参数
%numoferr;%误码率
%panjue 恢复的二进制代码1用1表示,0用-1表示
%desingal;%恢复的数字基带信号
%t;时域采样时序
%----------------------生成调制信号
B=1/Ts;
f_start=fc-B;
f_cutoff=fc+B;
fs=fc*N_sample;% 
ts=Ts/fs; % 
t=0:ts:N*Ts-ts;
Lt=length(t);
% 产生二进制信源
dd=sigexpand((d+1)/2,fc*N_sample);
gt=ones(1,fc*N_sample); % NRZ波形
d_NRZ=conv(dd,gt);
d_sjx=2*d_NRZ-1;%生成双极性NRZ信号
%----对数字基带信号进行2PSK调制
ht=A*sin(2*pi*fc*t);%载波
s_2psk=d_sjx(1:Lt).*ht;%生成2PSK信号
%----------------生成高斯白噪声噪声
snr_lin=10^(snr/10); %
signal_energy=0.5*A^2*Ts;%求出接收信号平均能量
noise_power=( signal_energy *fs)/(snr_lin*4);%求出噪声方差(噪声均值为0)
noise_std=sqrt(noise_power);%求出噪声均方差
noise=noise_std.*randn(1,Lt);%以噪声均方差作为幅度产生高斯白噪声
%---------------将已调信号送入信道
r=s_2psk(1:Lt)+noise(1:Lt);%叠加了噪声的已调信号,相当于将已调信号送入理想信道
[rf,r,df1,f]=T2F(r,ts,df,fs);
%-----------在接收端先通过带通滤波器
[H,f]=bp_f(length(rf),f_start,f_cutoff,df1,fs,1);
DEM = H.*rf;      %滤波器输出的功率谱
[dem]=F2T(DEM,fs);%滤波器的输出信号波形 
der=dem(1:Lt).*ht;%混频
[derf,der,df1,f]=T2F(der,ts,df,fs);% 
%-----------------再经过低通滤波器
[LPF,f]=lp_f(length(derf),B,df1,fs,1);
DM = LPF.*derf; %理想低通滤波器输出的功率谱
[dm]=F2T(DM,fs);%理想低通滤波器的输出信号
%-----------最后对LPF输出信号抽样判决
panjue=zeros(1,N);%建立存储判决值的矩阵
%抽样判决,规则:大于等于0判1,小于0判-1
for i=1:N
    if dm(fc*N_sample*(i-1)+fc*N_sample/2+1)>=0;%抽样判决时刻
        panjue(i)=1;
    else
        panjue(i)=-1;
    end
end
%----------生成判决出的基带信号波形
dd1=sigexpand(panjue,fc*N_sample);
gt1=ones(1,fc*N_sample); % NRZ波形
desinga=conv(dd1,gt1);
desingal=desinga(1:Lt);
%-------------------------统计误码数
numoferr=sum(abs(panjue-d)/2)/N;%计算出错误码元数

注意: 代码中仍然存在一些问题,例如 T2F、F2T、bp_f 和 lp_f 函数的定义缺失。您需要根据您的代码实现提供这些函数的定义。

此外,sigexpand 函数的定义也需要提供。

请确保您提供完整的代码,或者提供相关函数的定义,以便更好地完成代码优化和 SEO 工作。


原文地址: https://www.cveoy.top/t/topic/p1G 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录