exponenta event banner

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, чтобы восстановить влажные области.

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

Приложения

Функции

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

Больше о