exponenta event banner

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

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

Генерация трехканального сигнала с частотой 1 кГц в течение 14 секунд. Сигнал имеет несколько пиков различных размеров и форм. Датчик, считывающий сигнал, насыщается при 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. Перетащите каждый исходный и насыщенный канал на собственный экран.

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

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

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

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

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

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

  • Для реализации алгоритма можно использовать любую функцию MATLAB ® или 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) щелкните ▼ предварительной обработки и выберите децип.

  3. На появившейся вкладке Предварительная обработка щелкните Предварительная обработка.

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

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

  2. На вкладке Analyzer (Анализатор) щелкните Time Values (Значения времени), выберите Sample Rate and Start Time, и указать fs как частота выборки.

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

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

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

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

См. также

Приложения

Функции

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

Подробнее