数字信号调制基于matlab GUI 2ASK+2FSK+2PSK调制解调仿真含Matlab源码 1504期
Posted 紫极神光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字信号调制基于matlab GUI 2ASK+2FSK+2PSK调制解调仿真含Matlab源码 1504期相关的知识,希望对你有一定的参考价值。
一、数字信号调制系统简介
二进制数字信号调制原理
数字调制是指用数字基带信号对载波的某些参量进行控制, 使载波的这些参量随基带信号的变化而变化。在通信系统中, 作为载波的正弦波有幅度、频率和相位3个参数, 对应的也就有3种基本的调制方式:调幅、调频和调相。由于数字信号不同与模拟信号的特殊性, 在数字载波通信中, 这3种基本的调制方式分别被称为幅移 (ASK) 、频移键控 (FSK) 和相移键控 (PSK) 。调制信号是二进制数字基带信号时, 这种调制称为二进制数字调制。在二进制数字调制中, 载波的幅度、频率和相位只有两种变化方式。
1 ASK调制
振幅键控是利用载波的幅度变化来传递数字信息, 而其频率和初相位保持不变。二进制幅度键控 (2ASK) 方式是数字调制方式中出现最早也是最简单的一种方法。这种方法最初用于电报系统, 二进制振幅键控常常作为研究其它数字调制方式的基础。2ASK调制信号只有0或1两个电平相乘的, 结果相当于将载频或者关断, 或者接通, 它的实际意义是当调制的数字信号为“1”时, 传输载波;当调制的数字信号为“0”时, 不传输载波。
2ASK信号的一般表达式为:
其中
2 FSK调制
频移键控是利用载波的频率变化来传递数字信息。在2FSK中, 载波的频率随二进制基带信号在f1和f0的两个频率点变化。它的实际意义是当调制的数字信号为“1”或“0”时传输f1或f2频率的载波。
其中ω1=2nf1, ω0=2nf0, θn为频率为f1的载波的初始相位, φn为频率为f0的载波的初始相位。令 为Dn的反码, 即
则2FSK信号可表示为:
3 PSK调制
相移键控是利用载波的相位变化来传递数字信息, 而振幅和频率保持不变。PSK调制时, 载波的相位随调制信号状态不同而改变。如果两个频率相同的载波同时开始振荡, 这两个频率同时达到正最大值, 同时达到零值, 同时达到负最大值, 此时它们就处于“同相”状态;如果一个达到正最大值时, 另一个达到负最大值, 则称为“反相”。一般把信号振荡一次 (一周) 作为360度。如果一个波比另一个波相差半个周期, 我们说两个波的相位差180度, 也就是反相。当传输数字信号时, “1”码控制发0度相位, “0”码控制发180度相位。相移键控有很好的抗干扰性, 在有衰落的信道中也能获得很好的效果。
二、部分源代码
%=============通信原理课程设计==============%
function varargout = Login(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Login_OpeningFcn, ...
'gui_OutputFcn', @Login_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
function Login_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
global user_flag;
global lock_flag;
user_flag=0;
lock_flag=0;
user=imread('user.jpg');
user=imresize(user,[50,50],'bilinear');
set(handles.USER,'CDATA',user);
lock=imread('Lock.jpg');
lock=imresize(lock,[50,50],'bilinear');
set(handles.LOCK,'CDATA',lock);
login=imread('login.jpg');
set(handles.Login,'CDATA',login);
function varargout = Login_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function Login_Callback(hObject, eventdata, handles)
global user_flag;
global lock_flag;
if user_flag~=1 && lock_flag==1
errordlg('请输入学号','提示','modal')
end
if user_flag==1 && lock_flag~=1
errordlg('请输入密码','提示','modal')
end
if user_flag~=1 && lock_flag~=1
errordlg('请输入学号和密码','提示','modal')
end
if user_flag==1 && lock_flag==1
run('Serein.m');
close(Login);
end
function figure1_CreateFcn(hObject, eventdata, handles)
Background=axes('units','normalized','pos',[0 0 1 1]);
uistack(Background,'down');
img=imread('Log.jpg');
image(img);
colormap gray
set(Background,'handlevisibility','off','visible','off');
function Login_CreateFcn(hObject, eventdata, handles)
%用户名输入
function UserInput_Callback(hObject, eventdata, handles)
global user_flag;
ID=get(hObject,'String');
if (str2num(ID)~=0)
user_flag=1;
end
function UserInput_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function uipanel2_CreateFcn(hObject, eventdata, handles)
function axes1_CreateFcn(hObject, eventdata, handles)
function axes3_CreateFcn(hObject, eventdata, handles)
function LockInput_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
%密码输入
function LockInput_Callback(hObject, eventdata, handles)
global lock_flag;
password=get(hObject,'String');
if (str2num(password)~=0)
lock_flag=1;
end
function axes4_CreateFcn(hObject, eventdata, handles)
function axes5_CreateFcn(hObject, eventdata, handles)
function USER_Callback(hObject, eventdata, handles)
function LOCK_Callback(hObject, eventdata, handles)
function [Output] = PSK_Chart(SNR,PERIOD)
i=10;
j=5000;
t=linspace(0,5,j);
fc=10;
fm=i/5;
B=2*fm;
error=0; %存取错误码元的个数
for echo=1:1:PERIOD %一共循环echo个周期
a=round(rand(1,i));
st1=t;
for n=1:10
if a(n)<1
for m=j/i*(n-1)+1:j/i*n
st1(m)=0;
end
else
for m=j/i*(n-1)+1:j/i*n
st1(m)=1;
end
end
end
figure(1);
subplot(421);
plot(t,st1);
title('二进制基带信号');
axis([0,5,-1,2]);
%二进制基带信号求反
st2=t;
for k=1:j
if st1(k)>=1
st2(k)=0;
else
st2(k)=1;
end
end
st3=st1-st2;
subplot(422);
plot(t,st3);
title('双极性基带信号');
axis([0,5,-2,2]);
%产生载波信号
s1=sin(2*pi*fc*t);
subplot(423);
plot(s1);
title('载波信号');
%2PSK调制
e_psk=st3.*s1;
subplot(424);
plot(t,e_psk);
title('2PSK调制信号');
%高斯白噪声
psk=awgn(e_psk,SNR);
subplot(425);
plot(t,psk);
title('加噪后信号');
%带通滤波器
[b1,a1]=ellip(4,0.11,30,[9,11]*2/40);
psk=filter(b1,a1,psk);
psk=psk.*s1;
subplot(426);
plot(t,psk);
title('与载波相乘后信号');
[B,A]=butter(4,0.14);
psk=filter(B,A,psk);
subplot(427);
plot(t,psk);
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
for k=1:1:5000
if st1(k)~=psk(k)
error=error+1;
end
end
subplot(428);
plot(t,psk);
axis([0,5,-1,2]);
title('抽样判决后波形');
end
error_rate=error/500/(10*PERIOD); %计算误码率
Output=error/500;
end
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.
[4]曾祥龙,梁清梅,索丽敏.运用MATLAB实现对数字信号调制的仿真[J].黑龙江科技信息. 2009,(32)
以上是关于数字信号调制基于matlab GUI 2ASK+2FSK+2PSK调制解调仿真含Matlab源码 1504期的主要内容,如果未能解决你的问题,请参考以下文章
数字信号调制基于matlab GUI数字信号调制系统含Matlab源码 052期
数字信号调制基于matlab GUI AM调制系统含Matlab源码 2083期
数字信号调制基于matlab GUI AM调制系统含Matlab源码 2083期
数字信号调制基于matlab GUI数字信号调制系统含Matlab源码 1030期