📄 pe2.m
字号:
%本程序中时间单位是微秒
%频率单位为MHz
%码速率单位是Mb/s
global dt t f df N T
close all
clear Eb_N0 Pe
N=2^13; %采样点数
L=8; %每码元的采样点数
M=N/L %码元数
Rb=2; %码速率是2Mb/s
Ts=1/Rb; %码元间隔
dt=Ts/L; %时域采样间隔
df=1/(N*dt) %频域采样间隔
T=N*dt %截短时间
Bs=N*df/2 %系统带宽
alpha=0.5; %滚降系数
tao=Ts/2;%
t=linspace(-T/2,T/2,N); %时域横坐标
f=linspace(-Bs,Bs,N)+eps; %频域横坐标
figure(1)
set(1,'Position',[20,100,600,400])
%设定窗口位置及大小
%升余弦
hr1=sin(pi*t/Ts)./(pi*t/Ts);
hr2=cos(alpha*pi*t/Ts)./(1-(2*alpha*t/Ts).^2);
hr=hr1.*hr2;
HR=abs(t2f(hr));
%取模是为了忽略时延
GT=sqrt(HR);
GR=GT; %GT和GR是根号下升余弦
%----------------------------------********************
C=abs(1-0.5*exp(-j*(2*pi*f*tao)));
%-----------------------------------------************
for loop1=1:20
Eb_N0(loop1)=(loop1-1) %Eb/N0 in dB
eb_n0(loop1)=10^(Eb_N0(loop1)/10);%Eb_N0为对数坐标
Eb=1;
n0=Eb/eb_n0(loop1); %信道的噪声谱密度
sita=n0*Bs; %信道中噪声功率
n_err=0; %误码计数
for loop2=1:5
a=sign(randn(1,M));
imp=zeros(1,N); %产生冲激序列
imp(L/2:L:N)=a/dt;
IMP=t2f(imp);
n_ch=sqrt(sita)*randn(size(t)); %信道噪声(时域)
nr=real(f2t(t2f(n_ch).*GR)); %输出噪声(时域)
%sr=real(f2t(IMP.*HR))+nr; %接收信号
sr=real(f2t(((IMP.*GR).*C).*GT))+nr; %接收信号
y=sr(L/4:L:N); %取样
aa=sign(y); %判决
n_err=n_err+length(find(aa~=a));
end
Pe(loop1)=n_err/(M*loop2);
figure(1)
semilogy(Eb_N0,Pe,'g');
eb_n0=10.^(Eb_N0/10);
hold on
%semilogy(Eb_N0,0.5*erfc(sqrt(eb_n0)));
%axis([0,9,1e-4,1])
semilogy(Eb_N0,0.5*erfc(sqrt(eb_n0/2)));
axis([0,14,1e-4,1])
xlabel('Eb/N0')
ylabel('Pe')
title('误比特率曲线')
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -