You are on page 1of 11

7. y 10.

El
rectFilt.m
código siguiente contiene toda la funcionalidad requerida para el problema 7, así como
el p rob l e ma op ci on al 1 0 . M ed ian t e la l e ctu ra a t ra vé s d e la s s en ten ci a s i f / e l s e, s e
p u ed e a v e ri gu ar q u é p ar te s son
requerido para la pregunta 7 solamente.

% Y = rectFilt (x, ancho)

% de datos Filtros con un filtro rectangular (media móvil), y


correcciones de borde

Efectos%

Entradas%

% X - un vector de datos

% Anchura - la anchura del rectángulo deseado en muestras, debe ser un


ODD
número entero.

Las salidas%

% Y - la versión filtrada de x

% Y = rectFilt (X, ancho)

% X puede ser una matriz NX2, donde la primera columna son los valores
de x y la

% Segunda columna son los valores de y (para los datos de manera no


uniforme en la muestra). En este

% Caso, la anchura debe estar en las unidades de los valores de x y no


necesita

% Ser un número entero o impar. Y también será NX2 donde la primera


columna es de nuevo
la

% X valores y la segunda columna es los valores de y suavizadas

función
x = rectFilt (x, ancho)
% No hacer nada si x es un escalar

si
longitud (x)> 1

% Si x es un vector sólo tiene que filtrar con un rectángulo

si
tamaño (x, 1) == 1 || tamaño (x, 2) == 1

% Si no es raro, a continuación, mostrar la advertencia

si
rem (ancho + 1,2)

% Ancho debe ser impar, de modo que sea impar

lado = piso (anchura / 2);

width = (lado * 2) 1;

disp ([
'Ancho debe ser impar, usando'
num2str (ancho)
'En vez'
]);

otro

lado = piso (anchura / 2);


% Calcula lado para más tarde

final

% De convolución de la máscara con la señal de

enmascarar = 1 los / width * (1, ancho);

x = conv (máscara, x);

% Deshacerse de valores extra

2
si
nargin == 2

x = x (ceil (anchura / 2): final de piso (anchura / 2));

% efectos de borde Fix

leftEdge = (lado + 1) / anchura: 1 / anchura: 1;

rightEdge = 1: -1 / anchura: (lado + 1) / anchura;

final

% Fijar la orientación de éstos si es necesario

si
tamaño (x, 1)> Tamaño (x, 2)

leftEdge = leftEdge ';

rightEdge = rightEdge ';

final

x (1: longitud (leftEdge)) = x (1: longitud (leftEdge)) ./


leftEdge;

x (al final de longitud (rightEdge) 1: final) = x (fines


longitud (rightEdge) 1: end) ./ rightEdge;

otro

% No es muestreada de manera uniforme, por lo que tire de los valores


X e Y y

% Smooth en consecuencia. SortRows primero en recibir todos los


valores de x en

El aumento de orden%

x = sortRows (x);

y = x (:, 2);

x = x (:, 1);

temp = ceros (tamaño (y));

3
para
n = 1: longitud (temp)

% Encontrar los puntos que están dentro de la anchura de la corriente

Punto%

start = find (x> x (n) -width / 2,1);

detener = encontrar (x <x (n) + anchura / 2,1,


'Última'
);

temp (n) = media (y (empezar: stop));

final

Asignar% temp a X ya que x es lo que se devuelve

x = [x temp];

final

final

El siguiente script ejecuta el


rectFilt.m
programa en los datos de noisyData.mat y parcelas los resultados.

% TestRectFilt

% de la carga de los datos de ruido y filtros usando rectFilt y, a


continuación, la traza

% Los datos y curva suave

% Cargar los datos

carga
noisyData

% Alísela

alisada = rectFilt (x, 11);

4
% Representar gráficamente los datos y suave línea

figura

plot (x,
''
);

mantener
en

plot (alisado,
'R'
)

leyenda (
'Los datos originales'
,
'Suavizada'
)

