📄 smldpe2.m
字号:
function [p]=smldPe2(snr_in_dB)
% [p]=smldPe2(snr_in_dB)
% SMLDPE仿真求出以dB为单位的特定信噪比的误码率
E=1;
SNR=exp(snr_in_dB*log(10)/10); %信噪比
sgma=E/sqrt(2*SNR); %噪声的标准偏差
M=10000; %码元数
L=32; %每个码元采样点数
N=M*L; %采样点数
Rb=2; %码速率
Ts=1/Rb; %码元间隔
dt=Ts/L; %时域采样间隔
df=1/(N*dt); %频域采样间隔
d=16; %半个码元采样点数
T=N*dt; %截短时宽
Bs=N*df/2; %频带宽度
t=[-T/2+dt/2:dt:T/2]; %时域坐标
t1=[-T/2+dt/2:32*dt:T/2]; %时域坐标
f=[-Bs+df/2:df:Bs]; %频域坐标
alpha=0.5; %滚降系数
g1=sin(pi*t/Ts)./(pi*t/Ts);
g2=cos(alpha*pi*t/Ts)./(1-(2*alpha*t/Ts).^2);
g=g1.*g2;
G=sqrt(t2f(g,dt)); %发送和接收滤波器频谱
Cf=1-0.5*exp(-2*i*pi*f*d); %信道传输函数
Gf=G.^2.*Cf; %系统总的频谱
%求系统后的码元样本序列
for i1=1:M,
temp=rand; %在区间(0,1)间的一个均匀随机变量
if (temp<0.5),
dsource(i1)=0;
else
dsource(i1)=1;
end;
end;
%2进制差分编码
mapping=[0 1];
MM=2;
[diff_enc_output]=cm_dpske(E,MM,mapping,dsource);
a=diff_enc_output(:,1);%只取第一列‘+1’‘-1’,产分编码后面的0不要
imp=zeros(1,N);
imp(L/2:L:N)=a/dt;
S=t2f(imp,dt).*Gf;
s=f2t(S,dt);
s1=zeros(1,N); %此段程序将经傅立叶变换得到的数字序列
s1(N/2+1:N)=s(1:N/2);%在中轴反转,如111-1-11,经变换变成-1-11111
s1(1:N/2)=s(N/2+1:N);%因此应把它反过来,这主要是由
s1=real(s1); %f2t和t2f函数引起的.
gr=s1+sgma*randn(1,N); %信号加噪声,实现SNR
gr1=gr(8:32:N); %取每个码元中间的一个样本
%随后为判决和误码概率的计算
numoferr=0;
for ii=1:M,
%随后为判决
if (gr1(ii)<0),
decis=-1; %判决为“0”
else
decis=1; %判决为“1”
end;
if(decis~=a(ii)),
numoferr=numoferr+1; %如果出错,计数器加1
end;
end;
p=numoferr/M; %误差概率估算
Ep=zeros(size(f))+eps;
%求滤波器后的码元和功率谱
a=sign(randn(1,M))+1;
imp=zeros(1,N);
imp(L/2:L:N)=a/dt;
S=t2f(imp,dt).*G;
s=f2t(S,dt);
s=real(s)+0*randn(1,N);
P=S.*conj(S)/T;
Ep=Ep+P+eps;
%画功率谱
figure(1)
set(1,'position',[10,50,300,200]);
plot(f,30+10*log10(Ep),'g')
grid
axis([-3,3,-50,50]);
xlabel('f in MHz');
ylabel('Ps(f) in dBm/MHz');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -