Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : …ўЈҐ­Ё© Њ иҐа®ў                      2:5020/175.2   05 Nov 2001  22:30:36
 To : Aleksey V Vaneev
 Subject : FFT
 -------------------------------------------------------------------------------- 
 
 Fri Nov 02 2001 23:06, Aleksey V Vaneev wrote to All:
 
  AVV> Кто-нибудь занимался обработкой звуковых потоков? Вот я попробовал
  AVV> сделать простенький эквалайзер, но наткнулся на непонятки... В общем,
  AVV> есть процедуры прямого и обратного FFT. Если значения окна не изменять,
  AVV> то прогон дает исходный файл. Использую линейную интерполяцию окон с
  AVV> наложением 60-80%. Это еще один момент непонятный - такое ощущение, что
  AVV> такая интерполяция порождает какие-то дефектные гармоники. В общем,
  AVV> после FFT у меня имеется набор вещественных и мнимых компонент. Основной
  AVV> вопрос - как изменить оные, чтобы все было правильно? Hапример, мощность
  AVV> 1-й гармоники мне хочется уменьшить на 6 дб. Что нужно менять? Честно
  AVV> говоря, не очень четко я понимаю как это делается. Элементарный
  AVV> эксперимент с обнулением обеих компонент 1-й гармоники дает какой-то
  AVV> "металлический" призвук, тон которого меняется от процента наложения
  AVV> окон.
 
 В приложение к моему ответу...
 procedure EqualData(var Buffer:array of double;var OldBuf:array of
 double;Weights:array of double);
 {
 Основной шаг эквалайзера:
  Buffer[0..255] 256 значений сигнала на входе эквалайзера и на выходе
  OldBuf[0..255] рабочий вектор(256 точек), содержащий остаток после
 предыдущего шага.
         Вначале нужно установить в ноль, затем он устанавливается эквалайзером
  Weights[0..255] вектор весов (коэффициентов усиления) для всех 256 частот
 }
 var
 i:integer;
 Ar,Ai:array[0..511] of double;
 begin
  for i:=0 to 255 do begin
   Ar[i]:=Buffer[i];
   Ar[i+256]:=0;
   Ai[i]:=0;
   Ai[i+256]:=0;
  end;
 
 // Прямое БПФ
  fft(Ar,Ai);
 
  for i:=0 to 255 do begin
   Ar[i]:=Ar[i]*Weights[i];
   Ar[511-i]:=Ar[511-i]*Weights[i];
   Ai[i]:=Ai[i]*Weights[i];
   Ai[511-i]:=Ai[511-i]*Weights[i];
  end;
 
 // Обратное БПФ той же процедурой
  for i:=0 to 511 do begin
   Ar[i]:=Ar[i]/512;
   Ai[i]:=-Ai[i]/512;
  end;
  fft(Ar,Ai);
 
  for i:=0 to 255 do begin
   Buffer[i]:=Ar[i]+OldBuf[i];
   if Buffer[i]>32765 then Buffer[i]:=32765;
   if Buffer[i]<-32765 then Buffer[i]:=-32765;
   OldBuf[i]:=Ar[i+256];
  end;
 
 end;
 
 Евгений Машеров АКА СанитарЖеня
 
 --- ifmail v.2.15
  * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 FFT   Aleksey V. Vaneev   03 Nov 2001 00:06:10 
 Re: FFT   Alexander Rebrov   03 Nov 2001 22:14:35 
 FFT   Aleksey V. Vaneev   04 Nov 2001 11:02:05 
 FFT   Alex Astafiev   05 Nov 2001 15:58:26 
 FFT   Aleksey V. Vaneev   06 Nov 2001 09:23:00 
 Re FFT   Alexander Rebrov   07 Nov 2001 21:12:49 
 Re FFT   Aleksey V. Vaneev   09 Nov 2001 22:37:01 
 Re: FFT   Alexander Rebrov   11 Nov 2001 23:43:36 
 FFT   Aleksey V. Vaneev   12 Nov 2001 10:37:59 
 Re: FFT   Alexander Rebrov   06 Nov 2001 12:36:07 
 FFT   Alex Astafiev   08 Nov 2001 14:49:10 
 FFT   Daniel Kamperov   09 Nov 2001 16:56:32 
 FFT   Ђ­¤аҐ©   04 Nov 2001 22:18:59 
 FFT   Evgenij Masherov   05 Nov 2001 11:20:02 
 FFT   Aleksey V. Vaneev   06 Nov 2001 09:17:48 
 FFT   Evgenij Masherov   06 Nov 2001 11:59:59 
 FFT   Alex Astafiev   06 Nov 2001 09:35:00 
 FFT   …ўЈҐ­Ё© Њ иҐа®ў   05 Nov 2001 22:30:36 
 FFT   Aleksey V. Vaneev   08 Nov 2001 17:27:00 
 FFT   Evgenij Masherov   09 Nov 2001 10:48:01 
 FFT   Aleksey V. Vaneev   09 Nov 2001 22:49:40 
 FFT   Evgenij Masherov   12 Nov 2001 11:03:58 
Архивное /ru.algorithms/3300f9b6b32e.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional