Implementación de Cuantificación y Codificación PCM en MATLAB

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 2,46 KB

Práctica 3

Procesamiento y Cuantificación de Señales

Cuantificador

function k = cu(x,xmin,xmax,R)
    M   = 2^R; 
    Dlt = (xmax-xmin)/M;           
    k   = floor((x-xmin)/Dlt);      
    ksn = k<0;                         
    ksp = k>M-1;                            
    kss = not(or(ksn,ksp));            
    k   = uint32( 0*ksn + (M-1)*ksp + k.*kss );  
end

Decuantificador

function y = du(k,xmin,xmax,R)
    M   = 2^R;
    Dlt = (xmax-xmin)/M;   
    y   = (double(k)+0.5) * Dlt + xmin; 
end

Programa para Analizar la Distorsión de CU

[x,fs] = audioread('vt1.wav'); % Lee la secuencia del fichero WAVE
k = cu(x,-1,1,6); % Cuantifica la secuencia x
y = du(k,-1,1,6); % Decuantifica los índices k
sound(y,fs); % Reproduce la secuencia decuantificada

Codificación y Decodificación PCM

CodPCM

function f = codPCM(x,R,fi)
    N = length(x);
    fid = fopen(fi,'w'); % Abre fichero en modo escritura
    count = fwrite(fid,R,'ubit4'); % Escribe R en el fichero.
    count = fwrite(fid,N,'ubit32'); % Escribe N en el fichero.
    k = cu(x,-1,1,R); % Cuantifica la secuencia x
    dt = ['ubit' num2str(R)]; % Crea cadena de caracteres.
    count = fwrite(fid, k ,dt ); % Escribe k en el fichero.
    fclose(fid); % Cierra el fichero.
end

DecodPCM

function [y] = decPCM(fi)
    fid = fopen(fi,'r'); % Abre fichero en modo lectura
    R = fread(fid,1,'ubit4'); % Lee R en el fichero.
    N = fread(fid,1,'ubit32'); % Lee N en el fichero.
    dt = ['ubit' num2str(R)]; % Crea cadena de caracteres.
    k = fread(fid,N,dt ); % Lee k en el fichero.
    fclose(fid); % Cierra el fichero.
    y = du(k,-1,1,R); % Decuantifica la secuencia k
end

Procesamiento de Imágenes

CodIm

function CodIm(x,fi,R)
    [f, c] = size(x);
    fid   = fopen(fi,'w');
    fwrite(fid,R,'ubit3');
    fwrite(fid,f,'ubit16');
    fwrite(fid,c,'ubit16');
    x     = bitsrl(x,8-R);
    dt    = ['ubit' num2str(R)];
    count = fwrite(fid,x,dt);
    fclose(fid);
end

DecIm

function decIm(fi)
    fid   = fopen(fi,'r');
    R = fread(fid,R,'ubit3');
    f = fread(fid,f,'ubit16');
    c = fread(fid,c,'ubit16');
    dt    = ['ubit' num2str(R)];
    x = fread(fid,[f, c],dt);
    y = bitsll(x,8-R);
    z = bitset(y,8-R);   
    z = uint8(z);   
    fclose(fid);   
    imshow(z);
end

Entradas relacionadas: