No BSD License  

Highlights from
MU-Law Compendor

from MU-Law Compendor by Jawad Khalid
This file does the mu law thing.

ja.m
% Removing all variables, functions, and MEX-files from memory, leaving the
% workspace empty.
clear all


% Deleting all figures whose handles are not hidden.
close all


% Deleting all figures including those with hidden handles.
close all hidden


% Clearing all input and output from the Command Window display giving us a clean screen.
clc


% Opening the file 'TEOTH.mp3' in the read access mode.
fid = fopen ('TEOTH.mp3','r');


% Generating the input signal 'm(t)' by reading the binary data in 16 bit
% integer format from the specified file and writing it into a matrix
% 'm(t)'.
m = fread (fid,'int16');


% Defining the count for efficiency.
count = 8500;


% Calculating maximum value of the input signal 'm(t)'.
Mp = max (m)


% Setting number of bits in a symbol.
bits = 8;


% Defining the number of levels of uniform quantization.
levels = 2^bits;


% Calculating the step size of the quantization.
step_size = (2*Mp)/levels


% Setting the sampling frequency.
% because the audio signal has a maximum frequency of 4K and according to
% Nyquist criteria, we get the following sampling frequency.
Fs = 8000;


% Setting the sampling instant.
Ts = 1;


% Setting the number of samples to be used.
No_Samples = (2*Fs)+Ts;


% Define the time vector for the calculations.
time = [1:Fs/64];


% Calculating the bit rate.
bit_rate = 8000*bits;


% Using a 15 segment approximation to 8 bits (256 levels).
mu = 255;
denom = (2.3*log(1 + mu))^2;


% Compressing the input signal 'm(t)' using mu-law.
signS = sign(m);
for k = 1:count,
    s_comp(k) = Mp * signS(k)*log(1+(mu*abs(m(k))/Mp))/denom;
end


% Uniformly quantizing the input signal 'm(t)'.
for k = 1:count,
    samp_in(k) = s_comp(k*Ts);
    quant_in(k) = samp_in(k)/step_size;
    error(k) = (samp_in(k) - quant_in(k))/No_Samples;
end


% Indicating the sign of the input signal 'm(t)' and calculating the
% quantized signal 'quant_out'.
signS = sign(s_comp);
quant_out = quant_in;
for i = 1:count,
    S(i) = abs (quant_in(i)) + 0.5;
    quant_out(i) = signS(i)*round(S(i))*step_size;
end


% Decompressing the output signal.
Signy = sign(quant_out);
s_out = Signy .* ((exp(quant_out.*denom .* Signy/Mp) - 1))*(Mp/mu);


% Calculating the quantization noise 'Nq'.
Nq = (((step_size)^2)/12)


% Calculating signal to noise ratio 'SNR'.
SNR = 3*(levels^2)/denom
SNR_db = 10*log10(SNR)


% Plotting the input signal 'm(t)'.
%figure;
subplot(4,1,1);
plot(time,m(time));
title('Message Signal');
xlabel('Time');
ylabel('m(t)');
grid on;


% Plotting the quantized signal 'quant_in(t)'.
%figure;
subplot(4,1,2);
stem(time,quant_in(time),'r');
title('Quantized Speech Signal');
xlabel('Time');
ylabel('Levels');
grid on;


% Plotting the Compressed signal 's_out(t)'.
%figure;
subplot(4,1,3);
plot(time,quant_out(time));
title('Mu-law Decompressed Speech Signal');
xlabel('Time');
ylabel('Decompressed Signal');
grid on;


% Plotting the error signal 'error(t)'.
subplot(4,1,4);
plot(time,error(time));
title('Error Signal');
xlabel('Time');
ylabel('Error(t)');
grid on;


% Removing all variables, functions, and MEX-files from memory, leaving the
% workspace empty.
clear all

Contact us at files@mathworks.com