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