Вы находитесь на странице: 1из 3

7. y 10. El rectFilt.

m cdigo siguiente contiene toda la funcionalidad requerida para el


problema 7, as como el problema opcional 10. Mediante la lectura a travs de
las sentencias if / else, se puede averiguar qu partes son requerido para la
pregunta 7 solamente.

% Y = rectFilt (x, ancho)


%
% de datos Filtros con un filtro rectangular (media mvil),
y correcciones de borde
Efectos%
%
Entradas%
% X - un vector de datos
% Anchura - la anchura del rectngulo deseado en muestras,
debe ser un ODD nmero entero.
%
Las salidas%
% Y - la versin 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 nmero entero o impar. Y tambin ser NX2 donde la
primera columna es de nuevo la
% X valores y la segunda columna es los valores de y
suavizadas

funcin x = rectFilt (x, ancho)

% No hacer nada si x es un escalar


si longitud (x)> 1
% Si x es un vector slo tiene que filtrar con un
rectngulo
si tamao (x, 1) == 1 || tamao (x, 2) == 1

% Si no es raro, a continuacin, 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 ms
tarde
final

% De convolucin de la mscara con la seal de


enmascarar = 1 los / width * (1, ancho);
x = conv (mscara, x);
% Deshacerse de valores extra
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 orientacin de stos si es necesario


si tamao (x, 1)> Tamao (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 (tamao (y));


paran = 1: longitud (temp)
% Encontrar los puntos que estn 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 continuacin, la traza
% De datos y curva suave

% Cargar los datos


carganoisyData

% Alsela
alisada = rectFilt (x, 11);

% Representar grficamente los datos y lnea suave


figura
plot (x,'');
mantener en
plot (alisado,'R')
leyenda ('Los datos originales','Suavizada')
xlabel ('ndice')
ylabel ('Valor' )
ttulo ('Ilustracin de suavizado')

La figura de noisyData y los datos suavizados generados por el script testRectFilt.m est
por debajo de: