generateMATLABFunction

Создайте функцию MATLAB, совместимую с генерацией кода C/C++

    Синтаксис

    Описание

    пример

    generateMATLABFunction(sFE) генерирует код на основе входного объекта sFE экстрактора функции и открывает неназванный файл, содержащий функцию extractSignalFeatures. Функциональная подпись зависит от того, как вы устанавливаете FeatureFormat свойство входа показывает объект экстрактора.

    • Когда вы задаете FeatureFormat как "matrix", сгенерированный MATLAB® функция имеет эту подпись:

      [features,info,framelimits] = extractSignalFeatures(x)
      Подпись эквивалентна:
      [features,info,framelimits] = extract(sFE,x)

    • Когда вы задаете FeatureFormat как "table", сгенерированная функция MATLAB имеет эту подпись:

      features = extractSignalFeatures(x)
      Подпись эквивалентна:
      features = extract(sFE,x)

    Примеры

    свернуть все

    Создайте signalTimeFeatureExtractor возразите, чтобы извлечь среднее значение, стандартное отклонение и пиковое значение случайного сигнала.

    x = randn(1000,1);
    sFE = signalTimeFeatureExtractor(FrameSize=100, ...
          FrameOverlapLength=10,Mean=true,StandardDeviation=true, ...
          PeakValue=true)
    sFE =
       signalTimeFeatureExtractor with properties:
    
        Properties
                   FrameSize: 100
          FrameOverlapLength: 10
                  SampleRate: []
         IncompleteFrameRule: "drop"
               FeatureFormat: "matrix"
    
        Enabled Features
          Mean, StandardDeviation, PeakValue
    
        Disabled Features
          RMS, ShapeFactor, SNR, THD, SINAD, CrestFactor
          ClearanceFactor, ImpulseFactor

    Вызвать generateMATLABFunction на объекте. Сгенерированная функция extractSignalFeatures эквивалентно вызову extract функция на sFE. Сохраните функцию в свою текущую папку и просмотрите функциональный скрипт.

    generateMATLABFunction(sFE)
    type extractSignalFeatures
    function [features,info,frameLimits] = extractSignalFeatures(x)
    % EXTRACTSIGNALFEATURES Extract signal features
    % [FEATURES,INFO,FRAMELIMITS] = extractSignalFeatures(X) returns a matrix
    % containing features extracted from input X, INFO, a structure that maps
    % a specific feature to its column location in the output feature matrix
    % and FRAMELIMITS, whose i-th row contains the beginning and end limits
    % of the i-th frame.
    %
    % Parameters of the signalTimeFeatureExtractor used to generate this
    % function must be honored when calling this function.
    
    % Generated by MATLAB(R) 9.11 and Signal Processing Toolbox 8.7.
    % Generated on: 10-Jun-2021 08:25:02.
    
    %#codegen
    
    if istimetable(x)
         xInTT = x{:,:};
    else
         xInTT = x;
    end
    if isrow(xInTT)
         xIn = xInTT(:);
    else
         xIn = xInTT;
    end
    dataType = class(xIn);
    signalLength = size(xIn,1);
    numChannels = size(xIn,2);
    frameSize = 100;
    frameOverlapLength = 10;
    frameRate = frameSize - frameOverlapLength;
    featureMatrix = zeros(0,1,dataType);
    numFeatureCols = 0;
    numFeatureRows = 0;
    frameLimits = zeros(0,2,dataType);
    info = struct('Mean',0,'StandardDeviation',0,'PeakValue',0);
    for idx = 1:numChannels
        if numChannels == 1
             xChannel = xIn;
        else
             xChannel = xIn(:,idx);
        end
        startIdx = 1;
        endIdx = frameSize;
        while startIdx <= signalLength
            if endIdx > signalLength
                break;
            end
            featureIndex = 1;
            xFrame = xChannel(startIdx:endIdx,1);
            meanValue = mean(xFrame);
            numCurrentFeature = numel(meanValue);
            info.Mean = featureIndex;
            featureIndex = featureIndex+numCurrentFeature;
    
            standardDeviation = std(xFrame);
            numCurrentFeature = numel(standardDeviation);
            info.StandardDeviation = featureIndex;
            featureIndex = featureIndex+numCurrentFeature;
    
            peakValue = max(abs(xFrame));
            info.PeakValue = featureIndex;
    
            featureVector = [meanValue(:);standardDeviation(:);peakValue(:)];
            featureMatrix = [featureMatrix;featureVector];
            if startIdx == 1
                numFeatureCols = size(featureVector,1);
            end
            if idx == 1
                numFeatureRows = numFeatureRows+1;
                frameLimits = [frameLimits;[startIdx endIdx]];
            end
            startIdx = startIdx+frameRate;
            endIdx = startIdx+frameSize-1;
        end
    end
    tempFeatureMatrix = reshape(featureMatrix,numFeatureCols,numFeatureRows,numChannels);
    features = permute(tempFeatureMatrix,[2,1,3]);
    end

    Можно заменить вызовы extract с вызовами сгенерированной функции в вашем коде. Выходные параметры идентичны.

    features1 = extract(sFE,x)
    features1 = 11x3
          0.0842    1.0690    2.7526
          0.0500    1.0516    2.9491
          0.1901    1.0356    2.7304
          0.1209    0.9171    2.4366
          0.0443    0.9399    2.4247
         -0.1153    1.0490    3.5699
         -0.1001    0.9530    2.4124
          0.0616    0.9959    2.7485
         -0.0263    0.9482    2.4868
         -0.0234    0.9876    3.1585
            .
            .
            .
    
    features2 = extractSignalFeatures(x)
    features2 = 11x3
          0.0842    1.0690    2.7526
          0.0500    1.0516    2.9491
          0.1901    1.0356    2.7304
          0.1209    0.9171    2.4366
          0.0443    0.9399    2.4247
         -0.1153    1.0490    3.5699
         -0.1001    0.9530    2.4124
          0.0616    0.9959    2.7485
         -0.0263    0.9482    2.4868
         -0.0234    0.9876    3.1585
            .
            .
            .
    

    Copyright 2020 The MathWorks, Inc.

    Входные параметры

    свернуть все

    Покажите объект экстрактора в виде signalFrequencyFeatureExtractor возразите или signalTimeFeatureExtractor объект.

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

    Объекты

    Функции

    Введенный в R2021b
    Для просмотра документации необходимо авторизоваться на сайте