Почему мой код MATLAB печатает каждое значение в цикле for?

У меня есть код, который разбивает звуковой файл на фрагменты по 1 секунде, вычисляет среднеквадратичное значение фрагмента, а затем отображает все фрагменты. Он работает нормально, пока я не отредактировал его, чтобы он читал папку, а не один загружаемый пользователем файл за раз. Теперь он печатает каждое значение fs (все 32 КБ), что, очевидно, сильно замедляет работу скрипта. Вот новый скрипт:

DirIn = 'D:\Trial'
eval(['filelist=dir(''' DirIn '/*.wav'')']) 


for i = 1:length(filelist)
[y,fs] = audioread(strcat(DirIn,'/',filelist(i).name))
npts = length(y);
chunkDur = 1; % length of chunk to analyze in seconds

systemCal = 0; % this should be whatever dB corresponds to an amplitude of 1 in wav file


chunkPts = fs * chunkDur;
rms = [];

for i = 1:chunkPts:npts-chunkPts
    chunkRMS = 20 * log10(std(y(i: i + chunkPts))) + systemCal; % rms of chunk in dB
    rms = [rms; chunkRMS];
end

t = [0: length(rms) - 1] * chunkDur; % time scale
plot(t, rms)
xlabel('Time (s)');
ylabel('RMS dB');
end

Для справки, вот оригинал, который работает:

npts = length(data);
chunkDur = 1; % length of chunk to analyze in seconds

systemCal = 0; % this should be whatever dB corresponds to an amplitude of 1 in wav file


chunkPts = fs * chunkDur;
rms = [];

for i = 1:chunkPts:npts-chunkPts
    chunkRMS = 20 * log10(std(data(i: i + chunkPts))) + systemCal; % rms of chunk in dB
    rms = [rms; chunkRMS];
end

t = [0: length(rms) - 1] * chunkDur; % time scale
plot(t, rms)
xlabel('Time (s)');
ylabel('RMS dB');

person brc    schedule 14.11.2020    source источник


Ответы (1)


Вы пропустили точку с запятой ; в конце строки [y,fs] = audioread(strcat(DirIn,'/',filelist(i).name)). Это означает конец строки и подавляет вывод строки кода. На этом есть хорошая запись в блоге. здесь.

person max    schedule 14.11.2020