Создайте функцию MATLAB, совместимую с генерацией кода C/C + +
generateMATLABFunction(
генерирует код и открывает файл без названия, содержащий функцию с именем afe
)extractFeatures
. Сгенерированный MATLAB® функция имеет сигнатуру:
featureVector = extractFeatures(audioIn)
featureVector = extract(afe,audioIn)
generateMATLABFunction(___,'IsStreaming',
определяет, предназначена ли функция для потоковой (с одним кадром) обработки. Если TF
)TF
задается как true
полученная функция требует однокадровый вход длины numel(afe.Window)
. Если отдельные экстракторы признаков имеют состояние, полученная функция поддерживает состояние между вызовами. Если не задано, TF
по умолчанию является false
. Потоковая функция имеет сигнатуру:
featureVector = functionName(audioIn,varargin)
featureVector
зависит от значения IsStreaming
.
Если IsStreaming
установлено значение true
, затем featureVector
возвращается как M -by - N матрица, где M - количество извлечённых функций, а N - количество каналов.
Если IsStreaming
установлено значение false
, затем featureVector
возвращается как L -by- M -by- N массив, где L - количество переходов, M - количество векторов функций, а N - количество каналов.
Возможные значения varargin
зависит от строения вашего audioFeatureExtractor
объект, afe
.
Если функции вашего audioFeatureExtractor
извлечения объектов не требуют состояния, тогда varargin
должно быть пустым.
Если функции вашего audioFeatureExtractor
извлечения объектов требуют состояния, затем varargin
может быть опциональной парой "имя-значение" 'Reset'
и любой из них true
или false
. Если вы вызываете функцию с 'Reset'
установлено на true
, затем функция очищает любое состояние перед вычислением и возвращением вектора признака.
Можно использовать audioFeatureExtractor
объект при разработке трубопровода редукции данных в MATLAB. Как только вы готовы развернуть свою систему на устройстве или интегрировать ее в большую систему, используйте generateMATLABFunction
чтобы создать функцию MATLAB, подходящую для генерации кода C/C + +. Затем используйте MATLAB Coder™, чтобы сгенерировать эквивалентный код C/C + +.
Чтение в аудио файла. Вы будете использовать это аудио файла, чтобы проверить эквивалентность audioFeatureExtractor
объект и сгенерированная функция MATLAB.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
Создайте audioFeatureExtractor
объект для извлечения спектра Bark, коэффициентов дельта-гамматона cepstral (GTCC) и гармонического отношения.
afe = audioFeatureExtractor("Window",hann(512,"periodic"), ... "OverlapLength",256, ... "SampleRate",fs, ... "FFTLength",1024, ... 'barkSpectrum',true, ... "gtccDelta",true, ... "harmonicRatio",true)
afe = audioFeatureExtractor with properties: Properties Window: [512x1 double] OverlapLength: 256 SampleRate: 44100 FFTLength: 1024 SpectralDescriptorInput: 'linearSpectrum' Enabled Features barkSpectrum, gtccDelta, harmonicRatio Disabled Features linearSpectrum, melSpectrum, erbSpectrum, mfcc, mfccDelta, mfccDeltaDelta gtcc, gtccDeltaDelta, spectralCentroid, spectralCrest, spectralDecrease, spectralEntropy spectralFlatness, spectralFlux, spectralKurtosis, spectralRolloffPoint, spectralSkewness, spectralSlope spectralSpread, pitch To extract a feature, set the corresponding property to true. For example, obj.mfcc = true, adds mfcc to the list of enabled features.
Функции generateMATLABFunction
на объект и укажите имя для сгенерированной функции MATLAB.
functionName = 'extractFeatures';
generateMATLABFunction(afe,functionName)
Сгенерированная функция сохранена в текущей папке.
type extractFeatures
function featureVector = extractFeatures(x) %extractFeatures Extract multiple features from batch audio % featureVector = extractFeatures(audioIn) returns audio features % extracted from audioIn. % % Parameters of the audioFeatureExtractor used to generate this % function must be honored when calling this function. % - Sample rate of the input should be 44100 Hz. % % % % EXAMPLE 1: Extract features % source = dsp.ColoredNoise("SamplesPerFrame",44100); % for ii = 1:10 % audioIn = source(); % featureArray = extractFeatures(audioIn); % % ... do something with featureArray ... % end % % % % EXAMPLE 2: Generate code % targetDataType = "single"; % codegen extractFeatures -args {ones(44100,1,targetDataType)} % source = dsp.ColoredNoise("SamplesPerFrame",44100, ... % "OutputDataType",targetDataType); % for ii = 1:10 % audioIn = source(); % featureArray = extractFeatures_mex(audioIn); % % ... do something with featureArray ... % end % % See also audioFeatureExtractor, dsp.AsyncBuffer, codegen. % Generated by audioFeatureExtractor on 23-Apr-2021 14:34:32 -0400 %#codegen dataType = class(x); [numSamples,numChannels] = size(x); props = coder.const(getProps(dataType)); persistent config outputIndex if isempty(config) [config, outputIndex] = coder.const(@getConfig,dataType,props); end % Preallocate feature vector numHops = floor((numSamples-numel(props.Window))/(numel(props.Window) - props.OverlapLength)) + 1; featureVector = coder.nullcopy(zeros(numHops,props.NumFeatures,numChannels,dataType)); % Short-time Fourier transform Y = stft(x,"Window",props.Window,"OverlapLength",props.OverlapLength,"FFTLength",props.FFTLength,"FrequencyRange","onesided"); Z = reshape(Y,[],numHops*numChannels); Zpower = real(Z.*conj(Z)); % Bark spectrum barkSpectrum = reshape(config.barkSpectrum.FilterBank*Zpower,[],numHops,numChannels); featureVector(:,outputIndex.barkSpectrum,:) = permute(barkSpectrum,[2,1,3]); % ERB spectrum erbSpectrum = reshape(config.erbSpectrum.FilterBank*Zpower,[],numHops,numChannels); % Gammatone-frequency cepstral coefficients (GTCC) gammacc = cepstralCoefficients(erbSpectrum,"NumCoeffs",13,"Rectification","log"); featureVector(:,outputIndex.gtccDelta,:) = audioDelta(gammacc,9); % Periodicity features featureVector(:,outputIndex.harmonicRatio,:) = harmonicRatio(x,props.SampleRate,"Window",props.Window,"OverlapLength",props.OverlapLength); end function props = getProps(dataType) props.Window = cast([0;3.764908042774850471801073581446e-05;0.00015059065189787501637397326703649;0.00033880770582522812262027400720399;0.00060227189741379749676752908271737;0.00094094354992541040516584871511441;0.0013547716606548965145861984638032;0.0018436939086109993546358509775018;0.0024076366639015356341246842930559;0.0030465149988219697441138578142272;0.0037602327006450164681439218838932;0.0045486822861099951431640420196345;0.0054117450176094927805081624683226;0.0063492909210707826339614712196635;0.0073611788055293891908092973608291;0.0084472562843918574948531841073418;0.0096073597983847847103788808453828;0.010841314640186172635338834879803;0.012148934980735714983524076160393;0.0135300238972199116105343819072;0.014984373402728012880658070571371;0.016511764477573964704504305700539;0.018111967102280079888743102856097;0.019784740292217106727434838830959;0.021529832133895587809035987447714;0.023346979822903068946260418670136;0.025235909703481662624824366503162;0.027196337309739360144078545999946;0.029227967408489596845555524851079;0.031330494043712520113587061132421;0.0335036005826305216537264186627;0.035746959763392205378096377899055;0.038060233744356630758431947469944;0.040443074154971114797518794148345;0.042895122148234654524401321395999;0.045416008454738809874129401578102;0.048005353438278330902022617010516;0.050662767153023091637464858649764;0.053387849402242337770729818657856;0.056180189798573032522455150683527;0.059039367825822475221997365224524;0.061964952902296699388529077623389;0.064956504445644269729598363483092;0.068013571939206651784104451508028;0.071135694999863940957141039689304;0.07432240344736740222941762112896;0.077573217375146441554534249007702;0.080887647222580960626459045670344;0.084265193848727382164298660427448;0.087705348607487354506417887023417;0.091207593424208144305964651721297;0.094771400873702615896831957797986;0.098396234259677528566356841110974;0.1020815476955582168372416163038;0.10582678618669683068276299309218;0.10963138571395275588926665477629;0.11349477331863150331159317829588;0.11741636718877052070197919420025;0.12139557674675771625771858452936;0.12543180273827031490085914811061;0.12952443732252039154673184384592;0.13367286416379359215156341633701;0.1378764585242664986175498142984;0.14213458735809070265787568132509;0.14644660940672621363134453531529;0.1508118752955135422055832350452;0.15522972763146652974697303761786;0.159699501102273433428280213775;0.16422052257649077944279270013794;0.16879211120491410813571064863936;0.17341357852311156673152936491533;0.17808422855510425142355757088808;0.18280335791817725610286515802727;0.1875702559288067727827353792236;0.19238420470968659037325210192648;0.19724447929783722743835028268222;0.20215034775378326603600953603745;0.2071010712717805679616844827251;0.21209590429107733067226604362077;0.21713409460819338425707769602013;0.22221488349019885566448806457629;0.22733750578897676808409755722096;0.23250119005645136782689519350242;0.23770515866076558086916747924988;0.24294862790338916935795054996561;0.248230808137141212288412361886;0.25355090388510792553944384053466;0.25890811396043855729942606558325;0.26430163158700109571341840819514;0.2697306445208800251833736183471;0.27519433517269670241844892188965;0.28069188073073614297925360006047;0.28622245328485890203396024844551;0.29178521995118134046975910678157;0.29737934299750506950132944439247;0.3030039799694759228287921359879;0.30865828381745508135480804412509;0.31434140302408120071220309910132;0.32005248173250588905602853628807;0.32579065987528277315021796312067;0.33155507330389000220094430915196;0.33734485391886848137943388792337;0.34315912980055418568525738010067;0.34899702534038590240328403524472;0.354857661372768862229065689462;0.36074015530747349789209010850755;0.36664362126255078955239241622621;0.37256717019774265864384688029531;0.37850991004836798126120811502915;0.38447094585966434809876091094338;0.39044937992156514283692558819894;0.39644431190389073371704853343545;0.40245483899193584820253022371617;0.40848005602242948297586622175004;0.41451905561984930814745098359708;0.42057092833306930490522290710942;0.42663476277231915378962412432884;0.43270964574643688838051502898452;0.43879466240039188829058502960834;0.44488889635305839398426996922353;0.45099142983521961491888419004681;0.4571013438277800600140210462996;0.46321771820016627296823230608425;0.46933963184889565534163580196036;0.47546616283629095089935390205937;0.481596388529320518223642011435;0.48772938573854385246875153825385;0.49386423085714004077573235917953;0.49999999999999994448884876874217;0.50613576914285995922426764082047;0.51227061426145603650894599923049;0.518403611470679481776357988565;0.52453383716370904910064609794063;0.53066036815110428914721296678181;0.53678228179983367152061646265793;0.54289865617221988447482772244257;0.54900857016478032956996457869536;0.55511110364694149499342756826081;0.56120533759960811170941497039166;0.56729035425356300059718250849983;0.57336523722768084621037587567116;0.57942907166693058407247463037493;0.58548094438015063634139778514509;0.59151994397757046151298254699213;0.59754516100806409628631854502601;0.60355568809610926628295146656455;0.60955062007843485716307441180106;0.61552905414033554087893662654096;0.6214900899516319077164894224552;0.62743282980225723033385065718903;0.63335637873744921044760758377379;0.63925984469252650210790989149245;0.64514233862723102674863184802234;0.65100297465961398657441350223962;0.65684087019944570329244015738368;0.66265514608113140759826364956098;0.66844492669610999779905569084804;0.67420934012471722684978203687933;0.67994751826749411094397146371193;0.68565859697591879928779690089868;0.69134171618254480762288949335925;0.69699602003052396614890540149645;0.70262065700249487498751932434971;0.70821478004881854850793843070278;0.71377754671514093143258605778101;0.71930811926926363497614147490822;0.72480566482730335309270230936818;0.73026935547912008583892884416855;0.73569836841299884877543036054703;0.7410918860395613316782714719011;0.74644909611489196343825369694969;0.75176919186285873220043640685617;0.75705137209661077513089821877657;0.76229484133923430810853005823446;0.7674988099435484656396511127241;0.77266249421102317640475121152122;0.77778511650980097780205824165023;0.78286590539180656023177107272204;0.78790409570892272483888518763706;0.7928989287282194320383155172749;0.79784965224621662294168800144689;0.80275552070216271705049848605995;0.80761579529031335411559666681569;0.81242974407119317170611338951858;0.81719664208182263287483237945708;0.82191577144489569306529119785409;0.82658642147688832224616817256901;0.83120788879508600288659181387629;0.83577947742350922055720729986206;0.84030049889772651106056855496718;0.84477027236853352576417819363996;0.84918812470448634677211430243915;0.85355339059327373085750423342688;0.85786541264190929734212431867491;0.86212354147573333484899649192812;0.86632713583620635233728535240516;0.87047556267747938640866323112277;0.87456819726172962958798962063156;0.8786044232532423947645838779863;0.88258363281122953480917203705758;0.88650522668136844117725559044629;0.89036861428604718859958211396588;0.89417321381330316931723700690782;0.89791845230444167214045592118055;0.9016037657403224159224919276312;0.90522859912629738410316804220201;0.90879240657579174467173288576305;0.91229465139251253447127965046093;0.91573480615127267334685257083038;0.91911235277741898386238972307183;0.9224267826248535584454657509923;0.92567759655263259777058237887104;0.92886430500013594802055649779504;0.93198642806079334821589554849197;0.93504349555435561924809917400125;0.93803504709770324510031969111878;0.94096063217417746926685140351765;0.94381981020142691196639361805865;0.94661215059775760671811895008432;0.94933723284697690836253514135024;0.95199464656172172460912861424731;0.9545839915452611901258705984219;0.957104877851765345475598678604;0.95955692584502894071363243710948;0.96193976625564336924156805253006;0.96425304023660773911075239084312;0.96649639941736942283512235007947;0.96866950595628742437526170760975;0.97077203259151034764329324389109;0.9728036626902605288336189914844;0.97476409029651833737517563349684;0.97665302017709687554258835007204;0.97847016786610441219096401255229;0.98021525970778289327256516116904;0.98188803289771997562240812840173;0.98348823552242603529549569429946;0.98501562659727204263049316068646;0.98646997610277997736716315557715;0.98785106501926422950532469258178;0.98915868535981377185350993386237;0.99039264020161521528962111915462;0.99155274371560819801629804715049;0.99263882119447055529803947138134;0.99365070907892916185488729752251;0.9945882549823905627306430687895;0.99545131771388994934568472672254;0.99623976729935503904300730937393;0.9969534850011780857670373734436;0.99759236333609835334357285319129;0.99815630609138894513421291776467;0.9986452283393451034854138015362;0.99905905645007453408368292002706;0.99939772810258620250323247091728;0.99966119229417471636622849473497;0.99984940934810206947247479547514;0.99996235091957230700643322052201;1;0.99996235091957230700643322052201;0.99984940934810206947247479547514;0.99966119229417471636622849473497;0.99939772810258620250323247091728;0.99905905645007453408368292002706;0.9986452283393451034854138015362;0.99815630609138894513421291776467;0.99759236333609835334357285319129;0.9969534850011780857670373734436;0.99623976729935503904300730937393;0.99545131771388994934568472672254;0.9945882549823905627306430687895;0.99365070907892916185488729752251;0.99263882119447055529803947138134;0.99155274371560819801629804715049;0.99039264020161521528962111915462;0.98915868535981377185350993386237;0.98785106501926422950532469258178;0.98646997610277997736716315557715;0.98501562659727204263049316068646;0.98348823552242603529549569429946;0.98188803289771997562240812840173;0.98021525970778289327256516116904;0.97847016786610441219096401255229;0.97665302017709687554258835007204;0.97476409029651833737517563349684;0.9728036626902605288336189914844;0.97077203259151034764329324389109;0.96866950595628742437526170760975;0.96649639941736942283512235007947;0.96425304023660773911075239084312;0.96193976625564336924156805253006;0.95955692584502894071363243710948;0.957104877851765345475598678604;0.9545839915452611901258705984219;0.95199464656172172460912861424731;0.94933723284697690836253514135024;0.94661215059775760671811895008432;0.94381981020142691196639361805865;0.94096063217417746926685140351765;0.93803504709770324510031969111878;0.93504349555435561924809917400125;0.93198642806079334821589554849197;0.92886430500013594802055649779504;0.92567759655263259777058237887104;0.9224267826248535584454657509923;0.91911235277741898386238972307183;0.91573480615127267334685257083038;0.91229465139251253447127965046093;0.90879240657579174467173288576305;0.90522859912629738410316804220201;0.9016037657403224159224919276312;0.89791845230444167214045592118055;0.89417321381330316931723700690782;0.89036861428604718859958211396588;0.88650522668136844117725559044629;0.88258363281122953480917203705758;0.8786044232532423947645838779863;0.87456819726172962958798962063156;0.87047556267747938640866323112277;0.86632713583620635233728535240516;0.86212354147573333484899649192812;0.85786541264190929734212431867491;0.85355339059327373085750423342688;0.84918812470448634677211430243915;0.84477027236853352576417819363996;0.84030049889772651106056855496718;0.83577947742350922055720729986206;0.83120788879508600288659181387629;0.82658642147688832224616817256901;0.82191577144489569306529119785409;0.81719664208182263287483237945708;0.81242974407119317170611338951858;0.80761579529031335411559666681569;0.80275552070216271705049848605995;0.79784965224621662294168800144689;0.7928989287282194320383155172749;0.78790409570892272483888518763706;0.78286590539180656023177107272204;0.77778511650980097780205824165023;0.77266249421102317640475121152122;0.7674988099435484656396511127241;0.76229484133923430810853005823446;0.75705137209661077513089821877657;0.75176919186285873220043640685617;0.74644909611489196343825369694969;0.7410918860395613316782714719011;0.73569836841299884877543036054703;0.73026935547912008583892884416855;0.72480566482730335309270230936818;0.71930811926926363497614147490822;0.71377754671514093143258605778101;0.70821478004881854850793843070278;0.70262065700249487498751932434971;0.69699602003052396614890540149645;0.69134171618254480762288949335925;0.68565859697591879928779690089868;0.67994751826749411094397146371193;0.67420934012471722684978203687933;0.66844492669610999779905569084804;0.66265514608113140759826364956098;0.65684087019944570329244015738368;0.65100297465961398657441350223962;0.64514233862723102674863184802234;0.63925984469252650210790989149245;0.63335637873744921044760758377379;0.62743282980225723033385065718903;0.6214900899516319077164894224552;0.61552905414033554087893662654096;0.60955062007843485716307441180106;0.60355568809610926628295146656455;0.59754516100806409628631854502601;0.59151994397757046151298254699213;0.58548094438015063634139778514509;0.57942907166693058407247463037493;0.57336523722768084621037587567116;0.56729035425356300059718250849983;0.56120533759960811170941497039166;0.55511110364694149499342756826081;0.54900857016478032956996457869536;0.54289865617221988447482772244257;0.53678228179983367152061646265793;0.53066036815110428914721296678181;0.52453383716370904910064609794063;0.518403611470679481776357988565;0.51227061426145603650894599923049;0.50613576914285995922426764082047;0.49999999999999994448884876874217;0.49386423085714004077573235917953;0.48772938573854385246875153825385;0.481596388529320518223642011435;0.47546616283629095089935390205937;0.46933963184889565534163580196036;0.46321771820016627296823230608425;0.4571013438277800600140210462996;0.45099142983521961491888419004681;0.44488889635305839398426996922353;0.43879466240039188829058502960834;0.43270964574643688838051502898452;0.42663476277231915378962412432884;0.42057092833306930490522290710942;0.41451905561984930814745098359708;0.40848005602242948297586622175004;0.40245483899193584820253022371617;0.39644431190389073371704853343545;0.39044937992156514283692558819894;0.38447094585966434809876091094338;0.37850991004836798126120811502915;0.37256717019774265864384688029531;0.36664362126255078955239241622621;0.36074015530747349789209010850755;0.354857661372768862229065689462;0.34899702534038590240328403524472;0.34315912980055418568525738010067;0.33734485391886848137943388792337;0.33155507330389000220094430915196;0.32579065987528277315021796312067;0.32005248173250588905602853628807;0.31434140302408120071220309910132;0.30865828381745508135480804412509;0.3030039799694759228287921359879;0.29737934299750506950132944439247;0.29178521995118134046975910678157;0.28622245328485890203396024844551;0.28069188073073614297925360006047;0.27519433517269670241844892188965;0.2697306445208800251833736183471;0.26430163158700109571341840819514;0.25890811396043855729942606558325;0.25355090388510792553944384053466;0.248230808137141212288412361886;0.24294862790338916935795054996561;0.23770515866076558086916747924988;0.23250119005645136782689519350242;0.22733750578897676808409755722096;0.22221488349019885566448806457629;0.21713409460819338425707769602013;0.21209590429107733067226604362077;0.2071010712717805679616844827251;0.20215034775378326603600953603745;0.19724447929783722743835028268222;0.19238420470968659037325210192648;0.1875702559288067727827353792236;0.18280335791817725610286515802727;0.17808422855510425142355757088808;0.17341357852311156673152936491533;0.16879211120491410813571064863936;0.16422052257649077944279270013794;0.159699501102273433428280213775;0.15522972763146652974697303761786;0.1508118752955135422055832350452;0.14644660940672621363134453531529;0.14213458735809070265787568132509;0.1378764585242664986175498142984;0.13367286416379359215156341633701;0.12952443732252039154673184384592;0.12543180273827031490085914811061;0.12139557674675771625771858452936;0.11741636718877052070197919420025;0.11349477331863150331159317829588;0.10963138571395275588926665477629;0.10582678618669683068276299309218;0.1020815476955582168372416163038;0.098396234259677528566356841110974;0.094771400873702615896831957797986;0.091207593424208144305964651721297;0.087705348607487354506417887023417;0.084265193848727382164298660427448;0.080887647222580960626459045670344;0.077573217375146441554534249007702;0.07432240344736740222941762112896;0.071135694999863940957141039689304;0.068013571939206651784104451508028;0.064956504445644269729598363483092;0.061964952902296699388529077623389;0.059039367825822475221997365224524;0.056180189798573032522455150683527;0.053387849402242337770729818657856;0.050662767153023091637464858649764;0.048005353438278330902022617010516;0.045416008454738809874129401578102;0.042895122148234654524401321395999;0.040443074154971114797518794148345;0.038060233744356630758431947469944;0.035746959763392205378096377899055;0.0335036005826305216537264186627;0.031330494043712520113587061132421;0.029227967408489596845555524851079;0.027196337309739360144078545999946;0.025235909703481662624824366503162;0.023346979822903068946260418670136;0.021529832133895587809035987447714;0.019784740292217106727434838830959;0.018111967102280079888743102856097;0.016511764477573964704504305700539;0.014984373402728012880658070571371;0.0135300238972199116105343819072;0.012148934980735714983524076160393;0.010841314640186172635338834879803;0.0096073597983847847103788808453828;0.0084472562843918574948531841073418;0.0073611788055293891908092973608291;0.0063492909210707826339614712196635;0.0054117450176094927805081624683226;0.0045486822861099951431640420196345;0.0037602327006450164681439218838932;0.0030465149988219697441138578142272;0.0024076366639015356341246842930559;0.0018436939086109993546358509775018;0.0013547716606548965145861984638032;0.00094094354992541040516584871511441;0.00060227189741379749676752908271737;0.00033880770582522812262027400720399;0.00015059065189787501637397326703649;3.764908042774850471801073581446e-05],dataType); props.OverlapLength = cast(256,dataType); props.SampleRate = cast(44100,dataType); props.FFTLength = uint16(1024); props.NumFeatures = uint8(46); end function [config, outputIndex] = getConfig(dataType, props) powerNormalizationFactor = 1/(sum(props.Window)^2); barkFilterbank = designAuditoryFilterBank(props.SampleRate, ... "FrequencyScale","bark", ... "FFTLength",props.FFTLength, ... "OneSided",true, ... "FrequencyRange",[0 22050], ... "NumBands",32, ... "Normalization","bandwidth", ... "FilterBankDesignDomain","linear"); barkFilterbank = barkFilterbank*powerNormalizationFactor; config.barkSpectrum.FilterBank = cast(barkFilterbank,dataType); erbFilterbank = coder.const(@feval,'designAuditoryFilterBank',props.SampleRate, ... "FrequencyScale","erb", ... "FFTLength",props.FFTLength, ... "OneSided",true, ... "FrequencyRange",[0 22050], ... "NumBands",43, ... "Normalization","bandwidth"); erbFilterbank = erbFilterbank*powerNormalizationFactor; config.erbSpectrum.FilterBank = cast(erbFilterbank,dataType); outputIndex.barkSpectrum = uint8(1:32); outputIndex.gtccDelta = uint8(33:45); outputIndex.harmonicRatio = uint8(46); end
Вызов сгенерированной функции эквивалентен вызову extract
на audioFeatureExtrator
объект. Можно заменить вызовы на extract
с вызовами сгенерированной функции в коде. Проверьте эквивалентность между объектом и функцией.
a = extract(afe,audioIn); b = extractFeatures(audioIn); isequal(a,b)
ans = logical
1
Сгенерированная функция содержит текст справки, который указывает на любые требования к входу. В этом примере единственным требованием является то, что входная частота выборки должна быть 44,1 кГц. Текст справки также содержит пользовательские примеры. Эти примеры показывают, как использовать функцию непосредственно в MATLAB и как сгенерировать код C/C + +.
help extractFeatures
extractFeatures Extract multiple features from batch audio featureVector = extractFeatures(audioIn) returns audio features extracted from audioIn. Parameters of the audioFeatureExtractor used to generate this function must be honored when calling this function. - Sample rate of the input should be 44100 Hz. % EXAMPLE 1: Extract features source = dsp.ColoredNoise("SamplesPerFrame",44100); for ii = 1:10 audioIn = source(); featureArray = extractFeatures(audioIn); % ... do something with featureArray ... end % EXAMPLE 2: Generate code targetDataType = "single"; codegen extractFeatures -args {ones(44100,1,targetDataType)} source = dsp.ColoredNoise("SamplesPerFrame",44100, ... "OutputDataType",targetDataType); for ii = 1:10 audioIn = source(); featureArray = extractFeatures_mex(audioIn); % ... do something with featureArray ... end See also audioFeatureExtractor, dsp.AsyncBuffer, codegen.
Запустите первый пример, чтобы увидеть, как использовать функцию для извлечения функций в MATLAB.
source = dsp.ColoredNoise("SamplesPerFrame",44100); for ii = 1:10 audioIn = source(); featureArray = extractFeatures(audioIn); % ... do something with featureArray ... end
Запустите второй пример, чтобы увидеть, как сгенерировать исполняемый файл MATLAB из функции. Затем используйте файл MEX для извлечения функций во время работы в MATLAB. Для запуска следующего кода требуется MATLAB Coder™.
targetDataType = "single"; codegen extractFeatures -args {ones(44100,1,targetDataType)}
Code generation successful.
source = dsp.ColoredNoise("SamplesPerFrame",44100, ... "OutputDataType",targetDataType); for ii = 1:10 audioIn = source(); featureArray = extractFeatures_mex(audioIn); % ... do something with featureArray ... end
Можно использовать audioFeatureExtractor
объект для разработки трубопровода редукции данных в MATLAB. The audioFeatureExtractor
оптимизирован для извлечения функций из аудиосигналов, которые содержат несколько окон данных. Обычно звуковые функции извлекаются по временным шкалам от 5 мс до 100 мс, в зависимости от приложения. Когда вы готовы развернуть систему на устройстве или интегрировать ее в большую систему, можно использовать generateMATLABFunction
чтобы создать функцию MATLAB, подходящую для генерации кода C/C + +. Развертываемые системы часто касаются минимизации задержек. Можно задать IsStreaming
параметр в true
при вызове generateMATLABFunction
чтобы сгенерировать функцию MATLAB, которая оптимизирована для обработки потока. Сгенерированная функция MATLAB принимает, что вход уже был буферизован, и требует фиксированного размера входного кадра. Сгенерированная функция MATLAB также поддерживает любое необходимое состояние для вас между вызовами.
Чтение в аудио файла. Вы будете использовать это аудио файла, чтобы проверить приблизительную эквивалентность audioFeatureExtractor
объект и сгенерированная функция MATLAB.
[audioToVerify,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
Создайте audioFeatureExtractor
объект для извлечения мел частотных кепстральных коэффициентов (MFCC), дельта и дельта-дельта MFCC, спектрального центроида и тангажа. Извлеките функции из окон 30 мс с 20 мс перекрытием между окнами.
afe = audioFeatureExtractor("Window",hann(round(0.03*fs),'periodic'), ... "OverlapLength",round(0.02*fs), ... "SampleRate",fs, ... "mfcc",true, ... "mfccDelta",true, ... "mfccDeltaDelta",true, ... "spectralCentroid",true, ... "pitch",true)
afe = audioFeatureExtractor with properties: Properties Window: [1323x1 double] OverlapLength: 882 SampleRate: 44100 FFTLength: [] SpectralDescriptorInput: 'linearSpectrum' Enabled Features mfcc, mfccDelta, mfccDeltaDelta, spectralCentroid, pitch Disabled Features linearSpectrum, melSpectrum, barkSpectrum, erbSpectrum, gtcc, gtccDelta gtccDeltaDelta, spectralCrest, spectralDecrease, spectralEntropy, spectralFlatness, spectralFlux spectralKurtosis, spectralRolloffPoint, spectralSkewness, spectralSlope, spectralSpread, harmonicRatio To extract a feature, set the corresponding property to true. For example, obj.mfcc = true, adds mfcc to the list of enabled features.
Функции generateMATLABFunction
на объект и укажите имя и полный путь для сгенерированной функции MATLAB. Задайте IsStreaming
на true
чтобы сгенерировать функцию MATLAB, оптимизированную для обработки потока.
filename = fullfile(tempdir,"extractFeatures"); generateMATLABFunction(afe,filename,'IsStreaming',true);
Сгенерированная функция сохранена в tempdir
папка. Потому что mfccDelta
и mfccDeltaDelta
функции требуют состояния, сгенерированная функция включает возможность сброса состояний с помощью опциональной пары "имя-значение" "Reset"
и любой из них true
или false
. Если вы генерируете функцию, которая не требует состояния, "Reset"
параметр не включен в сгенерированную функцию.
cd(tempdir)
type extractFeatures
function featureVector = extractFeatures(x, varargin) %extractFeatures Extract multiple features from streaming audio % featureVector = extractFeatures(audioIn) returns audio features % extracted from audioIn. % % featureVector = extractFeatures(audioIn,"Reset",TF) returns feature extractors % to their initial conditions before extracting features. % % Parameters of the audioFeatureExtractor used to generate this % function must be honored when calling this function. % - Sample rate of the input should be 44100 Hz. % - Frame length of the input should be 1323 samples. % - Successive frames of the input should be overlapped by % 882 samples before calling extractFeatures. % % % % EXAMPLE 1: Extract features % source = dsp.ColoredNoise(); % inputBuffer = dsp.AsyncBuffer; % for ii = 1:10 % audioIn = source(); % write(inputBuffer,audioIn); % while inputBuffer.NumUnreadSamples > 441 % x = read(inputBuffer,1323,882); % featureVector = extractFeatures(x); % % ... do something with featureVector ... % end % end % % % % EXAMPLE 2: Extract features from speech regions only % [audioIn,fs] = audioread("Counting-16-44p1-mono-15secs.wav"); % audioIn = resample(audioIn,44100,fs); % source = dsp.AsyncBuffer(size(audioIn,1)); % write(source,audioIn); % TF = false; % while source.NumUnreadSamples > 441 % x = read(source,1323,882); % isSilence = var(x) < 0.01; % if ~isSilence % featureVector = extractFeatures(x,"Reset",TF); % TF = false; % else % TF = true; % end % % ... do something with featureVector ... % end % % % % EXAMPLE 3: Generate code that does not use reset % targetDataType = "single"; % codegen extractFeatures -args {ones(1323,1,targetDataType)} % source = dsp.ColoredNoise('OutputDataType',targetDataType); % inputBuffer = dsp.AsyncBuffer; % for ii = 1:10 % audioIn = source(); % write(inputBuffer,audioIn); % while inputBuffer.NumUnreadSamples > 441 % x = read(inputBuffer,1323,882); % featureVector = extractFeatures_mex(x); % % ... do something with featureVector ... % end % end % % % % EXAMPLE 4: Generate code that uses reset % targetDataType = "single"; % codegen extractFeatures -args {ones(1323,1,targetDataType),'Reset',true} % [audioIn,fs] = audioread("Counting-16-44p1-mono-15secs.wav"); % audioIn = resample(audioIn,44100,fs); % source = dsp.AsyncBuffer(size(audioIn,1)); % write(source,cast(audioIn,targetDataType)); % TF = false; % while source.NumUnreadSamples > 441 % x = read(source,1323,882); % isSilence = var(x) < 0.01; % if ~isSilence % featureVector = extractFeatures_mex(x,'Reset',TF); % TF = false; % else % TF = true; % end % % ... do something with featureVector ... % end % % See also audioFeatureExtractor, dsp.AsyncBuffer, codegen. % Generated by audioFeatureExtractor on 23-Apr-2021 14:35:34 -0400 %#codegen dataType = class(x); numChannels = size(x,2); props = coder.const(getProps(dataType)); persistent config outputIndex state if isempty(config) [config, outputIndex] = coder.const(@getConfig,dataType,props); state = getState(dataType,numChannels); else assert(state.NumChannels == numChannels) end if nargin==3 if strcmpi(varargin{1},"Reset") && varargin{2} state = reset(state); end end % Preallocate feature vector featureVector = coder.nullcopy(zeros(props.NumFeatures,numChannels,dataType)); % Fourier transform Y = fft(bsxfun(@times,x,props.Window),props.FFTLength); Z = Y(config.OneSidedSpectrumBins,:); Zpower = real(Z.*conj(Z)); % Linear spectrum linearSpectrum = Zpower(config.linearSpectrum.FrequencyBins,:)*config.linearSpectrum.NormalizationFactor; linearSpectrum(1,:) = 0.5*linearSpectrum(1,:); linearSpectrum = reshape(linearSpectrum,[],1,numChannels); % Mel spectrum melSpectrum = reshape(config.melSpectrum.FilterBank*Zpower,[],1,numChannels); % Mel-frequency cepstral coefficients (MFCC) melcc = cepstralCoefficients(melSpectrum,"NumCoeffs",13,"Rectification","log"); featureVector(outputIndex.mfcc,:) = melcc; [melccDelta,state.mfccDelta] = audioDelta(melcc,9,state.mfccDelta); featureVector(outputIndex.mfccDelta,:) = melccDelta; [featureVector(outputIndex.mfccDeltaDelta,:),state.mfccDeltaDelta] = audioDelta(melccDelta,9,state.mfccDeltaDelta); % Spectral descriptors featureVector(outputIndex.spectralCentroid,:) = spectralCentroid(linearSpectrum,config.SpectralDescriptorInput.FrequencyVector); % Periodicity features featureVector(outputIndex.pitch,:) = pitch(x,props.SampleRate,"WindowLength",numel(props.Window),"OverlapLength",props.OverlapLength,"MedianFilterLength",cast(1,"like",x),"Method",'NCF',"Range",coder.const(cast([50 400],"like",x))); end function props = getProps(dataType) props.Window = cast([0;5.6387032669191761158344888826832e-06;2.2554685887743453065468202112243e-05;5.0747566325726189973011059919372e-05;9.0216708695634029169241330237128e-05;0.00014096122277840184011665769503452;0.00020297996404095020039903829456307;0.00027627153366222012564890064822976;0.00036083427856448135884193106903695;0.00045666629145085790852931495464873;0.00056376541084829367989073034550529;0.00068212922115606922091046726563945;0.00081175505270059122864267919794656;0.00095263998179551112599483531084843;0.0011047808308075057759367609833134;0.001268174168228275444647579206503;0.00144281630875153776827346518985;0.0016287033133565165243794581328984;0.0018258309893965374293145487172296;0.00203419489069373016221220495936;0.0022537903176392259929627925885143;0.0024846123172992951033677400118904;0.0027266556835268129788119040313177;0.0029799149570789440488738364365418;0.0032443844257400433761517888342496;0.0035200581244507755940276183537208;0.0038069298354423408703439690725645;0.0041049930883769181200193543190835;0.0044142411604936038216351334995124;0.0047346670767599019491456147079589;0.0050662636100292091079211331816623;0.0054090232812036287413093305076472;0.0057629383594029470749831034481758;0.0061280008621386050648993659706321;0.0065042025554942206611030997009948;0.0068915349543108850305372925504344;0.0072899893223787315399420094763627;0.0076995566726339448315741265105316;0.008120227767361598569806346858968;0.0085519931184036557247907239798224;0.0089948429873734636608162418269785;0.0094487673858749121613698207511334;0.009913756075728086258891380566638;0.010389798569200026090442179338424;0.010876884129241204401949971725116;0.011375001769727999256787143167458;0.01188414025570999621450596350769;0.012404288103663951847721591548179;0.012935433581752309173396042751847;0.01347756471008809686651375159272;0.014030669261005046521972872142214;0.01459473475933348307620462946943;0.015169748482681433277008409277187;0.015755697461721951402324748414685;0.016352568480485274449165444821119;0.016960348076657194571481568345916;0.017579022541882538543944747289061;0.018208577922074309363154043239774;0.018849000017728712030873339244863;0.019500274384245008807425847408012;0.02016238633225159171402651736571;0.020835320927937328594481414256734;0.021519062993388182736254066185211;0.022213597106929605651259862497682;0.022918907603474591994086040358525;0.02363497857487673048382248452981;0.024361793870289027985620577965165;0.02509933709652845124082887195982;0.025847591618445353578437106989441;0.026606540559298896830853209394263;0.027376166801137580275593563783332;0.028156452985185376203247642479255;0.028947381512233305578263298230013;0.029748934543036231747947795156506;0.030561093998715427311196890514111;0.031383841561166136990834729658673;0.032217158673470969176833023084328;0.033061026540318172450838574150112;0.0339154261284257407815800888784;0.034780338166970736768490723989089;0.035655743148023777422395141911693;0.036541621326989126572470922837965;0.037437952723050116343728177525918;0.038344717119619620149251204566099;0.039261894064796187819865735946223;0.040189462871825232248568227078067;0.041127402619565822661229503864888;0.042075692152962140824001835426316;0.043034310083521154499663907699869;0.044003234789794509751459372637328;0.044982444417866696007024529535556;0.045971916881847485480960813220008;0.046971629864370534335193951847032;0.04798156081709631370912916281668;0.049001686961220980442988093273016;0.050031985287990077271302880035364;0.051072432559217451064625947765308;0.052123005307809389119455545369419;0.053183679838293862474074558122084;0.054254432227355209317209983055363;0.055335238324373370311093367490685;0.056426073751968952585400529642357;0.057526913906552734623289779847255;0.058637733958880777773714498835034;0.059758508854614589278497760460596;0.060889213314885726191505455062725;0.062029821836866561035606082441518;0.063180308694345155284821657915018;0.064340647938305295383543125353754;0.065510813397512468458927514802781;0.066690778679103335235822669346817;0.067880517169181642245234797883313;0.06908000203341801981338221594342;0.070289206217655719743930831100442;0.071508102448520294291967047684011;0.072736663234035159320001184823923;0.073974860864241431812615701346658;0.075222667411823096461631621423294;0.076480054732736613143373460843577;0.077746994466846075511057279072702;0.079023458038562588434672306902939;0.080309416657488919000229543598834;0.081604841319068810445713779699872;0.082909702805241125567192739254097;0.084223971685099041639688266513986;0.085547618315553630718994782000664;0.086880612842002546969411014288198;0.088222925199003432439326388703194;0.089574525110952041284662072939682;0.090935382092764971417864217073657;0.092305465450567336649356775524211;0.0936847442823852127880002171878;0.095073187478842358100195042425185;0.096470763723861929772596113252803;0.097877441495373140867286565480754;0.099293189066021692035235446383012;0.10071797450388575434487847815035;0.1021517656731961709581923969381;0.10359453023506115521001902379794;0.10504623564819570713524399252492;0.10650684916965552639922520938853;0.1079763378555757546983784322947;0.10945466856191377047480273176916;0.11094180794519681310106307137175;0.11243772246327410346822261999478;0.11394237837607329444367110227176;0.1154557417463615842656565746438;0.11697777844051099327415954576281;0.11850845412926847011192421632586;0.12004773428852993921722713821509;0.12159558420011912227565176181088;0.1231519689525706895416590214154;0.12471685344191751898534903375548;0.12629020237248228530901883459592;0.12787198025767421150078462233068;0.12946215142078854043461433320772;0.13106067999581216820814688617247;0.13266752992823177548231683431368;0.13428266497584750993610214209184;0.13590604870959038796840445684211;0.13753764451434363769166679958289;0.13917741558976892690679960651323;0.14082532495113619930293680226896;0.14248133543015784052698791128932;0.14414540967582700758953251352068;0.14581751015526028814051073823066;0.14749759915454385694744132706546;0.14918563877958423979919189150678;0.15088159095696357381299890221271;0.15258541743479731023214185370307;0.15429707978359774589449671111652;0.15601653939714066332555830740603;0.1577437574933358011008976973244;0.15947869511510198714532293706725;0.16122131313124526963420635183866;0.16297157223734226594302754165255;0.16472943295662600959872179373633;0.1664948556408764601677319205919;0.16826780047131500994694874862034;0.17004822745950248785717917598959;0.1718360964482409380948979560344;0.17363136711247945109803936247772;0.17543399896022404682582873647334;0.1772439513334501670627219027665;0.17906118340902044128171155534801;0.18088565419960500602059028096846;0.1827173225546063761726145457942;0.1845561471610870918347302449547;0.18640208654470197258135044648952;0.18825509907063320280684592944453;0.19011514294452969142668052882073;0.19198217621344965122531789347704;0.19385615676680656438435335076065;0.19573704233731942236929057798989;0.19762479050196579688503106808639;0.19951935868293863007849608948163;0.20142070414860685501068360281351;0.20332878401447890270858920302999;0.20524355524417009499771324954054;0.20716497465037320147018817806384;0.2090929988958327712111895380076;0.21102758449432229559405982399767;0.21296868781162520134486726419709;0.21491626506651911876488725283707;0.21687027233176314755525027067051;0.21883066553508856433296614341089;0.22079740046019324939408079444547;0.22277043274773855596748717289302;0.22474971789635006524932236970926;0.22673521126362117250607752794167;0.22872686806712028140253778474289;0.23072464338540032979807392621296;0.23272849215901270092388131160988;0.23473836919152257785015081026359;0.23675422915052951600145547672582;0.23877602656868873731710323227162;0.24080371584473742041510035960528;0.24283725124452310017986178536376;0.24487658690203506495208785054274;0.2469216768204384737650514125562;0.24897247487311280345068098540651;0.25102893480469112841291234872187;0.25309101023210422987119727622485;0.25515865464562614839394427690422;0.25723182140992395527945291178185;0.25931046376510846762641904206248;0.26139453482779029247495827803505;0.26348398759213587094762942797388;0.26557877493092885146097614779137;0.26767884959663235111548829081585;0.26978416422245476979924205807038;0.27189467132341849087140417395858;0.27401032329743024718027299968526;0.27613107242635515081730090969359;0.27825687087709327638407330596237;0.28038767070265774306037087626464;0.28252342384325679347512050298974;0.28466408212737781546763926598942;0.28680959727287308469456661441654;0.28895992088804967057313888290082;0.29111500447276039693633720162325;0.29327479941949807784595805060235;0.29543925701449103016216213291045;0.29760832843880313802742421103176;0.29978196476943363979472678693128;0.30196011698042157789245720778126;0.30414273594395091482311954678153;0.30632977243145909085342282196507;0.30852117711474680294969630267587;0.31071690056709111438237869151635;0.31291689326436000762043931899825;0.31512110558612949073875597605365;0.31732948781680236916002968428074;0.31954199014673079215498319172184;0.32175856267333791116413976851618;0.32397915540224497821242266581976;0.32620371824839777818993979963125;0.32843220103719750202486693524406;0.33066455350563117576712102163583;0.33290072530340619749722463893704;0.33514066599408576241359014602494;0.33738432505622639734355061591486;0.33963165188451716058892770888633;0.34188259579092178386261480227404;0.34413710600582092524746258277446;0.34639513167915836344690205805819;0.34865662188158696999096264335094;0.35092152560561823415596904851554;0.35318979176677173237308693387604;0.3554613692047284834174547540897;0.35773620668448380399695452069864;0.36001425289750355052120767140877;0.36229545646288152660474679578329;0.3645797659284973901705484422564;0.36686712977217839082300088193733;0.36915749640286049659820832857804;0.37145081416175262933876410897938;0.37374703132350128864658245220198;0.37604609609735772934868691663723;0.37834795662834563856335989839863;0.38065256099843108872349262128409;0.38295985722769332326720359560568;0.3852697932754972631741452460119;0.38758231704166701270253270195099;0.38989737636766153006107060718932;0.39221491903775018705857746681431;0.39453489278019154840038140719116;0.39685724526841120729514500453661;0.39918192412218334030882260776707;0.40150887690881059688408072361199;0.40383805114430815219606074606418;0.40616939429458620569590721061104;0.40850285377663608787912608022452;0.41083837695971520131976717493671;0.41317591116653479277331939556461;0.41551540367444778079075717869273;0.41785680171663808213367019561701;0.42020005248331032676745167009358;0.42254510312288173778938471514266;0.42489190074317328971176266350085;0.42724039241260347576911726719118;0.42959052516138163113623704703059;0.43194224598270308801417627364572;0.43429550183394410867165902345732;0.43665023963785909444368371623568;0.43900640628377674001825425875722;0.44136394862879907430297521386819;0.44372281349899916902401741936046;0.44608294769062067919307423835562;0.44844429797127816073043504729867;0.45080681108115749911036118646734;0.45317043373421717067373037934885;0.45553511261938994802989100207924;0.45790079440178577119269220929709;0.46026742572389406360500174741901;0.46263495320678782452006316816551;0.46500332345132727729364319202432;0.46737248303936435034344754058111;0.46974237853494726913083923136583;0.47211295648552631387673272911343;0.47448416342315868909906839689938;0.47685594586571544706288250381476;0.47922825031808663487353783239087;0.48160102327338916161636461765738;0.4839742112141723340279497733718;0.48634776061362594568038275610888;0.4887216179367867008309644916153;0.49109572964174674769566308896174;0.4934700421808601022988227668975;0.49584450200195145930237572429178;0.49821905554952328198936584158218;0.50059364926596450207085808870033;0.50296822959275733211370607023127;0.50534274297168657597012497717515;0.50771713584604671876121528839576;0.5100913546618505156615697160305;0.51246534586903635943855306322803;0.51483905592267631412539685697993;0.51721243128418381562738659340539;0.51958541842252126130574652052019;0.52195796381540726649461703345878;0.52433001395052414306263699472765;0.52670151532672448979610635433346;0.5290724144552378938044512324268;0.53144265786087796499259638949297;0.53381219208324737213189337126096;0.53618096367794532142170282895677;0.53854891921777048313657587641501;0.54091600529392891427704626039485;0.54328216851723665214990433014464;0.54564735551932408430531040721689;0.5480115129538408735854204678617;0.55037458749765777454854287498165;0.55273652585207044829473943536868;0.55509727474400061275616735656513;0.55745678092719819218814336636569;0.55981499118344291154869551974116;0.56217185232374244918673866777681;0.56452731118953514144465088975267;0.56688131465388580387809724925319;0.56923380962268710359097667605965;0.57158474303585404818761617207201;0.57393406186852347072857583043515;0.57628171313224818561593565391377;0.57862764387619258776851438597078;0.58097180118832758566327356675174;0.58331413219662286984146248869365;0.58565458407024062470469516483718;0.58799310402072624270886080921628;0.59032963930319937162494170479476;0.59266413721754362953220152121503;0.59499654510959487652144161984324;0.59732681037232915333134997126763;0.59965488044704895465031313506188;0.60198070282456905832901838948601;0.60430422504640035619161153590539;0.60662539470593357382455224069417;0.60894415944962099196402505185688;0.61126046697815716868262825300917;0.613574265047658884419945479749;0.61588550147084297758937054823036;0.61819412411820451325183967128396;0.62050008091919039987516271139611;0.62280331986337666982933569670422;0.62510378900163954263291543611558;0.62740143644732726535551137203583;0.62969621037743139790876512051909;0.63198805903375487869055859846412;0.63427693072407975716231476326357;0.63656277382333270598024910214008;0.63884553677474997801510880890419;0.6411251680910403649704676354304;0.6434016163555449363542493301793;0.64567483022339944298551017709542;0.64794475842268917098465408344055;0.65021134975560856972265355580021;0.65247455309961355229830815005698;0.65473431740857579441694724664558;0.65699059171393381362236141285393;0.65924332512584216114959190235822;0.66149246683432016968851030469523;0.66373796611039681536681200668681;0.66597977230725580177761457889574;0.66821783486137742436028474912746;0.67045210329367888046903090071282;0.67268252721065380228537833318114;0.67490905630550723781624355979147;0.6771316403592920751819406177674;0.67935022924204013783366917778039;0.68156477291389405692711989104282;0.68377522142623514689319108583732;0.68598152492281050385258822643664;0.6881836336408572174505593466165;0.69038149791222469531248862040229;0.69257506816449543318725545759662;0.69476429492210189931000741125899;0.69694912880744452898795771034202;0.69912952054200272478112765384139;0.70130542094744896530755795538425;0.70347678094675636373267479939386;0.70564355156530567114714358467609;0.70780568393199105869939558033366;0.70996312928032068167993884344469;0.71211583894951879791790361196036;0.71426376438562022563871778402245;0.71640685714256879812467104784446;0.71854506888330815783660909801256;0.72067835138087199542411553920829;0.72280665651947229033424946464947;0.72492993629558444279581408409285;0.72704814281903029637987856403925;0.72916122831405749682431860492215;0.73126914512041751859072746810853;0.7333718456944412489306728275551;0.73546928261010990901525019580731;0.73756140856012630813154373754514;0.73964817635698043574166149483062;0.74172953893401494251946814983967;0.7438054493464856253837069743895;0.74587586077262169048651685443474;0.74794072651468002099761633871822;0.74999999999999988897769753748435;0.75205363478205300431511659553507;0.75410158454149056606041767736315;0.75614380308718853740401755203493;0.75818024435728936794021137757227;0.76021086242024094037361692244303;0.76223561147583263064575476164464;0.76425444585622770432564720977098;0.76626732002699426971048524137586;0.76827418858813145696728952316334;0.77027500627509426500694189599017;0.77226972795981363439921096869512;0.77425830865171474393093831167789;0.77624070349873219853975570003968;0.77821686778832033226649400603492;0.78018675694846351120759209152311;0.78215032654867955308475302445004;0.78410753230102325783690275784465;0.78605833006108472016393307058024;0.78800267582898531060209279530682;0.78994052575036977081879285833566;0.79187183611739486721603498153854;0.79379656336971682328851329657482;0.79571466409547197962126574566355;0.7976260950322571208204180948087;0.79953081306810469541801467130426;0.80142877524245537124159000086365;0.80331993874712770420387641934212;0.80520426092728158984357378358254;0.80708169928238282508914380741771;0.80895221146716012050603694660822;0.81081575529256111334319712113938;0.81267228872670305150904823676683;0.81452176989582125710143145624897;0.81636415708521359313465382001596;0.81819940874018171061976545388461;0.82002748346696752168583088860032;0.82184834003368700816594127900316;0.8236619373712610325810601352714;0.82546823457434048698644346586661;0.82726719090222977648352298274403;0.82905876577980497366127110581147;0.83084291879842964156921425455948;0.83261960971686610477604517654981;0.83438879846218294566995155037148;0.83615044513065850395605593803339;0.83790450998868126752938678691862;0.83965095347364671063417063123779;0.84138973619484835886339624266839;0.84312081893436674473463199319667;0.84484416264795458850755949242739;0.84655972846591620584177917407942;0.84826747769398591625389371984056;0.84996737181419823592420925706392;0.85165937248575984686027595671476;0.85334344154591135200860207987716;0.85501954101079014058939264941728;0.85668763307628614800393052064464;0.85834768011889439609518603901961;0.85999964469656453580626020993805;0.86164348954954395054528504260816;0.86327917760121963830499680625508;0.86490667195895287733264922280796;0.86652593591491300362150695946184;0.86813693294690430501958644526894;0.86973962671918958466932281226036;0.87133398108331061582276788612944;0.87291996007890237940785027603852;0.8744975279345055252377960641752;0.87606664906837194983779681933811;0.87762728808926726564720866008429;0.87917940979727082773109714253224;0.88072297918456721177449253445957;0.88225796143623758105434262688505;0.88378432193104394798410794464871;0.88530202624221099316770278164768;0.88681104013820144515989341016393;0.88831132958348923978064703987911;0.88980286073932601809133302595001;0.89128559996450573699178221431794;0.8927595138161221743899886860163;0.89422456905032388085885486361803;0.89568073262306402426702334196307;0.89712797169084534942840036819689;0.89856625361146114094879067124566;0.89999554594473196722503871569643;0.90141581645323576310602220473811;0.90282703310303724641983080800856;0.90422916406440834169444542567362;0.90562217771254749365539282734971;0.90700604262829243040755500260275;0.90838072759882826368027508578962;0.90974620161839281351490171800833;0.91110243388897460548037088301498;0.91244939382100842539813356779632;0.9137870510340646568181455222657;0.91511537535753506578117821845808;0.91643433683131281242140175891109;0.91774390570646813269917174693546;0.91904405244592024537553243135335;0.92033474772510226458166471275035;0.92161596243262366989767997438321;0.92288766767092600407096369963256;0.9241498347569354621100501390174;0.92540243522270904108495415130164;0.92664544081607780334763901919359;0.92787882350128281228052173901233;0.92910255545960795942050935991574;0.9303166090900081286463318974711;0.93152095700973014391621518370812;0.9327155720549322737156217044685;0.93390042728129496474309689801885;0.93507549596463035435078836599132;0.93624075160148412244609517074423;0.93739616790973290250121863209642;0.93854171882917802882673186104512;0.93967737852213262250700154254446;0.94080312137400445848811614268925;0.94191892199387416972911069024121;0.94302475521506712308195119476295;0.9441205960957219645024451892823;0.94520641991935228087839959698613;0.94628220219540493118870472244453;0.94734791865981149427966556686442;0.9484035452755366080168641929049;0.94944905823311898096505956345936;0.95048443395120951748822335503064;0.95150964907710244844452063261997;0.9525246804872621320114944865054;0.95352950528784496952994231833145;0.95452410081521543716576161386911;0.95550844463645723259048736508703;0.95648251454987942565821867901832;0.95744628858551728001202718587592;0.95839974500562763459754478390096;0.95934286230517917815063810849097;0.96027561921233739461456480057677;0.96119799468894473459812388682622;0.96210996793099468060717072148691;0.96301151836910126036173096508719;0.9639026256689626759310840498074;0.96478326973182060299905060674064;0.96565343069491293981343460472999;0.96651308893192156013185467600124;0.96736222505341551425317447865382;0.96820081990728867893380993336905;0.96902885457919052392128378414782;0.96984631039295421395252105867257;0.9706531689110162730571573774796;0.97144941193483402841479801281821;0.97223502150529461651728979632026;0.9730099799031211027511290012626;0.97377426964927193964172147389036;0.97452787350533431887100732637919;0.97527077447391441467061667935923;0.97600295579901996667615549085895;0.97672440096643753371097318449756;0.97743509370410674996776378975483;0.97813501798248525531676023092587;0.97882415801491229334629906588816;0.9795024982579629835299783735536;0.98017002341179981783625407842919;0.98082671842051816213370329933241;0.98147256847248443012432517207344;0.98210755900067159274158257176168;0.98273167568298702700957392153214;0.98334490444259559094319911309867;0.98394723144823725835550476404023;0.9845386431145388694829989617574;0.98511912610232110765196011925582;0.9856886673188984815396906924434;0.98624725391837553267748717189534;0.9867948733019357154816475485859;0.98733151311812628048159012905671;0.98785716126313638518752213713014;0.98837180588107065304370735248085;0.98887543536421562695437614820548;0.98936803835330255907365426537581;0.98984960373776331721273891162127;0.99032012065598029604274188386626;0.99077957849553266456155142805073;0.99122796689343461995491679772385;0.99166527573636975567694662458962;0.99209149516091865717015707559767;0.99250661555378205669342150940793;0.99291062755199721578946991940029;0.99330352204314864561496278838604;0.99368529016557483046767629275564;0.99405592330856717975251513053081;0.99441541311256420598851946124341;0.99476375146934081783456349512562;0.99510093052219028564309155626688;0.995426942666102321233267957723;0.99574178054793371916986188807641;0.99604543706657511226154610994854;0.99633790537311028856493066996336;0.9966191788709715115857079581474;0.99688925121608740198553277878091;0.99714811631702682248601377068553;0.99739576833513576836764968902571;0.9976322016846692619651548739057;0.99785741103291725195845174312126;0.99807139130032496154854015912861;0.99827413766060768551824367023073;0.99846564554085903697711046334007;0.99864591062165453116961089108372;0.99881492883714906305669956054771;0.99897269637516816764843952114461;0.99911920967729472842222548933933;0.99925446543894858031364947237307;0.99937846060946111670375557878288;0.999491192392144789380381553201;0.99959265824435505898293286008993;0.99968285587754857068887304194504;0.99976178325733466856206632655812;0.99982943860352102571908972095116;0.99988582039015394542502690455876;0.99993092734555277800723160908092;0.99996475845233878665396787255304;0.99998731294745724085260007996112;0.99999859032219606813640666587162;0.99999859032219606813640666587162;0.99998731294745724085260007996112;0.99996475845233878665396787255304;0.99993092734555277800723160908092;0.99988582039015394542502690455876;0.99982943860352102571908972095116;0.99976178325733466856206632655812;0.99968285587754857068887304194504;0.99959265824435505898293286008993;0.999491192392144789380381553201;0.99937846060946111670375557878288;0.99925446543894858031364947237307;0.99911920967729472842222548933933;0.99897269637516816764843952114461;0.99881492883714906305669956054771;0.99864591062165453116961089108372;0.99846564554085903697711046334007;0.99827413766060768551824367023073;0.99807139130032496154854015912861;0.99785741103291725195845174312126;0.9976322016846692619651548739057;0.99739576833513576836764968902571;0.99714811631702682248601377068553;0.99688925121608740198553277878091;0.9966191788709715115857079581474;0.99633790537311028856493066996336;0.99604543706657511226154610994854;0.99574178054793371916986188807641;0.995426942666102321233267957723;0.99510093052219028564309155626688;0.99476375146934081783456349512562;0.99441541311256420598851946124341;0.99405592330856717975251513053081;0.99368529016557483046767629275564;0.99330352204314864561496278838604;0.99291062755199721578946991940029;0.99250661555378205669342150940793;0.99209149516091865717015707559767;0.99166527573636975567694662458962;0.99122796689343461995491679772385;0.99077957849553266456155142805073;0.99032012065598029604274188386626;0.98984960373776331721273891162127;0.98936803835330255907365426537581;0.98887543536421562695437614820548;0.98837180588107065304370735248085;0.98785716126313638518752213713014;0.98733151311812628048159012905671;0.9867948733019357154816475485859;0.98624725391837553267748717189534;0.9856886673188984815396906924434;0.98511912610232110765196011925582;0.9845386431145388694829989617574;0.98394723144823725835550476404023;0.98334490444259559094319911309867;0.98273167568298702700957392153214;0.98210755900067159274158257176168;0.98147256847248443012432517207344;0.98082671842051816213370329933241;0.98017002341179981783625407842919;0.9795024982579629835299783735536;0.97882415801491229334629906588816;0.97813501798248525531676023092587;0.97743509370410674996776378975483;0.97672440096643753371097318449756;0.97600295579901996667615549085895;0.97527077447391441467061667935923;0.97452787350533431887100732637919;0.97377426964927193964172147389036;0.9730099799031211027511290012626;0.97223502150529461651728979632026;0.97144941193483402841479801281821;0.9706531689110162730571573774796;0.96984631039295421395252105867257;0.96902885457919052392128378414782;0.96820081990728867893380993336905;0.96736222505341551425317447865382;0.96651308893192156013185467600124;0.96565343069491293981343460472999;0.96478326973182060299905060674064;0.9639026256689626759310840498074;0.96301151836910126036173096508719;0.96210996793099468060717072148691;0.96119799468894473459812388682622;0.96027561921233739461456480057677;0.95934286230517917815063810849097;0.95839974500562763459754478390096;0.95744628858551728001202718587592;0.95648251454987942565821867901832;0.95550844463645723259048736508703;0.95452410081521543716576161386911;0.95352950528784496952994231833145;0.9525246804872621320114944865054;0.95150964907710244844452063261997;0.95048443395120951748822335503064;0.94944905823311898096505956345936;0.9484035452755366080168641929049;0.94734791865981149427966556686442;0.94628220219540493118870472244453;0.94520641991935228087839959698613;0.9441205960957219645024451892823;0.94302475521506712308195119476295;0.94191892199387416972911069024121;0.94080312137400445848811614268925;0.93967737852213262250700154254446;0.93854171882917802882673186104512;0.93739616790973290250121863209642;0.93624075160148412244609517074423;0.93507549596463035435078836599132;0.93390042728129496474309689801885;0.9327155720549322737156217044685;0.93152095700973014391621518370812;0.9303166090900081286463318974711;0.92910255545960795942050935991574;0.92787882350128281228052173901233;0.92664544081607780334763901919359;0.92540243522270904108495415130164;0.9241498347569354621100501390174;0.92288766767092600407096369963256;0.92161596243262366989767997438321;0.92033474772510226458166471275035;0.91904405244592024537553243135335;0.91774390570646813269917174693546;0.91643433683131281242140175891109;0.91511537535753506578117821845808;0.9137870510340646568181455222657;0.91244939382100842539813356779632;0.91110243388897460548037088301498;0.90974620161839281351490171800833;0.90838072759882826368027508578962;0.90700604262829243040755500260275;0.90562217771254749365539282734971;0.90422916406440834169444542567362;0.90282703310303724641983080800856;0.90141581645323576310602220473811;0.89999554594473196722503871569643;0.89856625361146114094879067124566;0.89712797169084534942840036819689;0.89568073262306402426702334196307;0.89422456905032388085885486361803;0.8927595138161221743899886860163;0.89128559996450573699178221431794;0.88980286073932601809133302595001;0.88831132958348923978064703987911;0.88681104013820144515989341016393;0.88530202624221099316770278164768;0.88378432193104394798410794464871;0.88225796143623758105434262688505;0.88072297918456721177449253445957;0.87917940979727082773109714253224;0.87762728808926726564720866008429;0.87606664906837194983779681933811;0.8744975279345055252377960641752;0.87291996007890237940785027603852;0.87133398108331061582276788612944;0.86973962671918958466932281226036;0.86813693294690430501958644526894;0.86652593591491300362150695946184;0.86490667195895287733264922280796;0.86327917760121963830499680625508;0.86164348954954395054528504260816;0.85999964469656453580626020993805;0.85834768011889439609518603901961;0.85668763307628614800393052064464;0.85501954101079014058939264941728;0.85334344154591135200860207987716;0.85165937248575984686027595671476;0.84996737181419823592420925706392;0.84826747769398591625389371984056;0.84655972846591620584177917407942;0.84484416264795458850755949242739;0.84312081893436674473463199319667;0.84138973619484835886339624266839;0.83965095347364671063417063123779;0.83790450998868126752938678691862;0.83615044513065850395605593803339;0.83438879846218294566995155037148;0.83261960971686610477604517654981;0.83084291879842964156921425455948;0.82905876577980497366127110581147;0.82726719090222977648352298274403;0.82546823457434048698644346586661;0.8236619373712610325810601352714;0.82184834003368700816594127900316;0.82002748346696752168583088860032;0.81819940874018171061976545388461;0.81636415708521359313465382001596;0.81452176989582125710143145624897;0.81267228872670305150904823676683;0.81081575529256111334319712113938;0.80895221146716012050603694660822;0.80708169928238282508914380741771;0.80520426092728158984357378358254;0.80331993874712770420387641934212;0.80142877524245537124159000086365;0.79953081306810469541801467130426;0.7976260950322571208204180948087;0.79571466409547197962126574566355;0.79379656336971682328851329657482;0.79187183611739486721603498153854;0.78994052575036977081879285833566;0.78800267582898531060209279530682;0.78605833006108472016393307058024;0.78410753230102325783690275784465;0.78215032654867955308475302445004;0.78018675694846351120759209152311;0.77821686778832033226649400603492;0.77624070349873219853975570003968;0.77425830865171474393093831167789;0.77226972795981363439921096869512;0.77027500627509426500694189599017;0.76827418858813145696728952316334;0.76626732002699426971048524137586;0.76425444585622770432564720977098;0.76223561147583263064575476164464;0.76021086242024094037361692244303;0.75818024435728936794021137757227;0.75614380308718853740401755203493;0.75410158454149056606041767736315;0.75205363478205300431511659553507;0.74999999999999988897769753748435;0.74794072651468002099761633871822;0.74587586077262169048651685443474;0.7438054493464856253837069743895;0.74172953893401494251946814983967;0.73964817635698043574166149483062;0.73756140856012630813154373754514;0.73546928261010990901525019580731;0.7333718456944412489306728275551;0.73126914512041751859072746810853;0.72916122831405749682431860492215;0.72704814281903029637987856403925;0.72492993629558444279581408409285;0.72280665651947229033424946464947;0.72067835138087199542411553920829;0.71854506888330815783660909801256;0.71640685714256879812467104784446;0.71426376438562022563871778402245;0.71211583894951879791790361196036;0.70996312928032068167993884344469;0.70780568393199105869939558033366;0.70564355156530567114714358467609;0.70347678094675636373267479939386;0.70130542094744896530755795538425;0.69912952054200272478112765384139;0.69694912880744452898795771034202;0.69476429492210189931000741125899;0.69257506816449543318725545759662;0.69038149791222469531248862040229;0.6881836336408572174505593466165;0.68598152492281050385258822643664;0.68377522142623514689319108583732;0.68156477291389405692711989104282;0.67935022924204013783366917778039;0.6771316403592920751819406177674;0.67490905630550723781624355979147;0.67268252721065380228537833318114;0.67045210329367888046903090071282;0.66821783486137742436028474912746;0.66597977230725580177761457889574;0.66373796611039681536681200668681;0.66149246683432016968851030469523;0.65924332512584216114959190235822;0.65699059171393381362236141285393;0.65473431740857579441694724664558;0.65247455309961355229830815005698;0.65021134975560856972265355580021;0.64794475842268917098465408344055;0.64567483022339944298551017709542;0.6434016163555449363542493301793;0.6411251680910403649704676354304;0.63884553677474997801510880890419;0.63656277382333270598024910214008;0.63427693072407975716231476326357;0.63198805903375487869055859846412;0.62969621037743139790876512051909;0.62740143644732726535551137203583;0.62510378900163954263291543611558;0.62280331986337666982933569670422;0.62050008091919039987516271139611;0.61819412411820451325183967128396;0.61588550147084297758937054823036;0.613574265047658884419945479749;0.61126046697815716868262825300917;0.60894415944962099196402505185688;0.60662539470593357382455224069417;0.60430422504640035619161153590539;0.60198070282456905832901838948601;0.59965488044704895465031313506188;0.59732681037232915333134997126763;0.59499654510959487652144161984324;0.59266413721754362953220152121503;0.59032963930319937162494170479476;0.58799310402072624270886080921628;0.58565458407024062470469516483718;0.58331413219662286984146248869365;0.58097180118832758566327356675174;0.57862764387619258776851438597078;0.57628171313224818561593565391377;0.57393406186852347072857583043515;0.57158474303585404818761617207201;0.56923380962268710359097667605965;0.56688131465388580387809724925319;0.56452731118953514144465088975267;0.56217185232374244918673866777681;0.55981499118344291154869551974116;0.55745678092719819218814336636569;0.55509727474400061275616735656513;0.55273652585207044829473943536868;0.55037458749765777454854287498165;0.5480115129538408735854204678617;0.54564735551932408430531040721689;0.54328216851723665214990433014464;0.54091600529392891427704626039485;0.53854891921777048313657587641501;0.53618096367794532142170282895677;0.53381219208324737213189337126096;0.53144265786087796499259638949297;0.5290724144552378938044512324268;0.52670151532672448979610635433346;0.52433001395052414306263699472765;0.52195796381540726649461703345878;0.51958541842252126130574652052019;0.51721243128418381562738659340539;0.51483905592267631412539685697993;0.51246534586903635943855306322803;0.5100913546618505156615697160305;0.50771713584604671876121528839576;0.50534274297168657597012497717515;0.50296822959275733211370607023127;0.50059364926596450207085808870033;0.49821905554952328198936584158218;0.49584450200195145930237572429178;0.4934700421808601022988227668975;0.49109572964174674769566308896174;0.4887216179367867008309644916153;0.48634776061362594568038275610888;0.4839742112141723340279497733718;0.48160102327338916161636461765738;0.47922825031808663487353783239087;0.47685594586571544706288250381476;0.47448416342315868909906839689938;0.47211295648552631387673272911343;0.46974237853494726913083923136583;0.46737248303936435034344754058111;0.46500332345132727729364319202432;0.46263495320678782452006316816551;0.46026742572389406360500174741901;0.45790079440178577119269220929709;0.45553511261938994802989100207924;0.45317043373421717067373037934885;0.45080681108115749911036118646734;0.44844429797127816073043504729867;0.44608294769062067919307423835562;0.44372281349899916902401741936046;0.44136394862879907430297521386819;0.43900640628377674001825425875722;0.43665023963785909444368371623568;0.43429550183394410867165902345732;0.43194224598270308801417627364572;0.42959052516138163113623704703059;0.42724039241260347576911726719118;0.42489190074317328971176266350085;0.42254510312288173778938471514266;0.42020005248331032676745167009358;0.41785680171663808213367019561701;0.41551540367444778079075717869273;0.41317591116653479277331939556461;0.41083837695971520131976717493671;0.40850285377663608787912608022452;0.40616939429458620569590721061104;0.40383805114430815219606074606418;0.40150887690881059688408072361199;0.39918192412218334030882260776707;0.39685724526841120729514500453661;0.39453489278019154840038140719116;0.39221491903775018705857746681431;0.38989737636766153006107060718932;0.38758231704166701270253270195099;0.3852697932754972631741452460119;0.38295985722769332326720359560568;0.38065256099843108872349262128409;0.37834795662834563856335989839863;0.37604609609735772934868691663723;0.37374703132350128864658245220198;0.37145081416175262933876410897938;0.36915749640286049659820832857804;0.36686712977217839082300088193733;0.3645797659284973901705484422564;0.36229545646288152660474679578329;0.36001425289750355052120767140877;0.35773620668448380399695452069864;0.3554613692047284834174547540897;0.35318979176677173237308693387604;0.35092152560561823415596904851554;0.34865662188158696999096264335094;0.34639513167915836344690205805819;0.34413710600582092524746258277446;0.34188259579092178386261480227404;0.33963165188451716058892770888633;0.33738432505622639734355061591486;0.33514066599408576241359014602494;0.33290072530340619749722463893704;0.33066455350563117576712102163583;0.32843220103719750202486693524406;0.32620371824839777818993979963125;0.32397915540224497821242266581976;0.32175856267333791116413976851618;0.31954199014673079215498319172184;0.31732948781680236916002968428074;0.31512110558612949073875597605365;0.31291689326436000762043931899825;0.31071690056709111438237869151635;0.30852117711474680294969630267587;0.30632977243145909085342282196507;0.30414273594395091482311954678153;0.30196011698042157789245720778126;0.29978196476943363979472678693128;0.29760832843880313802742421103176;0.29543925701449103016216213291045;0.29327479941949807784595805060235;0.29111500447276039693633720162325;0.28895992088804967057313888290082;0.28680959727287308469456661441654;0.28466408212737781546763926598942;0.28252342384325679347512050298974;0.28038767070265774306037087626464;0.27825687087709327638407330596237;0.27613107242635515081730090969359;0.27401032329743024718027299968526;0.27189467132341849087140417395858;0.26978416422245476979924205807038;0.26767884959663235111548829081585;0.26557877493092885146097614779137;0.26348398759213587094762942797388;0.26139453482779029247495827803505;0.25931046376510846762641904206248;0.25723182140992395527945291178185;0.25515865464562614839394427690422;0.25309101023210422987119727622485;0.25102893480469112841291234872187;0.24897247487311280345068098540651;0.2469216768204384737650514125562;0.24487658690203506495208785054274;0.24283725124452310017986178536376;0.24080371584473742041510035960528;0.23877602656868873731710323227162;0.23675422915052951600145547672582;0.23473836919152257785015081026359;0.23272849215901270092388131160988;0.23072464338540032979807392621296;0.22872686806712028140253778474289;0.22673521126362117250607752794167;0.22474971789635006524932236970926;0.22277043274773855596748717289302;0.22079740046019324939408079444547;0.21883066553508856433296614341089;0.21687027233176314755525027067051;0.21491626506651911876488725283707;0.21296868781162520134486726419709;0.21102758449432229559405982399767;0.2090929988958327712111895380076;0.20716497465037320147018817806384;0.20524355524417009499771324954054;0.20332878401447890270858920302999;0.20142070414860685501068360281351;0.19951935868293863007849608948163;0.19762479050196579688503106808639;0.19573704233731942236929057798989;0.19385615676680656438435335076065;0.19198217621344965122531789347704;0.19011514294452969142668052882073;0.18825509907063320280684592944453;0.18640208654470197258135044648952;0.1845561471610870918347302449547;0.1827173225546063761726145457942;0.18088565419960500602059028096846;0.17906118340902044128171155534801;0.1772439513334501670627219027665;0.17543399896022404682582873647334;0.17363136711247945109803936247772;0.1718360964482409380948979560344;0.17004822745950248785717917598959;0.16826780047131500994694874862034;0.1664948556408764601677319205919;0.16472943295662600959872179373633;0.16297157223734226594302754165255;0.16122131313124526963420635183866;0.15947869511510198714532293706725;0.1577437574933358011008976973244;0.15601653939714066332555830740603;0.15429707978359774589449671111652;0.15258541743479731023214185370307;0.15088159095696357381299890221271;0.14918563877958423979919189150678;0.14749759915454385694744132706546;0.14581751015526028814051073823066;0.14414540967582700758953251352068;0.14248133543015784052698791128932;0.14082532495113619930293680226896;0.13917741558976892690679960651323;0.13753764451434363769166679958289;0.13590604870959038796840445684211;0.13428266497584750993610214209184;0.13266752992823177548231683431368;0.13106067999581216820814688617247;0.12946215142078854043461433320772;0.12787198025767421150078462233068;0.12629020237248228530901883459592;0.12471685344191751898534903375548;0.1231519689525706895416590214154;0.12159558420011912227565176181088;0.12004773428852993921722713821509;0.11850845412926847011192421632586;0.11697777844051099327415954576281;0.1154557417463615842656565746438;0.11394237837607329444367110227176;0.11243772246327410346822261999478;0.11094180794519681310106307137175;0.10945466856191377047480273176916;0.1079763378555757546983784322947;0.10650684916965552639922520938853;0.10504623564819570713524399252492;0.10359453023506115521001902379794;0.1021517656731961709581923969381;0.10071797450388575434487847815035;0.099293189066021692035235446383012;0.097877441495373140867286565480754;0.096470763723861929772596113252803;0.095073187478842358100195042425185;0.0936847442823852127880002171878;0.092305465450567336649356775524211;0.090935382092764971417864217073657;0.089574525110952041284662072939682;0.088222925199003432439326388703194;0.086880612842002546969411014288198;0.085547618315553630718994782000664;0.084223971685099041639688266513986;0.082909702805241125567192739254097;0.081604841319068810445713779699872;0.080309416657488919000229543598834;0.079023458038562588434672306902939;0.077746994466846075511057279072702;0.076480054732736613143373460843577;0.075222667411823096461631621423294;0.073974860864241431812615701346658;0.072736663234035159320001184823923;0.071508102448520294291967047684011;0.070289206217655719743930831100442;0.06908000203341801981338221594342;0.067880517169181642245234797883313;0.066690778679103335235822669346817;0.065510813397512468458927514802781;0.064340647938305295383543125353754;0.063180308694345155284821657915018;0.062029821836866561035606082441518;0.060889213314885726191505455062725;0.059758508854614589278497760460596;0.058637733958880777773714498835034;0.057526913906552734623289779847255;0.056426073751968952585400529642357;0.055335238324373370311093367490685;0.054254432227355209317209983055363;0.053183679838293862474074558122084;0.052123005307809389119455545369419;0.051072432559217451064625947765308;0.050031985287990077271302880035364;0.049001686961220980442988093273016;0.04798156081709631370912916281668;0.046971629864370534335193951847032;0.045971916881847485480960813220008;0.044982444417866696007024529535556;0.044003234789794509751459372637328;0.043034310083521154499663907699869;0.042075692152962140824001835426316;0.041127402619565822661229503864888;0.040189462871825232248568227078067;0.039261894064796187819865735946223;0.038344717119619620149251204566099;0.037437952723050116343728177525918;0.036541621326989126572470922837965;0.035655743148023777422395141911693;0.034780338166970736768490723989089;0.0339154261284257407815800888784;0.033061026540318172450838574150112;0.032217158673470969176833023084328;0.031383841561166136990834729658673;0.030561093998715427311196890514111;0.029748934543036231747947795156506;0.028947381512233305578263298230013;0.028156452985185376203247642479255;0.027376166801137580275593563783332;0.026606540559298896830853209394263;0.025847591618445353578437106989441;0.02509933709652845124082887195982;0.024361793870289027985620577965165;0.02363497857487673048382248452981;0.022918907603474591994086040358525;0.022213597106929605651259862497682;0.021519062993388182736254066185211;0.020835320927937328594481414256734;0.02016238633225159171402651736571;0.019500274384245008807425847408012;0.018849000017728712030873339244863;0.018208577922074309363154043239774;0.017579022541882538543944747289061;0.016960348076657194571481568345916;0.016352568480485274449165444821119;0.015755697461721951402324748414685;0.015169748482681433277008409277187;0.01459473475933348307620462946943;0.014030669261005046521972872142214;0.01347756471008809686651375159272;0.012935433581752309173396042751847;0.012404288103663951847721591548179;0.01188414025570999621450596350769;0.011375001769727999256787143167458;0.010876884129241204401949971725116;0.010389798569200026090442179338424;0.009913756075728086258891380566638;0.0094487673858749121613698207511334;0.0089948429873734636608162418269785;0.0085519931184036557247907239798224;0.008120227767361598569806346858968;0.0076995566726339448315741265105316;0.0072899893223787315399420094763627;0.0068915349543108850305372925504344;0.0065042025554942206611030997009948;0.0061280008621386050648993659706321;0.0057629383594029470749831034481758;0.0054090232812036287413093305076472;0.0050662636100292091079211331816623;0.0047346670767599019491456147079589;0.0044142411604936038216351334995124;0.0041049930883769181200193543190835;0.0038069298354423408703439690725645;0.0035200581244507755940276183537208;0.0032443844257400433761517888342496;0.0029799149570789440488738364365418;0.0027266556835268129788119040313177;0.0024846123172992951033677400118904;0.0022537903176392259929627925885143;0.00203419489069373016221220495936;0.0018258309893965374293145487172296;0.0016287033133565165243794581328984;0.00144281630875153776827346518985;0.001268174168228275444647579206503;0.0011047808308075057759367609833134;0.00095263998179551112599483531084843;0.00081175505270059122864267919794656;0.00068212922115606922091046726563945;0.00056376541084829367989073034550529;0.00045666629145085790852931495464873;0.00036083427856448135884193106903695;0.00027627153366222012564890064822976;0.00020297996404095020039903829456307;0.00014096122277840184011665769503452;9.0216708695634029169241330237128e-05;5.0747566325726189973011059919372e-05;2.2554685887743453065468202112243e-05;5.6387032669191761158344888826832e-06],dataType); props.OverlapLength = cast(882,dataType); props.SampleRate = cast(44100,dataType); props.FFTLength = uint16(1323); props.NumFeatures = uint8(41); end function [config, outputIndex] = getConfig(dataType, props) powerNormalizationFactor = 1/(sum(props.Window)^2); config.OneSidedSpectrumBins = uint16(1:662); linearSpectrumFrequencyBins = 1:662; config.linearSpectrum.FrequencyBins = uint16(linearSpectrumFrequencyBins); config.linearSpectrum.NormalizationFactor = cast(2*powerNormalizationFactor,dataType); melFilterbank = designAuditoryFilterBank(props.SampleRate, ... "FrequencyScale","mel", ... "FFTLength",props.FFTLength, ... "OneSided",true, ... "FrequencyRange",[0 22050], ... "NumBands",32, ... "Normalization","bandwidth", ... "FilterBankDesignDomain","linear"); melFilterbank = melFilterbank*powerNormalizationFactor; config.melSpectrum.FilterBank = cast(melFilterbank,dataType); FFTLength = cast(props.FFTLength,'like',props.SampleRate); w = (props.SampleRate/FFTLength)*(linearSpectrumFrequencyBins-1); w(end) = props.SampleRate*(FFTLength-1)/(2*FFTLength); config.SpectralDescriptorInput.FrequencyVector = cast(w(:),dataType); outputIndex.mfcc = uint8(1:13); outputIndex.mfccDelta = uint8(14:26); outputIndex.mfccDeltaDelta = uint8(27:39); outputIndex.spectralCentroid = uint8(40); outputIndex.pitch = uint8(41); end function state = getState(dataType, numChannels) state.NumChannels = numChannels; state.mfccDelta = zeros(8,13,numChannels,dataType); state.mfccDeltaDelta = zeros(8,13,numChannels,dataType); end function state = reset(state) state.mfccDelta(:,:,:) = 0; state.mfccDeltaDelta(:,:,:) = 0; end
Сгенерированная функция содержит текст справки, который указывает на любые требования к входу. В этом примере частота дискретизации входа должна быть 44,1 кГц, вход системы координат для функции должен быть 1323 дискретизации, и последующие системы координат должны быть перекрыты 882 выборками перед вызовом функции. Различия между audioFeatureExtractor
объект и функция описаны более подробно в аппроксимации эквивалентности между audioFeatureExtractor и Generated Function.
help extractFeatures
extractFeatures Extract multiple features from streaming audio featureVector = extractFeatures(audioIn) returns audio features extracted from audioIn. featureVector = extractFeatures(audioIn,"Reset",TF) returns feature extractors to their initial conditions before extracting features. Parameters of the audioFeatureExtractor used to generate this function must be honored when calling this function. - Sample rate of the input should be 44100 Hz. - Frame length of the input should be 1323 samples. - Successive frames of the input should be overlapped by 882 samples before calling extractFeatures. % EXAMPLE 1: Extract features source = dsp.ColoredNoise(); inputBuffer = dsp.AsyncBuffer; for ii = 1:10 audioIn = source(); write(inputBuffer,audioIn); while inputBuffer.NumUnreadSamples > 441 x = read(inputBuffer,1323,882); featureVector = extractFeatures(x); % ... do something with featureVector ... end end % EXAMPLE 2: Extract features from speech regions only [audioIn,fs] = audioread("Counting-16-44p1-mono-15secs.wav"); audioIn = resample(audioIn,44100,fs); source = dsp.AsyncBuffer(size(audioIn,1)); write(source,audioIn); TF = false; while source.NumUnreadSamples > 441 x = read(source,1323,882); isSilence = var(x) < 0.01; if ~isSilence featureVector = extractFeatures(x,"Reset",TF); TF = false; else TF = true; end % ... do something with featureVector ... end % EXAMPLE 3: Generate code that does not use reset targetDataType = "single"; codegen extractFeatures -args {ones(1323,1,targetDataType)} source = dsp.ColoredNoise('OutputDataType',targetDataType); inputBuffer = dsp.AsyncBuffer; for ii = 1:10 audioIn = source(); write(inputBuffer,audioIn); while inputBuffer.NumUnreadSamples > 441 x = read(inputBuffer,1323,882); featureVector = extractFeatures_mex(x); % ... do something with featureVector ... end end % EXAMPLE 4: Generate code that uses reset targetDataType = "single"; codegen extractFeatures -args {ones(1323,1,targetDataType),'Reset',true} [audioIn,fs] = audioread("Counting-16-44p1-mono-15secs.wav"); audioIn = resample(audioIn,44100,fs); source = dsp.AsyncBuffer(size(audioIn,1)); write(source,cast(audioIn,targetDataType)); TF = false; while source.NumUnreadSamples > 441 x = read(source,1323,882); isSilence = var(x) < 0.01; if ~isSilence featureVector = extractFeatures_mex(x,'Reset',TF); TF = false; else TF = true; end % ... do something with featureVector ... end See also audioFeatureExtractor, dsp.AsyncBuffer, codegen.
Примеры в справке показывают, как использовать функцию непосредственно в MATLAB и как сгенерировать код C/C + +. Запустите первый пример, чтобы увидеть, как использовать функцию для извлечения функций в MATLAB.
source = dsp.ColoredNoise(); inputBuffer = dsp.AsyncBuffer; for ii = 1:10 audioIn = source(); write(inputBuffer,audioIn); while inputBuffer.NumUnreadSamples > 441 x = read(inputBuffer,1323,882); featureVector = extractFeatures(x); % ... do something with featureVector ... end end
Запустите второй пример, чтобы увидеть, как извлечь функции в MATLAB при использовании дополнительной "Reset"
Пара "имя-значение". The Reset
пара "имя-значение" позволяет вам сбросить состояния в функции. Например, если вы занимаетесь только извлечением функций из областей звонкой речи и хотите избегать накладных расходов на извлечение функций постоянно, можно использовать "Reset"
параметр, чтобы избежать информации о функции кровотечения между областями.
[audioIn,fs] = audioread("Counting-16-44p1-mono-15secs.wav"); source = dsp.AsyncBuffer(size(audioIn,1)); write(source,audioIn); TF = false; while source.NumUnreadSamples > 441 x = read(source,1323,882); isSilence = var(x) < 0.01; if ~isSilence featureVector = extractFeatures(x,"Reset",TF); TF = false; else TF = true; end % ... do something with featureVector ... end
Запустите третий пример, чтобы увидеть, как сгенерировать код, который не включает в себя возможность сброса состояния. При генерации кода, который не использует 'Reset'
параметр, задайте только прототип для аудио входного параметра. Следующий код требует MATLAB Coder™.
targetDataType = "single"; codegen extractFeatures -args {ones(1323,1,targetDataType)}
Code generation successful.
source = dsp.ColoredNoise('OutputDataType',targetDataType); inputBuffer = dsp.AsyncBuffer; for ii = 1:10 audioIn = source(); write(inputBuffer,audioIn); while inputBuffer.NumUnreadSamples > 441 x = read(inputBuffer,1323,882); featureVector = extractFeatures_mex(x); % ... do something with featureVector ... end end
Запустите четвертый пример, чтобы увидеть, как сгенерировать код, который может сбросить состояние. При генерации кода, который использует 'Reset'
параметр, задайте входные параметры прототипа для полной сигнатуры функции. Следующий код требует MATLAB Coder™.
targetDataType = "single"; codegen extractFeatures -args {ones(1323,1,targetDataType),'Reset',true}
Code generation successful.
[audioIn,fs] = audioread("Counting-16-44p1-mono-15secs.wav"); source = dsp.AsyncBuffer(size(audioIn,1)); write(source,cast(audioIn,targetDataType)); TF = false; while source.NumUnreadSamples > 441 x = read(source,1323,882); isSilence = var(x) < 0.01; if ~isSilence featureVector = extractFeatures_mex(x,'Reset',TF); TF = false; else TF = true; end % ... do something with featureVector ... end
Аппроксимация эквивалентности между audioFeatureExtractor
и сгенерированная функция
Когда вы звоните extract
использование audioFeatureExtractor
, вход буферизуется внутри перед редукцией данных. Выходы extract
является массивом L-на-M-на-N, где L - количество векторов функций и равно количеству окон анализа. M - количество функций, извлеченных в каждом окне анализа. N - количество каналов.
featuresA = extract(afe,audioToVerify); [L,M,N] = size(featuresA)
L = 1551
M = 41
N = 1
Когда вы вызываете сгенерированную функцию, extractFeatures
, вход должен представлять одну систему координат аудио данных. Выходом из сгенерированной функции является M-на-N матрица, где M - количество извлеченных признаков, а N - количество каналов. Используйте сгенерированную функцию, чтобы извлечь функции из аудиосигнала audioIn
. Используйте dsp.AsyncBuffer
объект, чтобы буферизировать вход в необходимую длину системы координат и длину перекрытия перед вызовом extractFeatures
. Измените форму извлеченных векторов функций так, чтобы они совпадали с выходом из audioFeatureExtractor
.
frameLength = 1323; overlapLength = 882; hopLength = frameLength - overlapLength; featuresB = zeros(L,M,N); buff = dsp.AsyncBuffer('Capacity',numel(audioToVerify)); write(buff,audioToVerify); hop = 1; while buff.NumUnreadSamples > hopLength if hop==1 x = read(buff,frameLength); features = extractFeatures(x,'Reset',true); else x = read(buff,frameLength,overlapLength); features = extractFeatures(x); end featuresB(hop,:,:) = reshape(features,[1,M,N]); hop = hop + 1; end
Визуализируйте различие между выходом из audioFeatureExtractor
и сгенерированную функцию. Различия между системами координат меньше 1.8e-14
и обусловлены тем, что различные пути кода оптимизируются для пакетной и потоковой обработки.
differenceBetweenFrames = sum(abs(featuresA-featuresB),2); plot(differenceBetweenFrames) xlabel('Frame') title('Absolute Difference Between Feature Vectors')
afe
- Входной объектaudioFeatureExtractor
объектВходной объект, заданный как audioFeatureExtractor
объект.
fileName
- Имя файлаИмя файла, где сохранена сгенерированная функция, заданное как вектор символов или строковый скаляр.
Типы данных: char
| string
TF
- Флаг, чтобы указать, является ли функция потоковойfalse
(по умолчанию) | true
Флаг для определения, предназначена ли сгенерированная функция для обработки потока, задается как true
или false
.
Типы данных: logical
audioFeatureExtractor
| dsp.AsyncBuffer
| vggishFeatures
| codegen
(MATLAB CODER)
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.