Dear all,

I'm trying to convert a script originally written in Matlab and saved as
an .m file to Scilab using the function mfile2sci. However, I don't get
any .sci file. I get a .cat file which contains mostly the comments
without the comment sign //. I get also a .log file with a brief job
summary, indicating that no conversion was performed since "file
contains no instruction", which is not the case. I'm attaching the
original m file and the .cat and .log files.

Am I doing anything wrong?

I've tried to change the options (recursive mode, etc.)with no success.

I'm using 6.0.2.

Regards,

Federico Miyara







--
El software de antivirus Avast ha analizado este correo electrónico en busca de 
virus.
https://www.avast.com/antivirus

Attachment: audiometro1.cat
Description: application/vnd.ms-pki.seccat

  ****** Beginning of mfile2sci() session ******
  File to convert: D:/work/audiometro1.m
  Result file path: D:/WORK_S~1/
  Recursive mode: ON
  Only double values used in M-file: NO
  Verbose mode: 3
  Generate formatted code: NO
  M-file reading...
  M-file reading: Done
  Syntax modification...
  Syntax modification: Done
  File contains no instruction, no translation made...
  ****** End of mfile2sci() session ******
% Audiómetro
%
% Determinación de umbrales audiométricos con auricular HDA 200
%
% ----------------------------
% Autor: Federico Miyara
% Fecha: 2011-04-11
%        2011-05-16
%        2011-08-09


% Duración de cada estímulo
T = 5;

% Redondeo a múltiplo de 0.2 s
T = round(T/0.2)/5;

% Tasa de muestreo
Fs = 44100;

% Frecuencias audiométricas
fa = [125 250 500 1000 2000 4000 8000];

% Frecuencias audiométricas en orden pseudoaleatorio
fa_pa = [500 2000 250 1000 8000 125 4000];

% Índices de las frecuencias audiométricas en orden pseudoaleatorio 
I = [3 5 2 4 7 1 6]; 

% Vector de tiempos correspondiente a la duración de cada parte activa
% (ON) o silencio (OFF) de la señal
T1 = [0:Fs/10-1]/Fs;

% Inicialización de la matriz de señales
% Cada fila contendrá una señal audiométrica consistente en T/0.2 tonos
% de la correspondiente frecuencia audiométrica y amplitud 1 durante
% 100 ms separados por silencios de igual duración. Cada tono tiene un
% fade-in y un fade-out para evitar clicks
x = zeros(7, T*Fs);

% Creación de la matriz de señales descripta
for k=1:7
    % Tono de frecuencia fa(k)
    seno = sin(2*pi*fa(k)*T1);
    % Agregado de fade-in
    seno(1:132) = seno(1:132).*[0:131]/132;
    % Agregado de fade-out
    seno(end-131:end) = seno(end-131:end).*[131:-1:0]/132;
    % Repetición 
    for h=1:round(5*T)
        x(k, [(h-1)*Fs/5 + 1:(h-1)*Fs/5 + Fs/10]) = seno;
    end
end

% A continuación se pide ingresar una frecuencia audiométrica
% y un nivel de presión sonora y luego si se lo escucha o no.
% El ciclo se repite tantas veces como sea necesario hasta que
% se ingrese una frecuencia = 0.

% Frecuencia distinta de 0 sin sentido para poder iniciar el
% proceso
fo = 1;

% Bandera que indica que no se desea terminar
final = 'a';

% Nivel de presión sonora por defecto inicial
Lp = 40;

% Si no existe la matriz mini se la crea. Representa el nivel
% mínimo que se escucha en cada frecuencia. Se lo inicializa
% como 99 dB para ir bajando
if exist('mini')==0
   mini = 99*ones(1,7);
   % n indica el número de frecuencia a ensayar
   n = 1;
else
   % Si existe y está inconclusa se continúa con la proxima
   % frecuencia. Si una frecuencia fue ensayada, su correspondiente
   % entrada en la matriz mini es diferente de 99. La próxima
   % frecuencia a ensayar es la primera no ensayada
   n = min(find (mini(I)==99));
end
   
% Si no existe la matriz maxi se la crea. Representa el nivel
% máximo que NO se escucha en cada frecuencia. Se lo inicializa
% como -9 dB para ir subiendo
if exist('maxi')==0
   maxi = -9*ones(1,7);
else
   % Si existe y está inconclusa se continúa con la proxima
   % frecuencia. Si una frecuencia fue ensayada, su correspondiente
   % entrada en la matriz mini es diferente de 99. La próxima
   % frecuencia a ensayar es la primera no ensayada
   n = min([n, min(find (mini(I)==99))]);
end

% Si no hay ningun n, se comienza una nueva audiometria 
if prod(size(n))==0
   mini = 99*ones(1,7);
   maxi = -9*ones(1,7);
   n = 1;
end

% Instrucciones para terminar la audiometría
disp(' ')
disp('Para terminar ingresar frecuencia audiométrica 0')
disp(' ')

disp(' ')
% Seleccion del canal de audio
canal = input('Canal (s = stereo, i = izquierdo, d = derecho): ', 's');

% Uniformización del simbolo para el canal
switch canal
    case {'i','I'}
        canal = 'i';
    case {'d','D'}
        canal = 'd';
    otherwise
        canal = 's';
end
disp(['Canal: ',canal])
disp(' ')

