Matlab - Función Lloyd en Matlab

 
Vista:

Función Lloyd en Matlab

Publicado por ANgel (1 intervención) el 17/02/2013 05:51:19
¡Hola gente del foro! :D
Bueno, estoy aquí esperando que alguien tenga una idea de como orientarme con un programa en Matlab.

Resulta que en clase vimos cómo funciona el Algoritmo de Lloyd, permite cuantizar una señal y darle a una muestra un valor cuantizado.

El ejemplo que nos mostró el profesor fue:

1
2
3
4
5
6
7
N=2^3;
t= [0:1000]*pi/50;
sig= sin(t);
[partition, codebook]= lloyds(sig, N);
[indx, quant, distor]=quantiz(s, partition, codebook);
figure(2)
plot(t, sig, t, quant,'--');


En este ejemplo N representa los bits usados para la representación de niveles del cuantizador
y se aplica a una señal senoidal en un período completo

después viene la función de Lloyd en la que entran los parametro s de partición ( las fronteras de las regiones del cuantizador) codeblook (los centroides de esas regiones)

Bueno, intenté ahora usar un archivo de audio para cuantizarlo y graficar la señal cuantizada.

El código es el siguient:e:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[y, Fs, nbits] = wavread('lima.wav')
%Fs= 44100,  nbits=16, 
wavwrite(y, 'lima1.wav')
s=wavread('lima1.wav')
figure (1)
subplot(2,1,1)
plot (s)
 
%Análisis Espectral de la muestra
Y=fft(s);          % transformada rápida de Fourier. 
A=Y.*conj(Y);  % potencia de la señal. Agos
f=(100:3000);
subplot(2,1,2)
plot (f, A(1:2901));
 
N=2^3;
t= [0:1000]*pi/50;
sig= y;
[partition, codebook]= lloyds(sig, N);
[indx, quant, distor]=quantiz(s, partition, codebook);
figure(2)
plot(t, sig, t, quant,'--');


El código funciona bien hasta que se llega a Lloyd, me marca el siguiente error:

??? Error using ==> lloyds at 34
Training set must be a vector.
( "at 34 es justamente la línea donde esta la funcion de Lloyd
[partition, codebook]= lloyds(sig, N); )

Error in ==> Cuantizadormusica at 19
[partition, codebook]= lloyds(sig, N);


Entonces, ¿Cuál fue mi error? el archivo de audio no fue guardado en un vector?

Espero alguien pueda guiarme con esto.
Gracias! o/
=]
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Función Lloyd en Matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 17/02/2013 15:31:33
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
close all
clear all;
archivo='--01-A quien ire1.wav';
[y,Fs,nbits]=wavread(archivo);
%Fs= 44100,  nbits=16, 
wavwrite(y,'archivo1.wav');
s=wavread('archivo1.wav');
figure(1);subplot(2,1,1);plot(s)
 
%Análisis Espectral de la muestra
Y=fft(s);          % transformada rápida de Fourier. 
A=Y.*conj(Y);  % potencia de la señal. Agos
f=100:3000;
subplot(2,1,2)
plot(f,A(1:2901));
N=2^3;
t=[0:1000]*pi/50;
sig=y;
[partition, codebook]= lloyds(sig(1:length(t),1), N);
[indx, quant, distor]=quantiz(s(1:length(t),1), partition, codebook);
 figure(2);plot(t,sig(1:length(t),1),t,quant,'--');
whos



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>> lloyds1
  Name                 Size                  Bytes  Class     Attributes
 
  A              6418309x2               102692944  double
  Fs                   1x1                       8  double
  N                    1x1                       8  double
  Y              6418309x2               205385888  double    complex
  archivo              1x21                     42  char
  codebook             1x8                      64  double
  distor               1x1                       8  double
  f                    1x2901                23208  double
  indx              1001x1                    8008  double
  nbits                1x1                       8  double
  partition            1x7                      56  double
  quant                1x1001                 8008  double
  s              6418309x2               102692944  double
  sig            6418309x2               102692944  double
  t                    1x1001                 8008  double
  y              6418309x2               102692944  double




Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]

http://matlabcaballero.blogspot.com


http://www.lawebdelprogramador.com/foros/Matlab/1368762-COMO__HACER_SUS_PREGUNTAS_DE_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar