Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Declip Saturated Signals Using Your Own Function

Los sensores pueden devolver lecturas recortadas si los datos son mayores que un punto de saturación determinado. Para reconstruir las lecturas, puede ajustar un polinomio a través de los puntos adyacentes a los intervalos saturados. Escriba una función que realice la reconstrucción e intégrela en .Analizador de señales

Genere una señal de tres canales muestreada a 1 kHz durante 14 segundos. La señal tiene varios picos de diferentes tamaños y formas. Un sensor que lee la señal se satura a 0,1 V.

fs = 1000; t = 0:1/fs:14-1/fs;  sig = [chirp(t-1,0.1,17,2,'quadratic',1).*sin(2*pi*t/5);     chirp(t-2,2,2,2.1,'quadratic',100).*exp(-(t-6.5).^2/20).*sin(2*pi*t*2);     0.85*besselj(0,5*(sin(2*pi*(t+1.5).^2/20).^2)).*sin(2*pi*t/9)]';  sigsat = sig; stv = 0.1; sigsat(sigsat >= stv) = stv;

Abra y arrastre la señal original y la señal saturada a la tabla Signal.Analizador de señales Arrastre cada canal original y saturado a su propia pantalla.

Escriba una función que utilice un polinomio para reconstruir los picos de señal:

  • El primer argumento de entrada, , es la señal de entrada.x Este argumento debe ser un vector y se trata como un único canal.

  • El segundo argumento de entrada, , es un vector de valores de tiempo.tIn El vector debe tener la misma longitud que la señal. Si la señal de entrada no tiene información de tiempo, la función lee este argumento como una matriz vacía.

  • Se utiliza para especificar argumentos de entrada adicionales.varargin Si no tiene argumentos de entrada adicionales, puede omitir .varargin Escriba los argumentos adicionales como una lista ordenada separada por comas en la ficha.Preprocesar

  • El primer argumento de salida, , es la señal preprocesada.y

  • El segundo argumento de salida, , es un vector de valores de tiempo de salida.tOut Si la señal de entrada no tiene información de tiempo, se devuelve como una matriz vacía.tOut

  • Para implementar el algoritmo, puede utilizar cualquier función MATLAB® o Signal Processing Toolbox™.

function [y,tOut] = declip(x,tIn,varargin) % Declip saturated signal by fitting a polynomial      % Initialize the output signal      y = x;      % For signals with no time information, use sample numbers as abscissas          if isempty(tIn)         tOut = [];         t = (1:length(x))';     else         t = tIn;         tOut = t;     end          % Specify the degree of the polynomial as an optional input argument     % and provide a default value of 4          if nargin<3         ndx = 4;     else         ndx = varargin{1};     end      % To implement your algorithm, you can use any MATLAB or Signal     % Processing Toolbox function          % Find the intervals where the signal is saturated and generate an      % array containing the interval endpoints     idx = find(x==max(x));      fir = [true;diff(idx)~=1];     ide = [idx(fir) idx(fir([2:end 1]))];     % For each interval, fit a polynomial of degree ndx over the ndx+1 points     % before the interval and the ndx+1 points after the interval     for k = 1:size(ide,1)         bef = ide(k,1); aft = ide(k,2);         intv = [bef-1+(-ndx:0) aft+1+(0:ndx)];         [pp,~,mu] = polyfit(t(intv),x(intv),ndx);         y(bef:aft) = polyval(pp,t(bef:aft),[],mu);     end  end

Agregue la función como una función de preprocesamiento personalizada.Analizador de señales En la pestaña, haga clic en .AnalizadorPreprocesamientoAñadir función personalizada Introduzca el nombre y la descripción de la función. Pegue el texto de la función en la ventana del editor que aparece. Guarde el archivo. La función aparece en la galería de preprocesamiento.

Demostrar que la función que ha creado reconstruye las regiones saturadas.

  1. Seleccione el primer canal de la señal saturada en la tabla Señal.

  2. En la pestaña, haga clic en .AnalizadorPreprocesamientodeclip

  3. En la pestaña que aparece, haga clic en .PreprocesamientoPreprocesar

Compruebe que la función de preprocesamiento funciona cuando las señales tienen información de tiempo.

  1. Seleccione y en la tabla Señal.sigsigsat No seleccione canales individuales.

  2. En la pestaña, haga clic en , seleccione y especifique como la frecuencia de muestreo.AnalizadorValores de tiempoSample Rate and Start Timefs

  3. La señal en el panel superior, incluidas las regiones reconstruidas, tiene información de tiempo.

Compruebe que la función funciona al especificar entradas opcionales.

  1. Seleccione el segundo y el tercer canal de la señal saturada en la tabla Señal.

  2. En la pestaña, introduzca el campo y haga clic en .Preprocesamiento8ArgumentosPreprocesar La función de preprocesamiento utiliza un polinomio de grado 8 para reconstruir las regiones saturadas.

Consulte también

Apps

Funciones

Ejemplos relacionados

Más acerca de