Declip влажные сигналы Используя вашу собственную функцию

Датчики могут возвратить отсеченные показания, если данные больше, чем данная точка насыщения. Чтобы восстановить показания, можно соответствовать полиному через точки, смежные с влажными интервалами. Запишите функцию, которая выполняет реконструкцию, и интегрируйте ее в Signal Analyzer.

Сгенерируйте сигнал с тремя каналами, произведенный на уровне 1 кГц в течение 14 секунд. Сигнал имеет несколько peaks различных размеров и форм. Датчик, который читает сигнал, насыщает на уровне 0,1 В.

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;

Откройте Signal Analyzer и перетащите исходный сигнал и влажный сигнал к таблице Signal. Перетащите каждый исходный и влажный канал к его собственному отображению.

Запишите функцию, которая использует полином, чтобы восстановить peaks сигнала:

  • Первый входной параметр, x, входной сигнал. Этот аргумент должен быть вектором и обработан как один канал.

  • Второй входной параметр, tIn, вектор из временных стоимостей. Вектор должен иметь ту же длину как сигнал. Если у входного сигнала нет времени информация, функция читает этот аргумент как пустой массив.

  • Используйте varargin задавать дополнительные входные параметры. Если у вас нет дополнительных входных параметров, можно не использовать varargin. Введите дополнительные аргументы как упорядоченный список, разделенный запятыми во вкладке Preprocess.

  • Первый выходной аргумент, y, предварительно обработанный сигнал.

  • Второй выходной аргумент, tOut, вектор из выходных временных стоимостей. Если у входного сигнала нет времени информация, tOut возвращен как пустой массив.

  • Чтобы реализовать ваш алгоритм, можно использовать любой MATLAB® или функцию 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

Добавьте функцию в Signal Analyzer как пользовательская функция предварительной обработки. На вкладке Analyzer нажмите Preprocessing ▼ и выберите Add Custom Function. Введите имя функции и описание. Вставьте текст своей функции в окне редактора, которое появляется. Сохраните файл. Функция появляется в галерее предварительной обработки.

Продемонстрируйте, что функция, которую вы создали, восстанавливает влажные области.

  1. Выберите первый канал влажного сигнала в таблице Signal.

  2. На вкладке Analyzer нажмите Preprocessing ▼ и выберите declip.

  3. На вкладке Preprocessing, которая появляется, нажмите Preprocess.

Проверьте, что функция предварительной обработки работает, когда сигналы имеют информацию времени.

  1. Выберите sig и sigsat в таблице Signal. Не выбирайте отдельные каналы.

  2. На вкладке Analyzer нажмите Time Values, выберите Sample Rate and Start Time, и задайте fs как частота дискретизации.

  3. Сигнал в верхней панели, включая восстановленные области, имеет информацию времени.

Проверяйте, что функция работает, когда вы задаете дополнительные входные параметры.

  1. Выберите вторые и третьи каналы влажного сигнала в таблице Signal.

  2. На вкладке Preprocessing введите 8 в поле Arguments и нажимают Preprocess. Функция предварительной обработки использует полином степени 8, чтобы восстановить влажные области.

Смотрите также

Приложения

Функции

Связанные примеры

Больше о