0% encontró este documento útil (0 votos)
79 vistas8 páginas

10 7 6CM11

MODULACION DIGITAL IPN ESIME

Cargado por

Agustin Camacho
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
79 vistas8 páginas

10 7 6CM11

MODULACION DIGITAL IPN ESIME

Cargado por

Agustin Camacho
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

INSTITUTO POLITÉCNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERÍA


MECÁNICA Y ELÉCTRICA
UNIDAD CULHUACAN
Ingeniería en Computación

Asignatura: Modulación Digital

Profesor: Dr. Clara Cruz Ramos

Práctica No.7: Recuantizar una señal de voz

Equipo No. 10

Alumnos:
Camacho Suárez Agustín
Del Ángel Ruíz Jesús Roberto

Grupo: 6CM11

Fecha de Entrega: 30 de abril del 2018


Objetivo. –
 Recuantizar señal de voz a diferentes bits de muestra para observar el
cambio entre cada una de las graficas y su sonido, mediante el uso de la
plataforma MATLAB.

Desarrollo. –
El programa debe ser diseñado de tal forma que se puedan cambiar los números
de bits a recuantizar la señal de voz mediante el código y que al final mande el
código binario de la señal recuantizada a un bloc de notas para su futura
visualización.
Programa
function varargout = MODU7(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Practica4_OpeningFcn, ...
'gui_OutputFcn', @Practica4_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 Practica4_OpeningFcn(hObject, eventdata, handles, varargin)


handles.output = hObject;
guidata(hObject, handles);

function varargout = Practica4_OutputFcn(hObject, eventdata, handles)


varargout{1} = handles.output;

global y fs z nqq code

BITS= 3; %bits por muestreo


n = BITS-1; %sin bit de signo
fs=44100; %Frecuencia de muestreo
original=audiorecorder(fs,16,1); %graba con una señal fs, a 16 bits y en
canal mono
recordblocking(original,2); %graba y se para en el tiempo seleccionado
modificada=getaudiodata(original, 'single'); %obtiene datos de la señal
y=modificada;
vmax= max(y);%Obtiene voltaje maximo positivo
vmin= min(y);%Obtiene voltaje minimo negativo
DR = 2^n-1; %Obitenes rango dinamico
vector=[];
s = DR;
for i = 1 : ((2*DR)+2)
if i == DR+1 || i == DR+2
vector(i) = 0;
s = 1;
elseif i < DR
vector(i) = s;
s = s - 1;
else
vector(i) = s;
s = s + 1;
end

end
nq = dec2bin(vector,n);
vq = [];
for i = 1 : ((2*DR)+2)
if i <= (DR+1)
vq(i) = vector(i)*(vmax/DR);
else
vq(i) = (vector(i)*(vmax/DR))*(-1);
end
end
rango = [;];
for i = 1 : ((2*DR)+2)
if vq(i) == 0 && vq(i+1) == 0
rango(i,1) = 0;
rango(i,2) = vq(i)+((vmax/DR)/2);
elseif vq(i) == 0 && vq(i+1) ~= 0
rango(i,2) = 0;
rango(i,1) = vq(i)-((vmax/DR)/2);
else
rango(i,1) = vq(i)- ((vmax/DR)/2);
rango(i,2) = vq(i)+((vmax/DR)/2);
end
end
z = [];
nqq = char([;]);
code=fopen('BINARIO.txt','wt');
for i = 1 : 88200
for j = 1 : ((2^n)*2)
if y(i)<=rango(j,2)
if y(i)>rango(j,1)
z(i) = vq(j);
nqq(i,:)= nq(j,:);
if vq(j)<0
fprintf(code,'1%s\n',nqq(i,:));
elseif vq(j)==0 && vq(j+1)== 0
fprintf(code,'1%s\n',nqq(i,:));
else
fprintf(code,'0%s\n',nqq(i,:));
end
end
end
end
end

axes(handles.axes1);
plot(y)
title('AUDIO ORIGINAL')
axes(handles.axes2);
plot(z)
title('AUDIO CUANTIZADO')

% --- Executes on button press in repo.


function repo_Callback(hObject, eventdata, handles) %FUNCION DE BOTON
PARA SONIDO ORIGINAL
global y fs
sound(y,fs)

% --- Executes on button press in reppcm.


function reppcm_Callback(hObject, eventdata, handles) %FUNCION DE BOTON
PARA SONIDO CUANTIZADO
global z fs
sound(z,fs)

% --- Executes on button press in BINARY.


function BINARY_Callback(hObject, eventdata, handles) %FUNCION DE BOTON
QUE ABRE TXT CON CODIGO BINARIO
global code
code=fopen('BINARIO.txt');
winopen('BINARIO.txt')

Pruebas y Resultados. –
Primera prueba (peor de los casos)
Numero de bits= 2 bits por muestra con signo
Se puede ver que cuando se ocupan solo 2 bits hay mucha perdida de
información, por lo tanto, se nota distorsión al momento de reproducir el audio
modificado. Se ve que, en el audio cuantizado, la señal se ve mas cuadrada, esto
debido a que se normaliza conforme al programa.
Parte del código binario en bloc de notas:

Se puede ver efectivamente como solamente ocupa 2 bits (incluyendo el signo)


para cuantizar el audio.
Segunda prueba
Numero de bits= 5 bits por muestra con signo

Como ya se ocupan mas bits por muestra, se nota menos perdida de información
y mas parecida a la señal original.
Parte del código binario en bloc de notas:

Se puede ver efectivamente como solamente ocupa 5 bits (incluyendo el signo)


para cuantizar el audio.
Tercera prueba (mejor de los casos)
Numero de bits= 5 bits por muestra con signo

Como se ocupan mas bits por muestra, la señal cuantizada se ve igual que la
original, por lo tanto, se dice que aquí hay casi no hay perdida de información.
Parte del código binario en bloc de notas:

Se puede ver efectivamente como solamente ocupa 8 bits (incluyendo el signo)


para cuantizar el audio.
Conclusiones. –

También podría gustarte