📄 modelta2.asv
字号:
%__________________________________________________________________%
%________________Universidad Nacional de Ingenieria________________%
%__________________Sistemas de Comunicaciones II___________________%
%_____________________Modulacion Delta Adaptiva____________________%
%_____________Dise駉: Julio E. Rodriguez Selva 2003-18006__________%
function varargout = modelta2(varargin)
% Last Modified by GUIDE v2.5 30-Nov-2006 16:38:02
% ________________Inicializacion de codigo - NO EDITAR_____________%
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @modelta2_OpeningFcn, ...
'gui_OutputFcn', @modelta2_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin & isstr(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
% ______________Finalizacion de codigo inicial - NO EDITAR____________%
% --- Executes just before modelta2 is made visible.
function modelta2_OpeningFcn(hObject, eventdata, handles, varargin)
% Choose default command line output for modelta2
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% --- Outputs from this function are returned to the command line.
function varargout = modelta2_OutputFcn(hObject, eventdata, handles)
% Get default command line output from handles structure
varargout{1} = handles.output;
%__________________________________________________________________%
%__________________________________________________________________%
set(handles.boton6regresar,'CData',grafico1);
function detalles = grafico1
detalles = imread('pro5.jpg');
% --- Executes on button press in boton1.function boton1_Callback(hObject, eventdata, handles)
global t
global m
global mq
global eq
global delta
global codi
global scanal
global mqrecibida
global Yn
global Xn
global Xnfiltrada
popup_sel_index = get(handles.popsnr, 'Value');
switch popup_sel_index
case 1
snr=1;
case 2
snr=6;
case 3
snr=10;
case 4
snr=25;
case 5
snr=60;
case 6
snr=100;
end
f = 50;
ts=1/(f*300); %secuencia finita de muestras espaciadas Ts: periodo de muestreo
fs=1/ts; %frecuencia de muestreo
tfinal=0.125;
t=0:ts:tfinal;
m = (exp(-2*pi*5*t).*sin(2*pi*50*t)) + sin(2*pi*4*t); %m es la se馻l mensaje
%___________________Proceso modulacion de ADM_____________________%
% Para encontrar el tama駉 de paso(delta) optimo es necesario obtener
% el maximo valor de la razon de velocidad de cambio de la se馻l mensaje
% la razon de velocidad se obtiene derivando la se馻l mensaje.
% realizando la derivada
derm = (2*pi)*exp(-2*pi*5*t).*(50*cos(2*pi*50*t) - 5*sin(2*pi*50*t)) + 8*pi*cos(2*pi*4*t);
% calculando el modulo del vector derivada
for i = 1:length(derm),
if derm(i) < 0
modderm(i) = -derm(i);
else
modderm(i) = derm(i);
end
end
% calculando la maxima razon de cambio, el tama駉 de paso optimo inicial
delta(1) = ts*(max(modderm));
time = [1:fs/128];
% Se馻l a cuantizar
% e[n] = m[n] - mq[n-1] luego la cuantizacion de e[n] se obtiene
% eq[n] = delta(i)*sign(e[n])
% mq(n)= sumatoria de los eq, ademas de ser la salida cuantizada es el
% acumulador
% inicializando
e(1) = m(1);
eq(1)= delta(1)*sign(e(1));
mq(1)=eq(1);
% calculando el resto de diferencias entre la se馻l mensaje y la se馻l a la
% salida del acumulador.
for k = 2:length(m),
e(k) = m(k)-mq(k-1);
eq(k)= sign(e(k));
delta(k) = delta(k-1)*(1.5^(eq(k)*eq(k-1))); %me permite encontrar el delta(k) optimo
eq2(k) = delta(k)*eq(k); %se realiza operacion de delta(k)con la cuantizacion
mq(k) = mq(k-1)+eq2(k);
end
%Modulo de codificacion de linea NRZ unipolar
A = 5;
for j = 1:length(mq),
if eq(j) == 1
codi(j) = A;
bitsTx(j) = 1;
elseif eq(j) == -1
codi(j) = 0;
bitsTx(j) = 0;
else
codi(j) = 0;
bitsTx(j) = 0;
end
end
% ________________Se馻l pasando a traves de un Canal AWGN____________%
scanal = awgn(codi,snr);
%____________________Proceso de Demodulacion de ADM__________________%
% Codigo necesario para Regenerar o no regenerar la se馻l Tx una vez Rx.
popup_sel_index = get(handles.popregen, 'Value');
switch popup_sel_index
case 1
scanal = scanal;
case 2
for i=1:length(scanal),
if (scanal(i)>=-2.4) & (scanal(i)<=0.8)
scanal(i) = 0;
elseif (scanal(i)>=2.4) & (scanal(i)<=7.4)
scanal(i) = A;
else
scanal(i) = A;
end
end
end
%Estableciendo los bits en el receptor a partir de la se馻l Rx scanal
%a partir de los umbrales TTL de (0-0.4)0 logico de (2.4-5) 1 logico
for i=1:length(scanal),
if (scanal(i)>=-0.4) & (scanal(i)<=0.4)
bitsRx(i) = 0;
elseif (scanal(i)>=2.4) & (scanal(i)<=5)
bitsRx(i) = 1;
else
bitsRx(i) = 1;
end
end
% Decodificar la se馻l Recibida Scanal
mqrecibida = scanal/5;
% multiplicando la se馻l por los deltas(i)
Yn = mqrecibida.*delta;
% sumando para acumular y formar la se馻l mensaje
Xn(1) = Yn(1);
for k=2:length(m),
Xn(k) = Yn(k)+Xn(k-1);
end
% Filtrando la se馻l para recuperacion
[b,a] = butter(4,[200/(fs/2)],'low');
Xnfiltrada = filter(b,a,Xn);
axes(handles.grafico1)
cla;
plot(t,m); title('Se馻l Original y M Cuantizada'); hold on; plot(t,mq,'m'); grid on;
axes(handles.grafico2)
cla;
plot(time,codi(time),'r'); title('Se馻l Codificada y luego enviada por un canal AWGN'); hold on; plot(time,scanal(time)); grid on;
[Num,Rat] = biterr(bitsTx,bitsRx);
set(handles.cantidad, 'String', Num);
set(handles.razon, 'String', Rat);
% --- Executes on button press in boton2.function boton2_Callback(hObject, eventdata, handles)global t
global m
global mq
global eq
global delta
global codi
global scanalglobal mqrecibida
global Yn
global Xn
global Xnfiltrada
axes(handles.grafico1)
cla;
plot(t,m); title('Se馻l Original'); grid on;
axes(handles.grafico2)
cla;
plot(t,Xn); title('Se馻l Recuperada sin Filtrar'); grid on;
% --- Executes on button press in boton3.function boton3_Callback(hObject, eventdata, handles)global t
global m
global mq
global eq
global delta
global codi
global scanal
global mqrecibida
global Yn
global Xn
global Xnfiltrada
axes(handles.grafico1)
cla;
plot(t,m); title('Se馻l Original'); grid on;
axes(handles.grafico2)
cla;
plot(t,Xnfiltrada); title('Se馻l Recuperada Filtrada'); grid on;
% --- Executes on button press in boton4.function boton4_Callback(hObject, eventdata, handles)global t
global m
global mq
global eq
global delta
global codi
global scanal
global mqrecibida
global Yn
global Xn
global Xnfiltrada
axes(handles.grafico1)
cla;
axes(handles.grafico2)
cla;
h1 = eyediagram(codi,3);
title(' ');
h2 = eyediagram(scanal,3);
title(' ');
set(h1,'Name','Diagrama de ojo de la se馻l Tx');
set(h1,'position',[38, 318, 520, 238]);
set(h1,'Numbertitle','off');
set(h1,'menubar','none');
set(h2,'Name','Diagrama de ojo de la se馻l Rx');
set(h2,'position',[38, 78, 520, 238]);
set(h2,'Numbertitle','off');
set(h2,'menubar','none');
% --- Executes on button press in boton5.function boton5_Callback(hObject, eventdata, handles)global t
global m
global mq
global eq
global delta
global codi
global scanal
global mqrecibida
global Yn
global Xn
global Xnfiltrada
axes(handles.grafico1)
cla;
axes(handles.grafico2)
cla;
h1 = scatterplot(codi);
title(' '); grid on;
h2 = scatterplot(scanal);
title(' '); grid on;
set(h1,'Name','Diagrama de constelacion de la se馻l Tx');
set(h1,'position',[38, 318, 520, 238]);
set(h1,'Numbertitle','off');
set(h1,'menubar','none');
set(h2,'Name','Diagrama de constelacion de la se馻l Rx');
set(h2,'position',[38, 78, 520, 238]);
set(h2,'Numbertitle','off');
set(h2,'menubar','none');
% --- Executes on button press in boton6regresar.function boton6regresar_Callback(hObject, eventdata, handles)clear all
close all hidden
close all
proyectocom2
%____El codigo a continuacion corresponden a las funciones del los___%
%___________popmenu y de los textos estaticos NO SE EDITA____________%
% --- Executes during object creation, after setting all properties.function popsnr_CreateFcn(hObject, eventdata, handles)if ispc set(hObject,'BackgroundColor','white');else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));end% _____________ Executes on selection change in popsnr.________________%function popsnr_Callback(hObject, eventdata, handles)% ___ Executes during object creation, after setting all properties____%function razon_CreateFcn(hObject, eventdata, handles)function razon_Callback(hObject, eventdata, handles)% ___Executes during object creation, after setting all properties____%function cantidad_CreateFcn(hObject, eventdata, handles)function cantidad_Callback(hObject, eventdata, handles)% ___Executes during object creation, after setting all properties____%function popregen_CreateFcn(hObject, eventdata, handles)if ispc set(hObject,'BackgroundColor','white');else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));end% ______________Executes on selection change in popregen_____________%function popregen_Callback(hObject, eventdata, handles)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -