3.5 接收滤波器模块设计及实现
3.5.1接收滤波器模块设计
接收滤波器位于信道与抽样判决之间,在本设计中有理想低通滤波器、升余弦滤波器、平方根升余弦滤波器几种选择。其中升余弦滤波器,平方根升余弦滤波器的滚降系数?可由用户设定,方法与形成滤波器相似,“PLOT”按键调用函数方法与形成滤波器相似,这里不再重复介绍。
3.5.2接收滤波器模块实现效果
选择菜单栏“接收滤波器”按键进入该模块,选择升余弦滤波器,滚降系数设为0.5绘制图形即可看到波形图以及眼图。
Ts=1; N=15;
eye_num=6; N_data=1000; dt=Ts/N;
t=-3*Ts:dt:3*Ts;
ht_rcos=sinc(t/Ts).*(cos(a*pi*t/Ts))./(1-4*a^2*t.^2/Ts^2+eps); % ht_rcos=rcosine(1,15,a);
ht_rcos_sqrt=rcosine(1,15,'sqrt',a); switch(num_slb) case 1
ht=rcosine(1,15,'normal',0); case 2
ht=ht_rcos; case 3
ht=ht_rcos_sqrt; otherwise end;
sts=conv(st,ht);
tt=-6*Ts:dt:(N_data+6)*N*dt-dt; assignin('base','s_st',sts); global s_st1; s_st1=sts;
assignin('base','s_tt',tt); axes(handles.axes_slb1) plot(tt,sts);
axis([0,40,min(sts)-0.1,max(sts)+0.1]); axes(handles.axes_slb2) cla reset
ss=zeros(1,eye_num*N); ttt=0:dt:eye_num*N*dt-dt;
15
for k=3:50
ss=sts(k*N+1:(k+eye_num)*N); drawnow; plot(ttt,ss); hold on; end;
图3.13 接收滤波器滤波及眼图
3.6 抽样判决模块设计及实现
3.6.1抽样判决模块设计
本设计中信源发送码元个数设定为1000个,为了在信源模块中显示效果清晰,所以仅显示前10个码元。同样在抽样判决模块中采用这一办法,仅显示前10个码元(发送端前10个码元,接收端前10个码元)。
绘制发送端码元波形程序: mxs=str2num(get(handles.edit_xy,'String')); [y,t]=NRZ(mxs); axes(handles.axes_fs) plot(t,y);
从前面信源模块中的edit控件获得系统随机生成的码元序列,并绘制其相应的NRZ码型。为了更好地显示到整个码元波形,在坐标轴上有局部的调整。 max_y=max(y); min_y=min(y);
axis([0 10 min_y-0.1 max_y+0.1]);
16
将坐标轴纵轴显示范围调整到包含码元最大值和最小值。 绘制接收端码元波形程序:
global s_st1; global f_mx; for j=1:1000
s_mx(j)=s_st1(76+15*j); end
s_mx=sign(s_mx); s_mx=(s_mx+1)/2; s_mx1=s_mx(:,1:10); [y,t]=NRZ(mxs);
程序中将s_st1定为全局变量,从接收滤波器模块中获得向量s_st1。 global s_st1; s_st1=sts;
sts为接收滤波器中经过滤波后的波形,将其赋值给全局变量s_st1,传递到抽样判决模块。
图3.14 抽样判决设计图
在抽样判决模块中有误码个数的计算功能,可获得在不同信噪比(形成滤波器模块中)的情况下,误码的个数(共1000个码元)。
信噪比的获得通过get函数从形成滤波器模块中获得。 b=get(handles.radiobutton_noise,'value'); if b==1
a=str2num(get(handles.edit_noise,'string')); set(handles.edit_snr,'string',a);
17
else
set(handles.edit_snr,'string','b_noise'); end
mxs=str2num(get(handles.edit_xy,'String')); [y,t]=NRZ(mxs); axes(handles.axes_fs) plot(t,y);
max_y=max(y); min_y=min(y);
axis([0 10 min_y-0.1 max_y+0.1]); global s_st1; global f_mx; for j=1:1000
s_mx(j)=s_st1(76+15*j); end
s_mx=sign(s_mx); s_mx=(s_mx+1)/2; s_mx1=s_mx(:,1:10); [y,t]=NRZ(mxs); axes(handles.axes_js) plot(t,y);
max_y=max(y); min_y=min(y);
axis([0 10 min_y-0.1 max_y+0.1]);
在形成滤波器模块中选择无噪声时,“信噪比”位置显示“无噪声”;选择添加噪声时则显示相应的信噪比。误码的计算通过抽样之后的信号与信源信号比较获得。 k=0;
for i=1:1000
if (f_mx(i)-s_mx(i))>0.5 k=k+1; else end end
set(handles.edit_pe,'string',k);
最终将误码个数显示在误码edit控件中。 3.6.2 抽样判决模块实现效果
通过“抽样判决”菜单按键进入抽样判决模块,点击“PLOT”按键即可显示发送码元序列和接收码元序列。
在无噪声情况下抽样判决效果如图
18
图3.15 无噪声情况下抽样判决效果图
图中仅显示前10个码元波形,设计中共1000个码元。形成滤波器用的是滚降系数为0.5的平方根升余弦滤波器,无噪声加入,接收滤波器选用滚降系数为0.5的平方根升余弦滤波器。抽样判决后的码元序列与信源序列比较的到误码个数为0个码元。
在形成滤波器中加入噪声的情况下(信噪比为8db)抽样判决显示如下。
图3.16 有噪声情况下抽样判决效果图
19