编程语言
首页 > 编程语言> > 【数字信号调制】基于matlab GUI数字频带(ASK+PSK+QAM)调制仿真 【含Matlab源码 483期】

【数字信号调制】基于matlab GUI数字频带(ASK+PSK+QAM)调制仿真 【含Matlab源码 483期】

作者:互联网

一、简介

基于matlab GUI数字频带(ASK、PSK、QAM)调制仿真

二、源代码

function varargout = digital_modulation(varargin)
%DIGITAL_MODULATION 
%Author: leslieyao
%leslieyao2000@yahoo.com.cn
%Loja (Ecuador)
%For more information, visit: www.miniyao.cn
%Last Modified by GUIDE v2.5 25-Jan-2019 22:07:45

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @digital_modulation_OpeningFcn, ...
                   'gui_OutputFcn',  @digital_modulation_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 digital_modulation is made visible.
function digital_modulation_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 digital_modulation (see VARARGIN)
        hold off;
        axes(handles.axes1);
        h=[1 1 0 1 0 0 1 1 1 0];
        hold off;
        bit=[];
        for n=1:2:length(h)-1;
            if h(n)==0 & h(n+1)==1
                se=[zeros(1,50) ones(1,50)];
            elseif h(n)==0 & h(n+1)==0
                se=[zeros(1,50) zeros(1,50)];
            elseif h(n)==1 & h(n+1)==0
                se=[ones(1,50) zeros(1,50)];
            elseif h(n)==1 & h(n+1)==1
                se=[ones(1,50) ones(1,50)];
            end
            bit=[bit se];
        end
        plot(bit,'LineWidth',1.5);grid on;
        axis([0 500 -1.5 1.5]);
%*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
        axes(handles.axes3)
        hold off;
        fc=30;
        g=[1 1 0 1 0 0 1 1 1 0]; %modulante
        n=1;
    while n<=length(g)
        if g(n)==0
            tx=(n-1)*0.1:0.1/100:n*0.1;
            p=(1)*sin(2*pi*fc*tx);
            plot(tx,p,'LineWidth',1.5);grid on;
            hold on;
        else 
            tx=(n-1)*0.1:0.1/100:n*0.1;
            p=(2)*sin(2*pi*fc*tx);
            plot(tx,p,'LineWidth',1.5);grid on;
            hold on;
        end
            n=n+1;
            
    end

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

% Update handles structure
guidata(hObject, handles);

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


