LINUX.ORG.RU

Разложение музыкального файла в спектр с помощью преобразование Фурьє

 ,


0

1

Привет)

Несколько дней назад появилась интересна идея, и основная часть этой идеи - это разложение музыкального файла на спектр. Суть вопроса состоит в том, что нужно извлеченную информацию из файла, преобразовать в спектр с помощью (быстрого) преобразования Фурьє (другого метода не знаю), можете, пожалуйста, объяснить алгоритм как сделать это преобразование), я думаю что нужно получить сначала с файла частоту и амплитуду, а потом уже работать с Фурьє.

Заранее спасибо за ответ.

Алгоримт гуглится легко и просто. И готовые программы тоже гуглятся. Вопрос то в чём?

mky ★★★★★
()

Идея, это очевидно спектральный анализатор? БПФ не тот случай, когда алгоритм можно просто взять и объяснить первому встречному на пальцах. Поищи в гугле примеры по строке «c++ fft», их очень много. А разбирать почему именно так придется обложившись книжками.

m0rph ★★★★★
()

Нафиг алгоритмы, бери готовые кирпичи (ссылка из гугла, сам не проверял) http://octave.1599824.n4.nabble.com/FFT-Spectrum-Analyzer-td4630647.html

Как понимаешь, нужно поставить octave. Такой матлаб для небогатых, вроде меня.

%Fourier Transform of Sound File 

%Load File 
file = 'e-neu.wav'; 
[y,Fs,bits] = wavread(file); 

Nsamps = length(y); 
t = (1/Fs)*(1:Nsamps);          %Prepare time data for plot 

%Do Fourier Transform 
y_fft = abs(fft(y));            %Retain Magnitude 
y_fft = y_fft(1:Nsamps/2);      %Discard Half of Points 
f = Fs*(0:Nsamps/2-1)/Nsamps;   %Prepare freq data for plot 

%Plot Sound File in Time Domain 
figure 
plot(t, y); 
xlabel('Time (s)') 
ylabel('Amplitude') 
title('fft action') 

%Plot Sound File in Frequency Domain 
figure 
plot(f, y_fft); 
xlim([0 1000]) 
xlabel('Frequency (Hz)') 
ylabel('Amplitude') 
title('Frequency Response of Tuning Fork A4') 

anonymous
()
Ответ на: комментарий от anonymous

ТС поставил тег «C++», что как бы намекает. В твоем примере, насколько я понял, вообще используется готовая функция fft(), что никак не поможет ни прояснить алгоритм, ни написать его реализацию на C++.

m0rph ★★★★★
()

я думаю что нужно получить сначала с файла частоту и амплитуду, а потом уже работать с Фурьє.

А я думаю что суть алгоритма Фурье как раз и состоит в том чтобы получить амплитуды и частоты. Если бы они уже и так были в «файле» то и преобразование Фурье получается не нужно.

morse ★★★★★
()
Ответ на: комментарий от m0rph

Так зря тег поставлен.

Если посетила идея, то ее надо реализовывать. В октаве есть и fft, и wavread, и wavwrite, комбинируй — не хочу. Отладил на файле — можно поковырять в сторону реалтайма, может и получиться.

В плюсах в лучшем случае убьёшь день-два библиотеки подключать. И через неделю выйдешь на уровень октавы, хотя мысль уже мог опробовать.

...

Другое дело, если хочется озаботиться самим fft, но зачем оно надо? Он уже написан и оптимизирован, бери да пользуйся. Разобраться — в общих чертах можно какую-нибудь статью почитать. В детали влезать — это неделю убивать, и все равно ерунда получится. Не айс.

anonymous
()
Ответ на: комментарий от anonymous

И через неделю выйдешь на уровень октавы, хотя мысль уже мог опробовать.

В плюсах на уровень октавы выйти ну очень трудно даже если специально стараться. Октава настолько тормозная что годится только для ~ посмотреть один раз как оно вообще работает в общих чертах, или не работает.

mashina ★★★★★
()
Ответ на: комментарий от mashina

Она, конечно, медленнее матлаба, но у меня лагала только на крупных данных, хотя подробностей уже не помню.

В конкретной задаче fft встроенная, написана на плюсах. Если остальные операции оформить матрицами, то все должно быть очень даже хорошо.

anonymous
()
Ответ на: комментарий от mashina

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

Это именно то, что нужно в ситуации, когда «несколько дней назад появилась интересна идея». По-быстрому слепить работающий прототип. Чем легче прототип модифицируется, тем меньше шансов, что идея умрёт из-за невозможности свободно с ней экспериментировать.

Кресты тут — крайне неудачный выбор.

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 1)

преобразовать в спектр

Alglib: FFT или FHT.

другого метода не знаю

Разложение в спектр по базису любых ортогональных функций: Хаара, Адамара, «slant_transform», ..., Уолша, например, FWT.

Как предельный случай можно разложить по собственным векторам: преобразование Карунена-Лоэва. ©

quickquest ★★★★★
()

Фурьє

Жан Батист Жозеф неистово крутится в гробу...

aol ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.