Децип насыщенных сигналов, используя свою собственную функцию

Датчики могут возвращать отсеченные показания, если данные больше заданной точки насыщения. Чтобы восстановить показания, можно подогнать полином через точки, примыкающие к насыщенным интервалам. Напишите функцию, которая выполняет реконструкцию и интегрирует ее в 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. Введите дополнительные аргументы в виде упорядоченного списка, разделенного запятыми, на вкладке «Предварительная обработка».

  • Первый выходной аргумент, 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. На появившейся вкладке Предварительная обработка нажмите кнопку Предварительная обработка.

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

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

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

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

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

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

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

См. также

Приложения

Функции

Похожие примеры

Подробнее о