基于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