Хранить максимальную частоту - PullRequest
0 голосов
/ 01 января 2019

Я работаю над сценарием, который выполняет БПФ заданного короткого аудиофайла в цикле.Я также хочу сохранить пиковую частоту, но я не знаю, как это сделать.

Код выглядит примерно так:

n = ...
Frequencies = zeros(1,n); % Allocating memory for the peak frequencies

for k = 1:n
    str(k)
    textFileName = [num2str(k) '.m4a'];
    [data,fs] = audioread(textFileName);

    %...
    % Fast Fourier transform and plotting part works ok
    %...

    [peaks,frequencies] = findpeaks(abs(cutP2),cutf,'MinPeakHeight',10e-3);

    % Here starts the problem
    maximum_Peak = max(peaks);
    Frequencies(k) = ... % I need to store the frequency which is coupled 
                         % with the maximum amplitude but I do not know how
end

close(figure(n)) %The loop opens one redundant blank plot, I could not 
                 %find out any other way to close it

Я не хочу хранить амплитуды пикачастоты, но частоты пиковых амплитуд.Если бы вы могли помочь мне с избыточной фигурой, я был бы счастлив.Я пытался реализовать оператор if, но не сработал.

1 Ответ

0 голосов
/ 01 января 2019

max содержит второй выход, который возвращает индекс максимального значения.Используйте это второе значение для хранения значения интереса.

[maximum_Peak,I] = max(peaks); %Note I Use 'I' for index - personal habit
Frequencies(k) = frequencies(I);

Кроме того, если ваша цель состоит только в том, чтобы найти максимальное количество точек, findpeaks может быть излишним, и вы потенциально можете использовать:

[maximum_Peak,I] = max(abs(cutP2));
%Might want to check that max is high enough
Frequencies(k) = cutf(I);

Обратите внимание, что хотя код похож, он не тот и зависит от того, что вы хотите сделать.

И, наконец, несколько незапрошенных советов: использование frequencies и Frequencies напоминает красный флаг.Обычно различия, основанные на капитализации, не очень хорошая идея.Рассмотрим переименование последнего в freq_of_max_amp

...