Error converting Logical to Char (Horzcat Error)

afe = audioFeatureExtractor( ...
'SampleRate',fs, ...
'FFTLength',512, ...
'Window',hann(frameSamples,'periodic'), ...
'OverlapLength',frameSamples - hopSamples, ...
'barkSpectrum',true);
numBands = 50;
setExtractorParams(afe,'barkSpectrum','NumBands',numBands,'WindowNormalization',false);
In this line of code, I am receiving an error of converting logical to char (Horzcat error). How to solve this issue?

4 Comments

What is the full trace of the error? (all the red text)
Try to make a MWE so we can run your code without any other dependencies and can reproduce your issue.
angry paul
angry paul on 20 Apr 2021
Edited: Rik on 20 Apr 2021
In the section of compute audit spectra,I tried to reproduce the code.
Wrong use of horzcat
The following error occurred while converting from logical to char:
Unable to convert from logical to char.
Error audiofeatureextractor / setextractorparams (line 398)
if isscalar([varargin{:}])
fs = 16e3; % Known sample rate of the data set.
segmentDuration = 1;
frameDuration = 0.025;
hopDuration = 0.010;
segmentSamples = round(segmentDuration*fs);
frameSamples = round(frameDuration*fs);
hopSamples = round(hopDuration*fs);
overlapSamples = frameSamples - hopSamples;
FFTLength = 512;
numBands = 50;
afe = audioFeatureExtractor( ...
'SampleRate',fs, ...
'FFTLength',FFTLength, ...
'Window',hann(frameSamples,'periodic'), ...
'OverlapLength',overlapSamples, ...
'barkSpectrum',true);
setExtractorParams(afe,'barkSpectrum','NumBands',numBands,'WindowNormalization',false);
disp('completed without error')
completed without error
Which release are you using?

Sign in to comment.

Answers (1)

It is a bug in some versions of Audio System Toolbox. In later versions the line
if isscalar([varargin{:}])
has been replaced with
numin = numel(varargin);
if numin==1 && isscalar([varargin{:}])
I will post exact line numbers once I finish installing the old version to check against.
The problem was fixed by no later than R2020b

7 Comments

R2020a, the code is in a single .m instead of an @ class directory.
In R2020a, and possibly some earlier versions, but not R2020b or later:
edit(fullfile(matlabroot, 'toolbox/audio/audio/audioFeatureExtractor.m'))
Look for lines 397 and 398
numin = numel(varargin);
if isscalar([varargin{:}])
Change that to
numin = numel(varargin);
if numin==1 && isscalar([varargin{:}])
and save.
You will need to have write access to the appropriate directory, which might require you to have started MATLAB with "Run As Administrator"
sorry,I'm using the 2020a version,I took your approach, but there were new mistakes.
Misuse matlabshared.fusionutils.internal .setProperties>validateparameter (line 77)
Property / value is not valid for group parameter.
Error matlabshared.fusionutils.internal .setProperties (line 67)
validateparameter(param, obj);
Error audiofeatureextractor / setextractorparams (line 406)
params = matlabshared.fusionutils.internal .setProperties(defaults, numin, varargin{:});
'WindowNormalization' is not a supported parameter in your release.
Sir thank you so much for your help, I got my mistake.
may i ask how you solved the issue about the 'windowNormalization' not a supported parameter? because im having the same problem
R2020b was the first release to support WindowNormalization.
In R2020a and before, there is a 'Normalization' parameter that can be set to 'area' or 'bandwidth', but this is not the same thing.
In R2020b, 'Normalization' was renamed to 'FeatureBankNormalization', and 'WindowNormalization' was added.
I do not seem to find any information as to what WIndowNormalization actually does.
ahh I see. Thank you so much for replying!

Sign in to comment.

Categories

Tags

Asked:

on 20 Apr 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!