3.3 信源模块设计及实现
3.3.1 信源模块设计
基带传输系统中用到的信源有单极性归零码、单极性非归零码、双极性归零码、曼彻斯特码等[12]。
在信源模块中通过list box控件来实现各码型的选择选择某一码型则会在程序中生成相应的序号,将序号存为mxh变量,通过比较序号可得到选择的码型为哪一种再执行相应的程序。
图3.6 码型选择设计图
mxh=get(handles.listbox_mx,'Value');%获得码型序号,保存为mxh
信源数字信号从edit控件中读入,可有系统随机产生,也可由用户设定。
图3.7 提示输入随机序列效果图
将从edit中读取的字符串保存为mxs变量,经过相应的码型函数产生波形。可由系统随机生成一组序列,“随机信号”按键调用函数如下
function pushbutton_sj_Callback(hObject, eventdata, handles)
mx=round(rand(1,10)); %产生一组0、1随机序列 mx_string=num2str(mx);
set(handles.edit_xy,'string',mx_string); % 将产生的随机序列现实与edit控件中
“PLOT”按键实现绘图功能,将之前产生的随机序列绘制出相应的波形,显示与axes控件中。(函数见附录)功率谱显示与信号波形显示类似,不再重复介绍。 3.3.2 信源模块实现效果
进入信源模块,点击“随机信号”按键,即可显示一组由系统随机产生的序列。
图3.8 随机序列产生效果图
10
再点击“PLOT”按键,可实现信号波形及功率谱波形绘图
图3.9 波形及功率谱显示效果图
3.4 形成滤波器模块设计及实现
3.4.1 形成滤波器模块设计
形成滤波器位于信源与信道之间,在本设计中有理想低通滤波器、升余弦滤波器、平方根升余弦滤波器几种选择。
图3.10 形成滤波器选择设计图
滤波器选择同信源模块中码型选择类似,不再重复介绍。
在升余弦滤波器和平方根升余弦滤波器中有滚降系数?可调(范围0—1),此功能是由一下语句实现
a=str2num(get(handles.edit_a,'string'));
将?系数存为变量a,在之后的滤波器函数中使用,从而获得相应的滤波器冲击响应。
11
在这一模块中同样实现了眼图的仿真,可显示信源波形经过形成滤波器后的眼图,眼图的绘制于波形绘制不同,需要保持一段波形,将之后的一段波形重叠绘制,重复此操作多次才可看到较为清晰的眼图[13]。
“PLOT”按键中的call back函数中眼图部分如下 cla reset
ss=zeros(1,eye_num*N);
ttt=0:dt:eye_num*N*dt-dt; %眼图时间分量 for k=3:50
ss=st(k*N+1:(k+eye_num)*N); %st为经过滤波器的波形 drawnow; plot(ttt,ss); hold on; end;
由于眼图中使用了hold on保持图形这一语句,在绘制新的眼图时,原眼图依然在绘图窗口显示,因此在眼图绘制之前加入cla reset语句将之前眼图清除。
本模块中还包含了添加噪声的功能。噪声的选择由radio button控件实现。 b=get(handles.radiobutton_noise,'value');
选中该控件返回值为1,未选中控件返回值为0。再通过选择语句,选择执行加噪声或不加噪声。
加入噪声信号的信噪比也可由用户设置,由edit控件输入。 b_noise=str2num(get(handles.edit_noise,'string'));
信噪比保存为b_noise,在后面加入噪声的程序中使用。 mx_tou=str2num(get(handles.edit_xy,'string')); mx_tou=sign(mx_tou-0.5);
num_lb=get(handles.listbox_lb,'value'); a=str2num(get(handles.edit_a,'string')); b=get(handles.radiobutton_noise,'value');
b_noise=str2num(get(handles.edit_noise,'string')); global st; Ts=1; N=15;
t=-3*Ts:dt:3*Ts;
d=sign(randn(1,N_data-20)); d=[mx_tou,mx_tou,d]; assignin('base','f_mx',d); global f_mx; f_mx=(d+1)/2;
dd=sigexpand(d,N);
ht_rcos=sinc(t/Ts).*(cos(a*pi*t/Ts))./(1-4*a^2*t.^2/Ts^2+eps);
12
% ht_rcos=rcosine(1,15,a);
ht_rcos_sqrt=rcosine(1,15,'sqrt',a); switch(num_lb) case 1
ht=rcosine(1,15,'normal',0); case 2
ht=ht_rcos; case 3
ht=ht_rcos_sqrt; otherwise end;
st=conv(dd,ht);
tt=-3*Ts:dt:(N_data+3)*N*dt-dt; if b==1
st=awgn(st,b_noise); else end;
axes(handles.axes_lb1) plot(tt,st);
axis([0,40,min(st)-0.1,max(st)+0.1]); axes(handles.axes_lb2) cla reset
ss=zeros(1,eye_num*N); ttt=0:dt:eye_num*N*dt-dt; for k=3:50
ss=st(k*N+1:(k+eye_num)*N); drawnow; plot(ttt,ss); hold on; end;
3.4.2 形成滤波器模块实现效果
选择菜单栏“形成滤波器”按键进入该模块,选择升余弦滤波器,滚降系数设为0.5,选择不加噪声,绘制图形即可看到波形图以及眼图。
13
图3.11 形成滤波器滤波及眼图
选择加入噪声,设置信噪比为8db,可绘制加入噪声后的波形及眼图。
图3.12加噪声后波形及眼图
14