MATLAB — Постройте частотно-временной график файла .wav

Я работаю над проектом, который включает в себя просмотр изменений высоты тона/частоты с течением времени с помощью волнового файла (я новичок в MATLAB, но не в программировании). Я могу видеть график времени-амплитуды и график частоты-амплитуды (после БПФ), но как я могу выделить частоту и показать ее в каждый момент времени?

Код:

filename = '/Users/Username/Sample_1.wav'

[y, fs] = wavread(filename);
y = y(:,1);
dt = 1/fs;
t = 0:dt:(length(y)*dt)-dt;
plot(t,y); xlabel('Seconds'); ylabel('Amplitude');

transformed = fft(y);
mag = abs(transformed);
plot(mag);

person airplaneman19    schedule 15.01.2013    source источник
comment
Вы говорите, как я мог бы выделить частоту и показать ее в каждый момент времени? Есть несколько хороших ответов на этот вопрос, насколько это возможно, но важно понимать, что не существует такой вещи, как мгновенная частота в том смысле, в котором вы хотите. Другими словами, не существует значения частоты, однозначно соответствующего каждому моменту времени (или, по крайней мере, вы не можете получить эту информацию из данных во временной области. Если бы вы могли, вы бы нарушили принцип неопределенности Гейзенберга). .   -  person Bjorn Roche    schedule 15.01.2013


Ответы (2)


Если у вас есть набор инструментов для обработки сигналов, вы можете найти spectrogram функция полезная.

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

По сути, это кратковременное преобразование Фурье (STFT).

person Oliver Charlesworth    schedule 15.01.2013
comment
Чтобы добавить ... то, что вы (ОП) пытаетесь сделать, относится к области частотно-временного анализа. Если вам интересно, есть много статей, написанных об использовании таких методов, как краткосрочное преобразование Фурье (что использует функция MATLAB spectrogram) и т. д. Это забавная тема! - person notthetup; 15.01.2013
comment
Спасибо за вашу помощь! На самом деле я искал что-то большее в линейном графике, но я думаю, что могу научиться читать спектрограммы. - person airplaneman19; 16.01.2013
comment
@airplaneman19: Рад, что смог помочь. Но обратите внимание на комментарий Бьорна выше. - person Oliver Charlesworth; 16.01.2013

Если у вас есть Signal Processing Toolbox, вам подойдет спектрограмма (как упомянул Оли Чарльзворт).

Если у вас его нет, обмен файлами MATLAB Central File всегда будет хорошим местом для поиска чего-то такого общего.

http://www.mathworks.com/matlabcentral/fileexchange/1553-spectrogram-short-time-ft-log-magnitude

Это кажется разумной и хорошо работающей реализацией функциональности спектрограммы.

person Dani Gehtdichnixan    schedule 15.01.2013