My system
- OS: Windows 10 / Windows 7
- Octave version: Version 6.4.0
- Installation method: octave-6.4.0-w64-installer.exe
Hi,
I have been having some very rare occurrences (about 0.15% based on 15k iterations) where the following code does not work.
The files are all generated by a single program and are supposed to strictly follow the same format.
I can see that the header changes but I don’t see why it should affect the rest of the file.
The equivalent function in Matlab never fails.
I can’t figure out why but the last columns are not recognized properly for some reasons.
Any help would be appreciated
##Path2filename = 'Spectrum_ABEC_KO.txt'; % not working, 0.15% of files
##Path2filename = 'Spectrum_ABEC_OK.txt'; % working
##should yield SPL size 40*37
delimiter = ' ';
startRow = 39;
endRow = 78;
formatSpec = '%f%f%f%[^\n]';
fileID = fopen(Path2filename,'r');
dataArrayZ = textscan(fileID, formatSpec, endRow-startRow+1, 'Delimiter', delimiter, 'MultipleDelimsAsOne', true, 'HeaderLines', startRow-1, 'ReturnOnError', false, 'EndOfLine', '\n');
fclose(fileID);
## Always works
freqZ = cell2mat(dataArrayZ(1));
ZRe = cell2mat(dataArrayZ(2));
ZIm = cell2mat(dataArrayZ(3));
RadZ = [ZRe ZIm]; % always ok
% Clear temporary variables
clearvars delimiter startRow endRow formatSpec dataArrayZ ans;
delimiter = ' ';
startRow = 105;
endRow = 144;
##formatSpec = '%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%[^\n\r]';
##fileID = fopen(Path2filename,'r');
##dataArray = textscan(fileID, formatSpec, endRow-startRow+1, 'Delimiter', delimiter, 'MultipleDelimsAsOne', true, 'HeaderLines', startRow-1, 'ReturnOnError', false, 'EndOfLine', '\r\n');
##fclose(fileID);
##size(dataArray)
##Freq = cell2mat(dataArray(1));
##SpectrumABEC = cell2mat(dataArray(2:end-1)); % drop the last col empty cells
##size(dataArray)% no error but only every other line
##Matlab version always works
##formatSpec = '%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%[^\n\r]';
##fileID = fopen(Path2filename,'r');
##dataArray = textscan(fileID, formatSpec, endRow-startRow+1, 'Delimiter', delimiter, 'MultipleDelimsAsOne', true, 'TextType', 'string', 'HeaderLines', startRow-1, 'ReturnOnError', false, 'EndOfLine', '\r\n');
formatSpec = '%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%[^\n]';
fileID = fopen(Path2filename,'r');
dataArray = textscan(fileID, formatSpec, endRow-startRow+1, 'Delimiter', delimiter, 'MultipleDelimsAsOne', true, 'HeaderLines', startRow-1, 'ReturnOnError', false, 'EndOfLine', '\n');
fclose(fileID);
size(dataArray)
Freq = cell2mat(dataArray(1));
SpectrumABEC = cell2mat(dataArray(2:end-1)); % drop the last col empty
[~, col] = size(SpectrumABEC);
NbSpectra = col/2;
Pref = 2e-5;
for k = 1:NbSpectra
SPL(:,k) = 20*log10( abs( ( ( SpectrumABEC(:,2*k-1) + 1i*SpectrumABEC(:,2*k) ) /sqrt(2) ) / Pref ) ); % RMS value
deg(k,1) = (k-1)*5;
end
size(SPL)
figure()
subplot (211)
semilogx(freqZ, RadZ(:,1), 'k')
hold on
semilogx(freqZ, RadZ(:,2), 'k--')
grid on
ylabel('Z')
xlabel('Frequency [Hz]')
legend('ReZ', 'ImZ')
title('Waveguide Z');
subplot (212)
semilogx(Freq, SPL)
grid on
ylabel('SPL [dB]')
xlabel('Frequency [Hz]')
legend('SPL 5 deg step')
title('Waveguide SPL');
Spectrum_ABEC_OK.txt (66.3 KB)
Spectrum_ABEC_KO.txt (66.5 KB)