Matlab - AYUUUUDA ejercicio Matlab .

 
Vista:
sin imagen de perfil
Val: 11
Ha aumentado su posición en 9 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

AYUUUUDA ejercicio Matlab .

Publicado por Luisa (6 intervenciones) el 19/01/2021 00:34:57
Hola necesito ayuda con esto. Este es el enunciado de mi problema:
• A partir de esa matriz Sonidos, crear 3 vectores Micro1, Micro2 y Micro3 conteniendo cada uno de ellos las lecturas de un micrófono.
• Para cada uno de los vectores, localizar el índice de la muestra donde se detecta el sonido.
- Generar una señal aproximada proporcional a la derivada de la forma de onda del vector Micro1. Para ello:
 Crea otro vector B, de la misma dimensión que Micro1, con todos los valores a 0.
 Recorre cada elemento del vector B, asignando a B(i) el valor Micro(i)-Micro1(i-1), correspondiente a la diferencia entre 2 medidas consecutivas en Micro1. El primer elemento de B dejarlo con el valor 0.
 Normaliza B dividiendo cada elemento por el valor máximo en B.
- Dibuja los dos vectores: Micro1 en azul y B en rojo.
- Localiza el índice R1 de la primera muestra de B cuyo valor supera el valor 0.7

El código que yo he generado es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
load Sonidos.mat
 A=Sonidos;
 
 micro1=A(1,:);
 micro2=A(2,:);
 micro3=A(3,:);
 
 % Indice donde se detecta la muestra para cada vector
 
 B=zeros(1,length(micro1));
 for i=2:length(micro1)
 
     dif(i)=( micro1(i)-micro1(i-1));
     maximo= max(dif);
     B=dif./maximo;
 end
% Dibujamos
figure(1)
plot(micro1,'b')
hold on
plot(B,'r')
 
% %%%
n=length(B);
R1=0;
for k=1:n
 
    if B(k)>0.7
        break
 
    end
    R1=R1-B(k);
 
end
disp(R1)

MI DUDA ES EN EL ÚLTIMO PUNTO. LO QUE YO HE PUESTO NO CREO QUE ESTE BIEN.

Un saludo y muchas gracias por la ayuda
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 Jon
Val: 354
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

AYUUUUDA ejercicio Matlab .

Publicado por Jon (161 intervenciones) el 19/01/2021 12:44:26
Buenos días Luisa,

Aquí tienes mi solución. Aunque la última parte también lo puedes resolver con un bucle (for) y una condición (if), te recomiendo que utilices la función de MATLAB find.

Esta función determina la posición en la cual se cumple una condición en un vector. Si solo deseas la primera búsqueda, debes indicarlo de la forma que se muestra en el código.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
%% Datos
% load Sonidos.mat
% A = Sonidos;
 
A = randi(10,[3 4]);
micro1 = A(1,:);
micro2 = A(2,:);
micro3 = A(3,:);
 
%% Localizar el índice donde se detecta la muestra para cada vector
B = zeros(1,length(micro1));
for i = 2 : length(micro1)
    dif(i) = (micro1(i)-micro1(i-1));
    maximo = max(dif);
    B = dif./maximo;
end
 
%% Normaliza B dividiendo cada elemento por el valor máximo en B
B_max = max(B);
B_norm = B / B_max;
 
%% Localiza el índice R1 de la primera muestra de B cuyo valor supera el valor 0.7
idx = find(B_norm > 0.7, 01, 'first');
R1 = B_norm(idx);
 
%% Enseñar gráfico
[~, col] = size(A);
x = 1 : col;
 
figure(1);
plot(x,micro1,'b');
hold on;
plot(x,B_norm,'r');
hold on;
plot(x(idx),R1,'r o');
grid on;

Un saludo,

Jon
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 11
Ha aumentado su posición en 9 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

AYUUUUDA ejercicio Matlab .

Publicado por Luisa (6 intervenciones) el 19/01/2021 17:16:09
Jon.
MILLL GRACIAS, DE VERDAD.

La programación no es para nada mi fuerte.
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