⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modelta2.asv

📁 Modulacion delta adaptable
💻 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 + -