📄 bpskberr.m
字号:
function [numoferr,panjue,desingal,t]=bpskberr(A,fc,snr,N_sample,N,Ts,d,df)
%求误码率
%-------------------系统仿真参数
% A; %载波振幅
% fc; %载波频率(Hz)
% snr; %信噪比dB
% 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_power=power_x(s_2psk(1:Lt));%求出信号平均功率
noise_power=(signal_power*fc*N_sample)/(snr_lin*2*(f_cutoff-f_start));%求出噪声方差(噪声均值为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;%计算出错误码元数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -