miércoles, diciembre 6

Matlab: Medición de frecuencia

A partier de la inquietud planteada por el Lucho de medir la frecuencia de sus mediciones del osciloscopio salió el siguiente código:
function f = findfreq(t,u,fmin,fmax,varargin)
if nargin>4
if strcmpi(varargin{1},'fpoints')
frecs = linspace(fmin,fmax,varargin{2})*2*pi; % valores de frecuencia a probar
elseif strcmpi(varargin{1},'fstep')
frecs = [fmin:varargin{2}:fmax]*2*pi; % valores de frecuencia a probar
end
else
frecs = [fmin:fmax]*2*pi; % valores de frecuencia a probar
end
m = zeros(size(frecs,1),2);
for j = 1:length(frecs)
m(j,1) = sum((u.*sin(frecs(j)*t)).^2);
m(j,2) = sum((u.*cos(frecs(j)*t)).^2);
end
[a,b] = max(sum(m.^2,2),[],1);
f = frecs(b)/(2*pi);
plot(frecs,m)
ojalá le sirva a alguien, si necesitan alguna explicación del código, ¡¡¡pregunten poh!!!

Funcionó bastante bien con respecto a la medición de frecuencia del osciloscopio y las mediciones al ojímetro, asi que bien...

Lo que sí me entró la duda si funciona bien cuando las ondas no estan en fase con el seno o coseno (eso se trata de superar comparando con seno y coseno), si alguien encuentra que falla, que avise ;)

Bueno, eso sería por esta jornada Matlabiana

5 comentarios:

Lucho dijo...

Hi. Gracias por el código salvador, me ayudó caleta a calcular frecuencias (casi le mando frecuancia jajajajaj).

Eso, y mandale el código de latex de como dejar imagenes como marca de agua... con copyright de caezaurio :P:P.

Salu2.

Unknown dijo...

Una pregunta , la entrada varargin que se supone que es ? Entiendo que es una entrada, pero que conecto alli ? . Respondame por favor Gracias

Lorenzo dijo...

http://www.mathworks.com/help/matlab/ref/varargin.html

Es para indicar que los demás argumentos son opcionales y quedan guardados en el cell array varargin.

En este caso yo lo ocupé para especificar si especificaba que cantidad de frecuencias iba a probar, o cada cuantos Hz iba a probar una frecuencia.

Unknown dijo...

Ese codigo yo lo estoy poniendo dentro de un bloque llamado . Mat Lab Code en Simulink, pero me bota error, me dice que . varargin ; no puede estar ahi. Que puedo hacer ?

Lorenzo dijo...

Probablemente sea porque necesita un número fijo de argumentos para mapearlos a líneas de entrada del bloque simulink. Habría que simplificar el código y ocupar uno de los dos entre fstep o fpoints.