La Web del Programador: Comunidad de Programadores
 
    Pregunta:  56667 - AYUDA CON GUI DE MATLAB
Autor:  David Mena
Hola a todos!

Mi duda es la siguiente:

Quiero hacer un programa que contenga menus (abrir, cerrar, etc.)
¿Hay alguna manera especial de nombrar y almacenar las variables para que puedan usarse entre los distintos menus sin ningun problema?
Lo pregunto xq x ejemplo, l problema q tengo yo es q abro un archivo *.wav con el menu Abrir. Dentro de ese menu programo para que me plotee en un grafico que he añadido n la pantalla principal la fft de la señal.
El error que me da el programa es a la hora de almacenar los valores de f y de h de la señal en un archivo xls. Pongo literalmente el código:

function Abrir_Callback(hObject, eventdata, handles)

[FileName Path]=uigetfile({'*.wav'},'Abrir Muestra');
if isequal(FileName,0)
return
else
[data,fs]=wavread(strcat(Path,FileName));
handles.H=fft(data,4096);
handles.H=10*log10(abs(handles.H(1:2048)));
handles.F=linspace(0,fs/2,2048);
plot(handles.F,handles.H);grid on;zoom on;
axis([0 1000 min(handles.H) max(handles.H)+5]);
ylabel('Amplitud(dB)')
xlabel('Frecuencia(Hz)')
Datos=[handles.F;handles.H]';
xlswrite('Datos.xls',Datos);

end

handles.direccion=strcat(Path,FileName);

guidata(hObject,handles)

.... y el error que me da Matlab es el siguiente:

??? Error using ==> vertcat
CAT arguments dimensions are not consistent.

Error in ==> PVB>Abrir_Callback at 95
Datos=[handles.F;handles.H]';

Error in ==> gui_mainfcn at 95
feval(varargin{:});

Error in ==> PVB at 42
gui_mainfcn(gui_State, varargin{:});

??? Error using ==> PVB('Abrir_Callback',gcbo,[],guidata(gcbo))
Error using ==> vertcat
CAT arguments dimensions are not consistent.

??? Error while evaluating uicontrol Callback

¿Alguien puede decirme que es lo que hago mal???

Un saludo y gracias!!!

  Respuesta:  Alejandro Solans
Si tienes el archivo 'Datos.xls' creado y en la misma carpeta de trabajo no te debería dar problema a la hora de guardar.

En la parte de arriba prueba a poner:

[FileName Path]=uigetfile('*.wav', 'Abrir Muestra');
if isequal(filename,0) || isequal(pathname,0)
return
else

______

Desconozco lo que haces con
[data,fs]=wavread(strcat(Path,FileName));

______

Si lo que quieres es guardar variables y poder manejarlas desde otra parte del código, defínelas como globales al comienzo de ambas funciones. Hay que definirlo en las dos partes para que matlab desde el segundo código sepa de la existencia de esa variable global. Se define así:

global variable1 variable2 ...