% --- Outputs from this function are returned to the command line.
function varargout = digital_modulation_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 random.
function random_Callback(hObject, eventdata, handles)
% hObject    handle to random (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
a=round(rand(1,10)); %genarar bits aleatorios
ran=[a(1),a(2),a(3),a(4),a(5),a(6),a(7),a(8),a(9),a(10)];
set(handles.bit1,'String',ran(1));
set(handles.bit2,'String',ran(2));
set(handles.bit3,'String',ran(3));
set(handles.bit4,'String',ran(4));
set(handles.bit5,'String',ran(5));
set(handles.bit6,'String',ran(6));
set(handles.bit7,'String',ran(7));
set(handles.bit8,'String',ran(8));
set(handles.bit9,'String',ran(9));
set(handles.bit10,'String',ran(10));

%*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
handles.bits=ran;

h=handles.bits;
axes(handles.axes1)
hold off;
bit=[];
for n=1:2:length(h)-1;
    if h(n)==0 & h(n+1)==1
        se=[zeros(1,50) ones(1,50)];
    elseif h(n)==0 & h(n+1)==0
        se=[zeros(1,50) zeros(1,50)];
    elseif h(n)==1 & h(n+1)==0
        se=[ones(1,50) zeros(1,50)];
    elseif h(n)==1 & h(n+1)==1
        se=[ones(1,50) ones(1,50)];
    end
   
    bit=[bit se];
end
plot(bit,'LineWidth',1.5);grid on;
axis([0 500 -1.5 1.5]);

%*-*-*-*-*-*-*-*-*-*-*-*-
hold off;
axes(handles.axes3);
cod=get(handles.select_mod,'Value');
switch cod
%*-*-*-*Modulation ASK*-*-*-*-*-*-*-*-*
    case 1
        hold off;
        axes(handles.axes3)
        fc=30;
        g=handles.bits; %modulante
        n=1;
    while n<=length(g)
        if g(n)==0
            tx=(n-1)*0.1:0.1/100:n*0.1;
            p=(1)*sin(2*pi*fc*tx);
            plot(tx,p,'LineWidth',1.5);grid on;
            hold on;
%    axis([0 n*2/fc -3 3]);
        else 
            tx=(n-1)*0.1:0.1/100:n*0.1;
            p=(2)*sin(2*pi*fc*tx);
            plot(tx,p,'LineWidth',1.5);grid on;
            hold on;
        end
            n=n+1;
    end
    
%*-*-*-*-*-*-*-Modulation OOK*-*-*-*-*-*-*-*-*-
    case 2
        hold off;
        axes(handles.axes3);
        t=0:0.001:1;
        m=1;
        fc=30;
        g=handles.bits; %modulante
        n=1;
        while n<=length(g)
            tx=(n-1)*1/length(g):0.001:n*1/length(g);
            p=(g(n))*sin(2*pi*fc*tx);
            plot(tx,p,'LineWidth',1.5);
            hold on;
            axis([0 (n)*1/length(g) -1.5 1.5]);
            grid on;
            n=n+1;
        end
%*-*-*-*-*-*-*-Modulation BPSK*-*-*-*-*-*-*-*-*-*-*-
    case 3
        axes(handles.axes3)
        hold off;
        g=handles.bits;
        fc=10;
        n=1;
    while n<=length(g)
        if g(n)==0 %0 is -1
            tx=(n-1)*0.1:0.1/100:n*0.1;
            p=(-1)*sin(2*pi*fc*tx);
            plot(tx,p,'LineWidth',1.5);grid on;
            hold on;
        else
            tx=(n-1)*0.1:0.1/100:n*0.1;
            p=(1)*sin(2*pi*fc*tx);
            plot(tx,p,'LineWidth',1.5);grid on;
            hold on;
        end
        n=n+1;
    end
    
%*-*-*-*-*-Modulation QPSK-*-*-*-*-*
    case 4
        axes(handles.axes3)
        hold off;
        g=handles.bits;
        t=0:2*pi/99:2*pi;
        cp=[];sp=[];
        mod=[];mod1=[];
        for n=1:2:9;
            if g(n)==0 & g(n+1)==1;
                die=sqrt(2)/2*ones(1,100);
                die1=-sqrt(2)/2*ones(1,100);
            elseif g(n)==0 & g(n+1)==0;
                die=-sqrt(2)/2*ones(1,100);
                die1=-sqrt(2)/2*ones(1,100);
            elseif g(n)==1 & g(n+1)==0;
                die=-sqrt(2)/2*ones(1,100);
                die1=sqrt(2)/2*ones(1,100);
            elseif g(n)==1 & g(n+1)==1;
                die=sqrt(2)/2*ones(1,100);
                die1=sqrt(2)/2*ones(1,100);
            end
        
            c=cos(t);
            s=sin(t);
            cp=[cp die];    %Amplitude cosino
            sp=[sp die1];   %Amplitude sino
            mod=[mod c];    %cosino carrier (Q)
            mod1=[mod1 s];  %sino carrier   (I)
        end
        bpsk=cp.*mod+sp.*mod1;
        plot(bpsk,'LineWidth',1.5);grid on;
        title('QPSK modulation')
        axis([0 500 -1.5 1.5]); 

%-*-*-*-*Modulation 8PSK*-*-*-*-*-*-*-
    case    5
        axes(handles.axes3)
        hold off;
        g=[handles.bits 0 0];
        t=0:2*pi/149:2*pi;
        cp=[];sp=[];
        mod=[];mod1=[];bit=[];
for n=1:3:length(g);
    if g(n)==0 & g(n+1)==1 & g(n+2)==1
        die=cos(pi/8)*ones(1,150);
        die1=sin(pi/8)*ones(1,150);
        se=[zeros(1,50) ones(1,50) ones(1,50)];
        
    elseif g(n)==0 & g(n+1)==1 & g(n+2)==0
        die=cos(3*pi/8)*ones(1,150);
        die1=sin(3*pi/8)*ones(1,150);
        se=[zeros(1,50) ones(1,50) zeros(1,50)];
        
    elseif g(n)==0 & g(n+1)==0  & g(n+2)==0
        die=cos(5*pi/8)*ones(1,150);
        die1=sin(5*pi/8)*ones(1,150);
        se=[zeros(1,50) zeros(1,50) zeros(1,50)];
        
    elseif g(n)==0 & g(n+1)==0  & g(n+2)==1
        die=cos(7*pi/8)*ones(1,150);
        die1=sin(7*pi/8)*ones(1,150);
        se=[zeros(1,50) zeros(1,50) ones(1,50)];
        
    elseif g(n)==1 & g(n+1)==0  & g(n+2)==1
        die=cos(-7*pi/8)*ones(1,150);
        die1=sin(-7*pi/8)*ones(1,150);
        se=[ones(1,50) zeros(1,50) ones(1,50)];
        
    elseif g(n)==1 & g(n+1)==0  & g(n+2)==0
        die=cos(-5*pi/8)*ones(1,150);
        die1=sin(-5*pi/8)*ones(1,150);
        se=[ones(1,50) zeros(1,50) zeros(1,50)];
        
    elseif g(n)==1 & g(n+1)==1  & g(n+2)==0
        die=cos(-3*pi/8)*ones(1,150);
        die1=sin(-3*pi/8)*ones(1,150);
        se=[ones(1,50) ones(1,50) zeros(1,50)];
        
    elseif g(n)==1 & g(n+1)==1  & g(n+2)==1
        die=cos(-pi/8)*ones(1,150);
        die1=sin(-pi/8)*ones(1,150);
        se=[ones(1,50) ones(1,50) ones(1,50)];
        
    end
    c=cos(t);
    s=sin(t);
    cp=[cp die];    %Amplitude cosino
    sp=[sp -die1];   %Amplitude sino
    mod=[mod c];    %cosino carrier (Q)
    mod1=[mod1 s];  %sino carrier   (I)
end

三、运行结果

在这里插入图片描述

四、备注

版本:2014a
完整代码或代写加1564658423

标签:PSK,...,modulation,gui,50,源码,digital,varargin,调制
来源: https://www.cnblogs.com/homeofmatlab/p/14944070.html