xlabel (
'Índice'
)

ylabel (
'Valor'
)

título (
'Ilustración de suavizado'
)

La figura de noisyData y los datos suavizados generados por el script


testRectFilt.m
está por debajo de:

8. El
getCircle.m
código se pega a continuación:

% [X, y] = getCircle (centro, r)

% Devuelve las coordenadas X e Y de un círculo con su centro en el


centro

% (Vector 2 elemento) y radio r

función
[X, y] = getCircle (centro, r)

5
% Hacer el vector de tiempo y evaluar en el seno y coseno para obtener
un círculo

t = linspace (0,2 * pi, 100);

x = centro (1) + r * cos (t);

y = centro (2) + r * sen (t);

El guión concentric.m se pega a continuación:

% concéntrico

5% Parcelas círculos concéntricos con 5 colores diferentes

% Haga los 5 colores utilizando un mapa de color de chorro

colores = chorro (5);

figura

para
n = 1: 5

[X, y] = getCircle ([0 0], n);

plot (x, y,
'Anchura de línea'
, 14-2 * n,
'Color'
, Colores (n, :));

mantener
en
;

final

eje
igual

6
la
olympic.m
guión se pega a continuación:

Olímpico%

Parcelas% del logotipo olímpico

r = 0,45;

figura

[X1, y1] = getCircle ([- 1 0], r);

la trama (x1, y1,


'Anchura de línea'
, 4,
'Color'
,
'B'
);

mantener
en

[X2, y2] = getCircle ([0 0], r);

la trama (x2, y2,


'Anchura de línea'
, 4,
'Color'
,
'K'

7
);

[X3, Y3] = getCircle ([1 0], r);

la trama (x3, y3,


'Anchura de línea'
, 4,
'Color'
,
'R'
);

[X4, Y4] = getCircle ([-. 5 -R], R);

la trama (x4, y4,


'Anchura de línea'
, 4,
'Color'
,
'Y'
);

[X5, Y5] = getCircle ([5 -r.], R);

la trama (x5, y5,


'Anchura de línea'
, 4,
'Color'
,
'G'
);

eje
igual

9. El
throwBall.m
la función se pega a continuación

8
% Distancia = Throwball (v, theta)

% Esta es una función que lanza una bola en un ángulo especificado

% Y con una velocidad inicial especificado y calcula donde la bola

Tierras%.

% V es la velocidad inicial en m / s

% Theta es el ángulo en grados (asumir bola que lanza a la derecha)

% La distancia es la distancia en metros a la que la pelota toca el


suelo

función
distancia = Throwball (v, theta)

% Definir las constantes

h = 1,5;
Medidores%

g = 9,8;
% Aceleración de la gravedad en m / s ^ 2

% Hacer un vector de tiempo

t = linspace (0,10,1000);

% Calcular la posiciones X e Y como una función del tiempo

cos x = v * (theta / 180 * pi) * t;

y = h + v * sen (theta / 180 * pi) * t-1/2 * g * t ^ 2 .;

Encuentra% cuando golpea el suelo

9
ind = encontrar (y <0,1,
'Primera'
);

= distancia x (IND);

% Si el balón no toca el suelo, mostrará la advertencia

si
IsEmpty (distancia)

disp (
El balón no toca el suelo en 10 segundos '
);

distancia = nan;

final

la
testBall.m
guión se pega a continuación

% TestBall

% Prueba de la función Throwball y la distancia trama como una función


del ángulo

theta = 0: 5: 60;

para
n = 1: longitud (theta)

% Calcualte la distancia para cada ángulo

dist (n) = Throwball (4, theta (n));

final

Trazar% se

figura

parcela (theta, dist,


'K'
,
'Anchura de línea'
, 1.5);

xlabel (

10
'Inicial Ángulo (grados)'
);

ylabel (
'Distancia lanzada (m)'
);

título (
'Distancia de la bola del tiro en función del ángulo de salida'
);

La figura se genera a continuación por


testBall.m

11

You might also like