📄 pushbutton100.m
字号:
clear
global dt t f df N T
close all
clear Eb_N0 Pe
N=2^15; %采样点数
L=32; %每码元的采样点数
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 %滚降系数
fc=15
t=linspace(-T/2,T/2,N); %时域横坐标
f=linspace(-Bs,Bs,N)+eps; %频域横坐标
%升余弦
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;
for loop1=1:10
Eb_N0(loop1)=(loop1-1); %Eb/N0 in dB
eb_n0(loop1)=10^(Eb_N0(loop1)/10);
Eb=1;
n0=Eb/eb_n0(loop1); %信道的噪声谱密度
sita=n0*Bs; %信道中噪声功率
n_err=0; %误码计数
for loop2=1:3 %循环3次求Pe取平均值
s4=round(rand(1,M));
s5=zeros(1,M/2); %串并变换
s6=zeros(1,M/2);
s7=zeros(1,M/4); %数摸变换
s8=zeros(1,M/4);
for i=1:M/2, %%第1路
s5(i)=s4(2*i-1);
end
for k=1:M/4
if (s5(2*k-1)==0)&(s5(2*k)==0), %数摸变换
s7(k)=-3;
elseif (s5(2*k-1)==0)&(s5(2*k)==1),
s7(k)=-1;
elseif (s5(2*k-1)==1)&(s5(2*k)==1),
s7(k)=1;
else
% (s5(2*k-1)==1)&(s5(2*k)==0),
s7(k)=3;
end
end
imp1=zeros(1,N); %产生冲激序列
imp1(2*L:4*L:N)=s7/dt;
IMP1=t2f(imp1);
%%第二路
for j=1:M/2,
s6(j)=s4(2*j);
% m=2i-1;
end
for m=1:M/4
if (s6(2*m-1)==0)&(s6(2*m)==0), %数摸变换
s8(m)=-3;
elseif (s6(2*m-1)==0)&(s6(2*m)==1),
s8(m)=-1;
elseif (s6(2*m-1)==1)&(s6(2*m)==1),
s8(m)=1;
else
% (s6(2*m-1)==1)&(s6(2*m)==0),
s8(m)=3;
end
end
imp2=zeros(1,N); %产生冲激序列
imp2(2*L:4*L:N)=s8/dt;
IMP2=t2f(imp2);
s9=real(f2t(IMP1.*GT));
s10=real(f2t(IMP2.*GT));
s11=s9.*(sqrt(2)*cos(2*pi*fc*t));
s12=-s10.*(sqrt(2)*sin(2*pi*fc*t));
s13=s11+s12;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%进入信道%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%调制完成%%%%%%%%%%%%%%%%%%%
n0=sqrt(sita)*randn(size(t)); %信道噪声
s15=s13+n0;
s16=s15.*(sqrt(2)*cos(2*pi*fc*t));
s17=-s15.*(sqrt(2)*sin(2*pi*fc*t));
s18=real(f2t(t2f(s16).*GR)); %解调信号1
s19=real(f2t(t2f(s17).*GR)); %解调信号2
s1818=s18(2*L:4*L:N); %取样1
s1919=s19(2*L:4*L:N); %取样2
%%%%%%%%%%%判决%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
s20=zeros(1,M/2); %判决结果
s21=zeros(1,M/2);
for ii=1:M/4
if s1818(ii)>=2 %判决1
s20(2*ii-1)=1; s20(2*ii)=0;
elseif s1818(ii)>0
s20(2*ii-1)=1; s20(2*ii)=1;
elseif s1818(ii)>-2
s20(2*ii-1)=0; s20(2*ii)=1;
else
s20(2*ii-1)=0; s20(2*ii)=0;
end
end
for ii=1:M/4
if s1919(ii)>=2 %判决2
s21(2*ii-1)=1; s21(2*ii)=0;
elseif s1919(ii)>0
s21(2*ii-1)=1; s21(2*ii)=1;
elseif s1919(ii)>-2
s21(2*ii-1)=0; s21(2*ii)=1;
else
s21(2*ii-1)=0; s21(2*ii)=0;
end
end
s22=zeros(1,M);%并串变换
for n=1:2:M-1
s22(n)=s20((n+1)/2);
s22(n+1)=s21((n+1)/2);
end
n_err=n_err+length(find(s22~=s4)) ;
end
Pe(loop1)=n_err/(M*loop2); %平均误码率=误码总数/(码元数×循环次数)
figure(100)
semilogy(Eb_N0,Pe,'g');
eb_n0=10.^(Eb_N0/10);
hold on
semilogy(Eb_N0,1.5*erfc(sqrt(0.5*eb_n0)));
axis([0,9,1e-4,1])
xlabel('Eb/N0')
ylabel('Pe')
legend('实际误比特率曲线','理论误比特率曲线')
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -