机器学习

基于Matlab/GUI的频带调制系统仿真【附Matlab程序代码】

本文主要是介绍基于Matlab/GUI的频带调制系统仿真【附Matlab程序代码】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

随着通信系统复杂性的增加,传统的手工分析与电路板试验等分析设计方法已经不能适应发展的需要,通信系统计算机模拟仿真技术日益显示出其巨大的优越性。计算机仿真是根据被研究的真实系统的模型,利用计算机进行实验研究的一种方法.它具有利用模型进行仿真的一系列优点,如费用低,易于进行真实系统难于实现的各种试验,以及易于实现完全相同条件下的重复试验等。Matlab仿真软件就是分析通信系统常用的工具之一。

Matlab是一种交互式的、以矩阵为基础的软件开发环境,它用于科学和工程的计算与可视化。Matlab的编程功能简单,并且很容易扩展和创造新的命令与函数。应用Matlab可方便地解决复杂数值计算问题。Matlab具有强大的Simulink动态仿真环境,可以实现可视化建模和多工作环境间文件互用和数据交换。Simulink支持连续、离散及两者混合的线性和非线性系统,也支持多种采样速率的多速率系统,Simulink为用户提供了用方框图进行建模的图形接口,它与传统的仿真软件包用差分方程和微分方程建模相比,更直观、方便和灵活。用户可以在Matlab和Simulink两种环境下对自己的模型进行仿真、分析和修改。用于实现通信仿真的通信工具包(Communication toolbox,也叫Commlib,通信工具箱)是Matlab语言中的一个科学性工具包,提供通信领域中计算、研究模拟发展、系统设计和分析的功能,可以在Matlab环境下独立使用,也可以配合Simulink使用。另外,Matlab的图形界面功能GUI(Graphical User Interface)能为仿真系统生成一个人机交互界面,便于仿真系统的操作。因此,Matlab在通信系统仿真中得到了广泛应用,本文也选用该工具对数字调制系统进行仿真。

在数字基带传输系统中,为了使数字基带信号能够在信道中传输,要求信道应具有低通形式的传输特性。然而,在实际信道中,大多数信道具有带通传输特性,数字基带信号不能直接在这种带通传输特性的信道中传输。必须用数字基带信号对载波进行调制,产生各种已调数字信号。数字调制系统的基本结构图如下图所示。

  数字调制系统的基本结构图

数字调制与模拟调制原理是相同的,一般可以采用模拟调制的方法实现数字调制。但是,数字基带信号具有与模拟基带信号不同的特点,其取值是有限的离散状态。这样,可以用载波的某些离散状态来表示数字基带信号的离散状态。基本的三种数字调制方式是:振幅键控(ASK)、移频键控(FSK)和移相键控(PSK 或DPSK)。

振幅键控是正弦载波的幅度随数字基带信号而变化的数字调制。当数字基带信号为二进制时,则为二进制振幅键控(2ASK)。 设发送的二进制符号序列由“0”,“1”序列组成,发送“0”符号的概率为P,发送“1”符号的概率为1-P,且相互独立。

在二进制数字调制中,若正弦载波的频率随二进制基带信号在和两个频率点间变化,则产生二进制移频键控信号(2FSK信号)。二进制移频键控信号的时间波形如图中波形g可分解为波形e和波形f,即二进制移频键控信号可以看成是两个不同载波的二进制振幅键控信号的叠加。

二进制移相键控,简记为2PSK或BPSK。2PSK信号码元的“0”和“1”分别用两个不同的初始相位“0”和“”来表示,而其振幅和频率保持不变。

function varargout = PSK_SYSTEM(varargin)
% PSK_SYSTEM MATLAB code for PSK_SYSTEM.fig
%      PSK_SYSTEM, by itself, creates a new PSK_SYSTEM or raises the existing
%      singleton*.
%
%      H = PSK_SYSTEM returns the handle to a new PSK_SYSTEM or the handle to
%      the existing singleton*.
%
%      PSK_SYSTEM('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in PSK_SYSTEM.M with the given input arguments.
%
%      PSK_SYSTEM('Property','Value',...) creates a new PSK_SYSTEM or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before PSK_SYSTEM_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to PSK_SYSTEM_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
 
 

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @PSK_SYSTEM_OpeningFcn, ...
                   'gui_OutputFcn',  @PSK_SYSTEM_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before PSK_SYSTEM is made visible.
function PSK_SYSTEM_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to PSK_SYSTEM (see VARARGIN)

% Choose default command line output for PSK_SYSTEM
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes PSK_SYSTEM wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = PSK_SYSTEM_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in radiobutton1.
function radiobutton1_Callback(hObject, eventdata, handles)
% hObject    handle to radiobutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of radiobutton1
set(handles.radiobutton1,'value',1);
set(handles.radiobutton2,'value',0);

% --- Executes on button press in radiobutton2.
function radiobutton2_Callback(hObject, eventdata, handles)
% hObject    handle to radiobutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of radiobutton2
set(handles.radiobutton1,'value',0);
set(handles.radiobutton2,'value',1);

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
i=10;
j=5000; 
fc=4;%载波频率 
fm=i/5;%码元速率
B=2*fm;
t=linspace(0,5,j); 
%% 产生基带信号 
a=round(rand(1,i));%随机序列,基带信号
% figure(3);
% stem(a);
st1=t;
for n=1:10 
if a(n)<1;
 for m=j/i*(n-1)+1:j/i*n
     st1(m)=0; 
end 
end
end
axes(handles.axes1) 
plot(t,st1);
title('基带信号');
axis([0,5,-0.2,1.2]);
%基带信号求反 
%由于PSK中的是双极性信号,因此对上面所求单极性信号取反来与之一起构成双极性码 
st2=t; 
for k=1:j
if st1(k)>=1  
st2(k)=0;   
else  
st2(k)=1; 
end
end; 
axes(handles.axes2)
st3=st1-st2; 
plot(t,st3); 
title('双极性基带信号');
axis([0,5,-1.2,1.2]); 
%载波信号
s1=sin(2*pi*fc*t);
axes(handles.axes3)
plot(s1); 
ylim([-1.2 1.2])
title('载波信号');

%% 调制
e_psk=st3.*s1;
axes(handles.axes4)
plot(t,e_psk); 
ylim([-1.5 1.5])
title('调制信号(PSK)');
noise=rand(1,j);
psk=e_psk+noise;%加入噪声
axes(handles.axes5)
plot(t,psk); 
ylim([-1.5 2.5])
title('加噪后波形'); 


%% 相干解调
axes(handles.axes6)
psk=psk.*s1;%与载波相乘 
plot(t,psk);
ylim([-2.2 2.2])
title('相干解调(PSK)');
[f,af] = T2F(t,psk);%%%%%%%%%%%通过低通滤波器
[t,psk] = lpf(f,af,B);
axes(handles.axes7)
plot(t,psk);
ylim([-1.2 1.2])
title('低通滤波后波形');
%抽样判决
for m=0:i-1;
if psk(1,m*500+250)<0;
for j=m*500+1:(m+1)*500;
     psk(1,j)=0;
end
else 
for j=m*500+1:(m+1)*500;
    psk(1,j)=1;
end
end 
end 
axes(handles.axes8)
plot(t,psk);
axis([0,5,-0.2,1.2]);
title('抽样判决后波形') 

———————————————————————————————————————————

欢迎交流学习,联系方式:Q 2461567431

这篇关于基于Matlab/GUI的频带调制系统仿真【附Matlab程序代码】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!