📄 shiyan5.m
字号:
global dt t f df N
close all
clear Eb_N0 Pe%清除以前对于信噪比和误码率的定义
N=2^13; %采样点数
L=16; %每码元的采样点数
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;
t=linspace(-T/2,T/2,N); %时域横坐标
f=linspace(-Bs,Bs,N)+eps; %频域横坐标
figure(1)
set(1,'Position',[400,10,250,300])
%设定窗口位置及大小
figure(2)
set(2,'Position',[50,400,400,300])
%设定窗口位置及大小
figure(3)
set(3,'Position',[10,10,250,300])
%设定窗口位置及大小
%升余弦
hr1=sin(pi*t/Ts)./(pi*t/Ts);
hr2=cos(alpha*pi*t/Ts)./(1-(2*alpha*t/Ts).^2);
hr=hr1.*hr2; %升余弦滚降函数
HR=(T2F(hr));%傅立叶变换取模,为开方
HR1=abs(HR)
GT=sqrt(HR1);%最佳基带传输发送,接收滤波器的频域应当共轭匹配且总体传输特性应该为升余弦滚降函数
GR=GT;%发送接收滤波器系统函数匹配
tao=0.5*Ts;
a=0.5;
[a,tao]
C=1-a*exp(-j*(2*pi*f*tao));
aC=abs(C);
figure(1)
semilogy(f,aC)
grid
axis([-4/Ts,4/Ts,-30,10])
xlabel('f (MHz)')
ylabel('信道特性 (dB)')
%fill(f,aC,'g')
title('升余弦滚降信道特性')
H=C.*HR; %总体信道特性
h=real(f2t(H));%取模,忽略时延转换到时域
figure(3)
plot(t,h)%总体时域特性
grid
axis([-Ts,3*Ts,-1,2])
xlabel('t (us)')
ylabel('总体时域特性 ')
title('总体时域特性')
for loop1=1:20%;循环20次
Eb_N0(loop1)=(loop1-1) %信噪比
eb_n0(loop1)=10^(Eb_N0(loop1)/10)%分贝值变为真值
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.*C.*HR1))+nr; %传输后的波形
y=sr(L/2:L:N); %以L/4为起点,步长L,取样点N 无取样偏差
aa=sign(y); %接收码元
n_err=n_err+length(find(aa~=a)) ; %误符号数为两者不相同的符号数
end
Pe(loop1)=n_err/(M*loop2);%误码率Pe'=n_err/(M*loop2)
figure(2)
semilogy(Eb_N0,Pe,'r');
eb_n0=10.^(Eb_N0/10);
hold on
semilogy(Eb_N0,0.5*erfc(sqrt(eb_n0)));
axis([0,9,1e-4,1.5])
xlabel('Eb/N0')%理论
ylabel('Pe')
legend('实际曲线','理论曲线')
title('最佳基带系统的信噪比/误码率曲线(无取样偏差)')
end
%figure(2)
%clf
%hold on
%grid
%xlabel('t (us)')
%ylabel('V')
%tt=[0:dt:Na*L*dt];
%for jj=1:Na*L:N/2
%plot(tt,s(jj:jj+Na*L),'g');%眼图
%end
%axis([0,Na*Ts,min(s)-0.3,max(s)+0.3])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -