基本的数字基带信号
参考:通信原理
单极性不归零波形
gt1=ones(1,N_sample);
gt2=zeros(1,N_sample);
se1=[];
for i=1:N %码元数
if signal(i)==1
se1=[se1 gt1];
else
se1=[se1,gt2];
end
end
结果:
双极性不归零波形
gt1=ones(1,N_sample);
gt2=zeros(1,N_sample)-1;
se1=[];
for i=1:N
if signal(i)==1
se1=[se1 gt1];
else
se1=[se1,gt2];
end
end
结果:
单极性归零波形
gt1=[ones(1,N_sample/2),zeros(1,N_sample/2)];
gt2=zeros(1,N_sample);
se1=[];
for i=1:N
if signal(i)==1
se1=[se1 gt1];
else
se1=[se1,gt2];
end
end
结果:
双极性归零波形
gt1=[ones(1,N_sample/2),zeros(1,N_sample/2)];
gt2=[zeros(1,N_sample/2)-1,zeros(1,N_sample/2)];
se1=[];
for i=1:N
if signal(i)==1
se1=[se1 gt1];
else
se1=[se1,gt2];
end
end
差分波形
可消除设备初始状态影响。
解决载波相位模糊(相位调制)。
传号差分:输入为1时,编码波形相对于前一代码电平产生跳变;输入为0时,波形不产生跳变。
空号差分:输入为0时,编码波形相对于前一代码电平产生跳变;输入为1时,波形不产生跳变。
se1=[];
gt1=-ones(1,N_sample);
for i=1:N
if signal(i)==1
gt1=-gt1;
se1=[se1 gt1];
else
se1=[se1,gt1];
end
end
se1=[];
gt1=-ones(1,N_sample);
for i=1:N
if signal(i)==0
gt1=-gt1;
se1=[se1 gt1];
else
se1=[se1,gt1];
end
end
多进制波形
n=2;%进制
aa=reshape(signal,[n,length(signal)/n]);
aa=num2str(aa');
sig=[];
se1=[];
gt1=ones(1,N_sample);
for i=1:length(signal)/n
a=strrep(aa(i,:),' ','');%替代空格
a=bin2dec(a);%二进制-》十进制
sig=[sig,a];
se1=[se1,gt1*a-1.5];
end
N=length(signal)/n;
t=0:dt:(N*N_sample-1)*dt;%序列传输时间
set(app.TextArea_sig,'Value',num2str(uint8(sig)));
结果:
界面
输入的信号为ASCII码,转为对应的二进制数字,得到信号,然后显示在信号那个文本框里。
选择基带波形,当信号为偶数个时有多进制(4进制)的选项,为奇数个时没有。
点击开始后,会根据信号输出对应的基带波形。
总代码
classdef app_digitBaseSig < matlab.apps.AppBase
% Properties that correspond to app components
properties (Access = public)
UIFigure matlab.ui.Figure
ASCIIEditFieldLabel matlab.ui.control.Label
ASCIIEditField matlab.ui.control.EditField
UIAxes_sig matlab.ui.control.UIAxes
UIAxes_res matlab.ui.control.UIAxes
Label matlab.ui.control.Label
DropDown matlab.ui.control.DropDown
Button_start matlab.ui.control.Button
Label_2 matlab.ui.control.Label
TextArea_sig matlab.ui.control.TextArea
end
methods (Access = private)
% Value changed function: ASCIIEditField
function ASCIIEditFieldValueChanged(app, event)
value = app.ASCIIEditField.Value;
global signal;
n=length(value);%输入字符个数
signal1=dec2bin(value);
signal=[];
for i=1:n
for j=1:size(signal1,2)
signal=[signal,str2num(signal1(i,j))];
end
end
set(app.TextArea_sig,'Value',num2str(uint8(signal)));%显示码元
plot(app.UIAxes_sig,1:length(signal),signal,'b.');
ylim(app.UIAxes_sig,[-0.5,1.5]);
if mod(length(signal),2)~=0
set(app.DropDown,'Items',{'单极性(不归0)';'双极性(不归0)';'单极性归0';'双极性归0';'差分波形(传号)';'差分波形(空号)'});
else
set(app.DropDown,'Items',{'单极性(不归0)';'双极性(不归0)';'单极性归0';'双极性归0';'差分波形(传号)';'差分波形(空号)';'多进制波形(4进制)'})
end
end
% Button pushed function: Button_start
function Button_startPushed(app, event)
%%生成单个码元
global signal;
Ts=1;%码元周期
N_sample=128;%单个码元抽样点数
dt=Ts/N_sample;%抽样时间间隔
N=length(signal);%码元数
t=0:dt:(N*N_sample-1)*dt;%序列传输时间
method=get(app.DropDown,'Value');
if method=='1'%单极性不归0
gt1=ones(1,N_sample);
gt2=zeros(1,N_sample);
se1=[];
for i=1:N
if signal(i)==1
se1=[se1 gt1];
else
se1=[se1,gt2];
end
end
elseif method=='2'%双极性不归0
gt1=ones(1,N_sample);
gt2=zeros(1,N_sample)-1;
se1=[];
for i=1:N
if signal(i)==1
se1=[se1 gt1];
else
se1=[se1,gt2];
end
end
elseif method=='3'%单极性归0
gt1=[ones(1,N_sample/2),zeros(1,N_sample/2)];
gt2=zeros(1,N_sample);
se1=[];
for i=1:N
if signal(i)==1
se1=[se1 gt1];
else
se1=[se1,gt2];
end
end
elseif method=='4'%双极性归0
gt1=[ones(1,N_sample/2),zeros(1,N_sample/2)];
gt2=[zeros(1,N_sample/2)-1,zeros(1,N_sample/2)];
se1=[];
for i=1:N
if signal(i)==1
se1=[se1 gt1];
else
se1=[se1,gt2];
end
end
elseif method=='5'%传号差分
se1=[];
gt1=-ones(1,N_sample);
for i=1:N
if signal(i)==1
gt1=-gt1;
se1=[se1 gt1];
else
se1=[se1,gt1];
end
end
elseif method=='6'%空号差分
se1=[];
gt1=-ones(1,N_sample);
for i=1:N
if signal(i)==0
gt1=-gt1;
se1=[se1 gt1];
else
se1=[se1,gt1];
end
end
else %4进制
n=2;%进制
aa=reshape(signal,[n,length(signal)/n]);
aa=num2str(aa');
sig=[];
se1=[];
gt1=ones(1,N_sample);
for i=1:length(signal)/n
a=strrep(aa(i,:),' ','');%替代空格
a=bin2dec(a);%二进制-》十进制
sig=[sig,a];
se1=[se1,gt1*a-1.5];
end
N=length(signal)/n;
t=0:dt:(N*N_sample-1)*dt;%序列传输时间
set(app.TextArea_sig,'Value',num2str(uint8(sig)));
end
plot(app.UIAxes_res,t,se1);
end
end
% App initialization and construction
methods (Access = private)
% Create UIFigure and components
function createComponents(app)
% Create UIFigure
app.UIFigure = uifigure;
app.UIFigure.Position = [100 100 640 480];
app.UIFigure.Name = 'UI Figure';
% Create ASCIIEditFieldLabel
app.ASCIIEditFieldLabel = uilabel(app.UIFigure);
app.ASCIIEditFieldLabel.HorizontalAlignment = 'right';
app.ASCIIEditFieldLabel.FontSize = 8;
app.ASCIIEditFieldLabel.Position = [15 439 98 22];
app.ASCIIEditFieldLabel.Text = '输入信号(ASCII码)';
% Create ASCIIEditField
app.ASCIIEditField = uieditfield(app.UIFigure, 'text');
app.ASCIIEditField.ValueChangedFcn = createCallbackFcn(app, @ASCIIEditFieldValueChanged, true);
app.ASCIIEditField.FontSize = 8;
app.ASCIIEditField.Position = [128 439 100 22];
% Create UIAxes_sig
app.UIAxes_sig = uiaxes(app.UIFigure);
title(app.UIAxes_sig, '信号序列')
xlabel(app.UIAxes_sig, 't')
ylabel(app.UIAxes_sig, 'Y')
app.UIAxes_sig.PlotBoxAspectRatio = [1 0.221448467966574 0.221448467966574];
app.UIAxes_sig.TitleFontWeight = 'bold';
app.UIAxes_sig.Position = [1 199 625 186];
% Create UIAxes_res
app.UIAxes_res = uiaxes(app.UIFigure);
title(app.UIAxes_res, '基带信号')
xlabel(app.UIAxes_res, 't')
ylabel(app.UIAxes_res, 'Y')
app.UIAxes_res.PlotBoxAspectRatio = [1 0.221448467966574 0.221448467966574];
app.UIAxes_res.TitleFontWeight = 'bold';
app.UIAxes_res.Position = [1 1 625 185];
% Create Label
app.Label = uilabel(app.UIFigure);
app.Label.HorizontalAlignment = 'right';
app.Label.Position = [245 439 77 22];
app.Label.Text = '数字基带信号';
% Create DropDown
app.DropDown = uidropdown(app.UIFigure);
app.DropDown.Items = {'单极性(不归0)', '双极性(不归0)', '单极性归0', '双极性归0', '差分波形(传号)', '差分波形(空号)', '多进制波形(4进制)'};
app.DropDown.ItemsData = {'1', '2', '3', '4', '5', '6', '7'};
app.DropDown.Position = [337 439 100 22];
app.DropDown.Value = '1';
% Create Button_start
app.Button_start = uibutton(app.UIFigure, 'push');
app.Button_start.ButtonPushedFcn = createCallbackFcn(app, @Button_startPushed, true);
app.Button_start.Position = [526 436 100 25];
app.Button_start.Text = '开始';
% Create Label_2
app.Label_2 = uilabel(app.UIFigure);
app.Label_2.HorizontalAlignment = 'right';
app.Label_2.Position = [51 402 29 22];
app.Label_2.Text = '信号';
% Create TextArea_sig
app.TextArea_sig = uitextarea(app.UIFigure);
app.TextArea_sig.Editable = 'off';
app.TextArea_sig.Position = [95 401 531 24];
end
end
methods (Access = public)
% Construct app
function app = app_digitBaseSig
% Create and configure components
createComponents(app)
% Register the app with App Designer
registerApp(app, app.UIFigure)
if nargout == 0
clear app
end
end
% Code that executes before app deletion
function delete(app)
% Delete UIFigure when app is deleted
delete(app.UIFigure)
end
end
end
初学者,请多多指教!如有错误,请指出。