Анализ аудио
21.01.2011
Сам алгоритм БПФ довольно широко распространен в рунете, но вот без зеркального отображения найти его мало где можно
Выдержка из кода:
SetLength(aa, mCount*2);
for i:=0 to mCount*2-1 do //Заполняем данными массив
begin
aa[i]:= fDataBuf[i div 2];
end;
FastFourierTransform(aa, mCount, false);
lLastVal:= 0;
for i:=0 to mCount-1 do //Переносим результат БПФ в исходный массив
begin
if ((i mod 2) = 0) then begin
//Здесь именно и задействуем формулу для сворачивания массива в два раза, устраняя тем самым зеркальное отображение.
lVal:= Round(Sqrt(sqr(aa[i]-aa[mCount*2 - i])+sqr(aa[i+1]+aa[mCount*2 - i +1]))/(mCount*40));
//Честно говоря mCount*40 в знаменателе - это эмпирический коэффициент для уменьшения амплитуды :)
//вопрос к математикам, почему алгоритм преобразование так сильно задирает амплитуду и в том числе при обратном преобразовании?
fDataBuf[i] := lVal;
lLastVal:= lVal;
fDataBufDop[i]:= Round((aa[i]-aa[mCount*2 - i]) / (mcount*40));
end
else begin
fDataBuf[i] := lLastVal;
fDataBufDop[i]:= Round((aa[i]+aa[mCount*2 - i]) / (mcount*40));
end;
end;
Если Вам нужны полноценные исходники, то мне не жалко - их есть у меня :)
Собственно у меня изначально было огромное желание написать свой собственный алгоритм сжатия аудио и огромное нежелание использовать для этого БПФ. Но время показало, что простота БПФ уже двести лет как помогает людям жить и ни о чем не беспокоиться, однако моя идея в совокупности с БПФ могла бы принести от 30% дополнительного сжатия для аудио без потери данных, т.е. с возможностью обратного преобразования, но об этом далее в статье о Дискретных Нотных Каналах.
Автор: Терентьев Константин Михайлович.
Страница
2 - 2 из 2
Начало
|
Пред.
|
1
2
|
След. | Конец
Рейтинг:
3.1
Количество показов: 15642
Возврат к списку
|
|
|
|
|
(Голосов: 2, Рейтинг: 3.1) |
Материалы по теме:
|