Also called Spectral Variation. Spectral flux measures how quickly the power spectrum changes. Spectral flux is defined as the variation value of spectrum between the adjacent two frames in a short-time analyze window. Spectral flux can be used to determine the timbre of an audio signal. The MATLAB code:
[wav fs] = wavread('DEMO.wav');
wav = wav / max(max(wav));
window_length = 2 * fs; % assume the windows is 2 seconds
step = 1 * fs; % and it has overlap in windows
frame_num = floor((length(wav)-window_length)/step) + 1;
H = hamming(window_length);
flux = zeros(frame_num, 1);
pos = 1;
FFT_prev = 0;
for i=1:frame_num
wav_window = H .* wav(pos:pos + window_length-1);
FFT = abs(fft(wav_window, 2*window_length));
FFT = FFT(1 : window_length);
FFT = FFT/max(FFT);
flux(i) = sum((FFT - FFT_prev) .^ 2);
FFT_prev = FFT;
pos = pos + step;
end
No comments:
Post a Comment