counting the number of frequency in wav file

6 ビュー (過去 30 日間)
faiz hazizi
faiz hazizi 2018 年 4 月 24 日
コメント済み: faiz hazizi 2018 年 4 月 29 日
hi, i would like to count the number of frequency on my sample audio file. it is a recorded drum audio file which contain 8 beat of kick pedal in 7 seconds. so the problem is, how to make a simulation to count the number of kick pedal in this audio file (.wav)
here are my .wav file
[y,fs]=audioread('C:\Users\Faiz\Desktop\Kick.wav');
t=linspace(0,length(y)/fs,length(y));
plot (t,y)
  7 件のコメント
faiz hazizi
faiz hazizi 2018 年 4 月 25 日
sorry sir, but i dont understand ? why is it need to calculate the rms value ? and what is the relationship between rms value and findpeaks ? i do found the coding of the findpeaks which is numel(findpeaks(your_signal)) but it didn't works on my work. and i don't understand what is the "(your_signal)"should be ? is it .wav file or what ?
Jan
Jan 2018 年 4 月 26 日
@faiz hazizi: Remember that a diagram without labels does not explain anything. What do the two diagram represent?
The original signal has positive and negative values. You are not interested in the maximum value, but in the maximum amplitude. This can be positive or negative. Using abs helps to move all values to the positive side. If you have a single signal (mono sound), this is exactly the same as RMS: The mean of a scalar is the scalar, and Root of Squared value makes the sign positive. For a stereo signal, RMS considers both channels.
There is no "relationship" between RMS and findpeaks. The first one converts the signal to do what you want, the second one finds the peaks.
"your_signal" is the "y" in your code: The variable in which the audio signal is stored.

サインインしてコメントする。

採用された回答

Jan
Jan 2018 年 4 月 26 日
[y, fs] = audioread('C:\Users\Faiz\Desktop\Kick.wav');
yRMS = sqrt(sum(y .^ 2, 2)); % Root mean square, same as abs(y) for mono signal
[pk, loc] = findpeaks(yRMS, 'MinPeakHeight', std(yRMS));
See doc findpeaks for more methods.
  1 件のコメント
faiz hazizi
faiz hazizi 2018 年 4 月 29 日
thank you sir, appreciate that, i'll try run the program first. if there's is any in problem regarding to this program i'll ask again sir, thank you

サインインしてコメントする。

その他の回答 (1 件)

Von Duesenberg
Von Duesenberg 2018 年 4 月 25 日
A possible workflow:
%compute the envelope of y (your signal)
%assuming it's mono, and adjust the second
%parameter of the envelope function with
%successive plots of myEnv
[myEnv, ~] = envelope(y, 3000, 'peak');
%apply findpeaks, and adjust 'MinPeakProminence'
%to your needs
[pk, loc] = findpeaks(myEnv, 'MinPeakProminence', .5);
%get the number of peaks
nbPk = length(pk);
  6 件のコメント
Von Duesenberg
Von Duesenberg 2018 年 4 月 26 日
編集済み: Von Duesenberg 2018 年 4 月 26 日
If you do
size(y)
And the second output says 2, then your audio is stereo; if it says 1, your audio is mono.
Jan
Jan 2018 年 4 月 26 日
@faiz: "Mono" means, that the sound has been recorded with 1 channel. "Stereo" uses 2 channels, and needs 2 microphones. Ask WikiPedia for details.
If a sound is recorded with 2 channels, the output of audioread must have two columns also. See: doc audioread.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMeasurements and Spatial Audio についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by