ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-07-04 17:00:59  阅读:387  来源: 互联网

标签:PSK GUI 基带 SYSTEM hObject handles Matlab gui 程序代码


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

标签:PSK,GUI,基带,SYSTEM,hObject,handles,Matlab,gui,程序代码
来源: https://blog.csdn.net/ritian27/article/details/118463903

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有