% El siguiente lazo se realiza hasta tanto se ingresa una
% frecuencia 0 o se termina de realizar la audiometría
while fo>0
   % Frecuencia a ensayar por defecto, tomada del vector de
   % frecuencias reordenado en el orden de los ensayos (que
   % no es el orden creciente)
   ff = fa(I(n));
   f1 = input(['Frecuencia audiométrica [Hz] (',num2str(ff),') = ']);
   
   if prod(size(f1))==0
      % Si se pulsó ENTER se elige el valor por defecto
      fo = ff;
   else
      % De lo contrario se elige el valor ingresado
      fo = f1;
   end
   disp(['Frecuencia audiométrica = ', num2str(fo), ' Hz'])
      
   % Según qué frecuencia se ingresó se obtiene el índice k 
   % correspondiente. Los índices corresponden al orden creciente
   % de las frecuencias audiométricas. Si no es una frecuencia 
   % audiométrica se pregunta si se desea terminar
   switch fo
   case 125
      k=1;
   case 250
      k=2;
   case 500
      k=3;
   case 1000
      k=4;
   case 2000
      k=5;
   case 4000
      k=6;
   case 8000
      k=7;
   otherwise
      final = input('No es una frecuencia audiométrica. ¿Terminar? (S/N) ', 
's');
      if final == 's'
         break
      elseif final == 'S'
         break
      end
   end
   
   
   % Si no se eligió terminar (en cuyo caso la bandera "final"
   % adopta el valor 'a' asignado anteriormente), sigue adelante 
   % el proceso 
   if final=='a'
      % Se pide ingresar el nivel de presión sonora ofreciéndose
      % por defecto un valor de 40 dB
      Lp1 = input('Nivel de presion sonora [dB] (40 dB) = ');
      if prod(size(Lp1))==0
         % Si se pulsó ENTER se adopta el valor por defecto
         Lp = 40;
      else
         % De lo contrario se adopta el valor recién ingresado
         Lp = Lp1;
      end
      disp(['Nivel de presion sonora = ', num2str(Lp), ' dB'])
      
      % Constante de calibración
      % Se ajusta el volumen de de la notebook de modo que con una
      % senoide de 0 dB referido a la máxima amplitud se tengan
      % aproximadamente 20 mV. Con ello, en el auricular audiométrico
      % HDA 200 se tiene un nivel de presión sonora teórico de 80 dB
      % (a 1 kHz) con amplitud máxima.
      % Se mide el valor eficaz aplicado al auricular y se ajusta para
      % que esté cerca de 20 mV. El valor Vefcal en mV permite calibrar
      % el sistema:
      Vefcal = 23.8;
      Lpcal = 100 + 20*log10(Vefcal/200);
      
      % La constante K se elige de modo que la senoide a generar
      % tenga el nivel de presión sonora requerido.
      K = 10^((Lp - Lpcal)/20);
      
      % Se reproduce la senoide multiplicada por la constante K
      % (típicamente es < 1 porque el nivel elegido es casi siempre
      % bastante bajo pues se busca el umbral)
      
      switch canal
          case 'i'
              wavplay([K*x(k,:)', zeros(size(x,2), 1)], Fs, 'sync')
          case 'd'
              wavplay([zeros(size(x,2), 1), K*x(k,:)'], Fs, 'sync')
          case 's'
              wavplay(K*x(k,:), Fs, 'sync')
      end
      
      % Se pregunta si se oye
      oye = input('¿Lo oye? (S/N) ', 's');
      
      if oye=='s' | oye=='S'
         % Si se oye se actualiza el valor de mini(k)
         if Lp < mini(k)
            mini(k) = Lp;
         end
      elseif oye=='n' | oye=='N'
         % Si no se oye se actualiza el valor de maxi(k)
         if Lp > maxi(k)
            maxi(k) = Lp;
         end
      end
      
      % Si la diferencia entre el mínimo nivel escuchado y el máximo
      % nivel escuchado es <= 2 dB entonces se pasa a la siguiente
      % frecuencia
      if mini(k)-maxi(k)<=2
          % Se incrementa el índice n para que la 
          n = n + 1
          if n>7
             break
          end
       end
       
    else
       final = 'a';
    end
    
end


% Redondeo de mini
mmini = round(mini*10)/10;

% Redondeo de maxi
mmaxi = round(maxi*10)/10;

% Obtención del umbral
U = (mini + maxi)/2

% Redondeo del umbral
U = round(U*10)/10

% Formateo para presentación en pantalla de resultados
MINI = [];
MAXI = [];
UU = [];
for uu=1:7
   UU =   [UU,   sprintf('%4.1f', U(uu)), '    '];
   MINI = [MINI, sprintf('%4.1f', mmini(uu)), '    '];
   MAXI = [MAXI, sprintf('%4.1f', mmaxi(uu)), '    '];
end

% Presentación en pantalla
disp(' ')
disp(' ')
disp( 'f [Hz]         125     250     500     1000    2000    4000    8000')
disp(' ')
disp(['Umbral [dB]    ', UU])
disp(' ')
disp(['mini [dB]      ', MINI])
disp(['maxi [dB]      ', MAXI])
disp(' ')
disp(' ')


%K = 10^((80-80.6)/20)  

%wavplay(K*sin(2*pi*500*[0:1/Fs:10]),Fs, 'sync')

_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users

Reply via email to