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. –