Форум: "Media";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
Вниз
Частота звука. Найти похожие ветки
← →
<<BEAST>> (2005-08-15 14:54) [0]Подскажите пожалуйста как узнать частоту звука которая поступает в компьютер через микрофон?
← →
vrem (2005-08-15 15:49) [1]Звуковой редактор - Sound Forge, Wavelab и т.д. - имеют анализатор спектра - в микрофон поступает частота звука и рисуется в окошке..
← →
programania © (2005-08-16 04:05) [2]В сигнале с микрофона всегда будут много частот
и определять можно только частоту с максимальной амплитудой
и не которая поступает а поступала период времени
поскольку частота в какой-то момент не имеет смысла
определить амплитуды частот сигнала за период можно
быстрым преобразованием Фурье http://www.codenet.ru/progr/alg/fft.php
или суммируя произведение сигнала и sin разных частот.
← →
<<BEAST>> (2005-08-16 07:46) [3]Мне нужно вычислить частоту самого громкого звука используя средства делфи.
← →
Jeer © (2005-08-16 10:18) [4]FFT и сортирвка по амплитуде.
← →
Anatoly Podgoretsky © (2005-08-16 10:35) [5]<<BEAST>> (16.08.05 07:46) [3]
Средств Дельфи для этого нет, придется самому писать.
← →
programania © (2005-08-17 03:43) [6]>Мне нужно вычислить частоту самого громкого звука используя средства делфи
Для определения громкости все равно нужно преобразовать в амплитуды частот
и умножить каждую на коэфициент соответствующий чувствительности человека и все сложить
иначе самая большая амплитуда будет у низких частот хотя громче слышны
средние и основную частоту человек определяет по ним.
Вот есть средства преобразования в частоты для Delphi:
http://alglib.sources.ru/translator/view.php?location=/fft/realfft
← →
programania © (2005-08-17 04:00) [7]ссылка не вся дошла, вся такая:
http://alglib.sources.ru/translator/view.php?location=/fft/realfft&target=delphi
← →
thaddy (2005-08-17 11:01) [8]An FFT is not always necessary. if you know what frequency you are looking for (f.e.: guitar tuning or telephone) you can also use a discrete cosine transform. And/or Goertzel. Here's an example:
function Goertzel_x87(Buffer :Psingle; BLength:Integer; frequency: Single; samplerate: Single):Single;
asm
mov ecx,BLength
mov eax,Buffer
fld x2
fldpi
fmulp
fmul frequency
fdiv samplerate
fld st(0)
fcos
fld x2
fmulp
fxch st(1)
fldz
fsub st(0),st(1)
fstp st(1)
fldl2e
fmul
fld st(0)
frndint
fsub st(1),st(0)
fxch st(1)
f2xm1
fld1
fadd
fscale
fstp st(1)
fldz
fldz
fldz
@loopStart:
fxch st(1)
fxch st(2)
fstp st(0)
fld st(3)
fmul st(0),st(1)
fsub st(0),st(2)
fld [eax].Single
faddp
add eax,4
loop @loopStart
@loopEnd:
fxch st(3)
fmulp st(2), st(0)
fsub st(0),st(1)
fstp result
ffree st(2)
ffree st(1)
ffree st(0)
end;
This was written by Christian[at]savioursofsoul.de
← →
Jeer © (2005-08-17 18:10) [9]Согласен, но этот метод (разновидность ДПФ) применяется, в основном, при небольшом числе гармоник.
function Goertzel(Buffer: array of double; frequency, samplerate: double):double;
var
Qkn, Qkn1, Qkn2, Wkn, Mk : double;
i : integer;
begin
Qkn:=0; Qkn1:=0;
Wkn:=2*PI*frequency/samplerate;
Mk:=2*Cos(Wkn);
for i:=0 to High(Buffer) do begin
Qkn2 := Qkn1; Qkn1 := Qkn;
Qkn := Buffer[i] + Mk*Qkn1 - Qkn2;
end;
Result := sqrt(Qkn*Qkn + Qkn1*Qkn1 - Mk*Qkn*Qkn1);
end;
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.041 c