Крымский форум (Crimea-Board) Поиск Участники Помощь Текстовая версия Crimea-Board.Net
Здравствуйте Гость .:: Вход :: Регистрация ::. .:: Выслать повторно письмо для активации  
 
> Рекламный блок.
 
 
 
 
 
> Ваша реклама, здесь
 
 
 

  Start new topic Start Poll 

> Цифровая фильтрация сигнала, Кто нить сталкивался??
svip | Профиль
Дата 8 Октября, 2008, 14:40
Quote Post




Group Icon

Группа: Gold Member
Сообщений: 1493
Регистрация: 30.11.06
Авторитет: 13
Вне форума

Предупреждения:
(0%) -----


Кто нибудь сталкивался на практике с цифровой фильтрацией сигналов???? не в теории, типа преобразование Фурье и тд. А именно на практике в программировании, ну или хотя бы в математике, но с понятным алгоритмом.

В общем есть сигнал полосой 20Гц-50КГц из него нужно вырезать полосу 2-5 Гц. Как быть???


____________________
Двое всегда договорятся, если хотя бы один из них – не дурак.
PMEmail Poster
8/5345   
Бобер | Бездомный
Реклама двигатель прогресса       
Quote Post



А кому сча лехко?
Group Icon


















_________________
Желающим разместить рекламу смотреть сюдой
/   
ShockWave | Профиль
Дата 8 Октября, 2008, 15:24
Quote Post




Group Icon

Группа: Gold Member
Сообщений: 1179
Регистрация: 04.09.03
Авторитет: 8
Вне форума

Предупреждения:
(20%) X----


если полоса от 20Гц, где ты возмешь 2-5Гц ???
в саундфорже море фильтров под это дело, если не риалтайм
если реалтайм, то такое делал давненько в винампе, с линейного цифровалось и плугинсы это дело шуршали, правда был простой дсп фильтр, для сочности звучания ...

п.с. если ты думаешь вырезать голос, то не мечтай, 100% голос не вырезается, особенно в музыке

Отредактировал ShockWave - 8 Октября, 2008, 15:25
PMEmail Poster
svip | Профиль
Дата 8 Октября, 2008, 16:10
Quote Post




Group Icon

Группа: Gold Member
Сообщений: 1493
Регистрация: 30.11.06
Авторитет: 13
Вне форума

Предупреждения:
(0%) -----


Не голос резать не нужно. smile.gif
Полоса 2-5 Гц - это или 20-25Гц или 106-109 Гц или 233-238Гц и тд

Вот набросал рисунок чтобы было понятнее.
Присоединённое изображение
P.S. Извеняюсь за качество нарисованного, просто под рукой кроме пайнта ничег не оказалось.smile.gif


____________________
Двое всегда договорятся, если хотя бы один из них – не дурак.
PMEmail Poster
elektrik | Профиль
Дата 8 Октября, 2008, 17:34
Quote Post




Group Icon

Группа: Silver Member
Сообщений: 476
Регистрация: 05.11.07
Авторитет: 4
Вне форума

Предупреждения:
(0%) -----


что-т кагда-то качал
http://www.bestreferat.ru/archives/57/best...stref-55457.zip

PMEmail PosterUsers Website
svip | Профиль
Дата 8 Октября, 2008, 21:14
Quote Post




Group Icon

Группа: Gold Member
Сообщений: 1493
Регистрация: 30.11.06
Авторитет: 13
Вне форума

Предупреждения:
(0%) -----


Изучил, но что то толком мало что понял. В асме не силен, а блог схемы совсем специфические.
В общем нашел пример кода преобразования фурье
Код

unit fft;
interface
uses Math, Ap, Sysutils;

procedure FastFourierTransform(var a : TReal1DArray;
   nn : Integer;
   InverseFFT : Boolean);

implementation

(*************************************************************************
Быстрое преобразование Фурье

Алгоритм проводит быстрое преобразование Фурье комплексной
функции, заданной nn отсчетами на действительной оси.

В зависимости от  переданных параметров, может выполняться
как прямое, так и обратное преобразование.

Входные параметры:
   nn  -  Число значений функции. Должно  быть  степенью
           двойки. Алгоритм  не  проверяет  правильность
           переданного значения.
   a  -  array [0 .. 2*nn-1] of Real
           Значения функции. I-ому значению соответствуют
           элементы  a[2*I]    (вещественная    часть)
           и a[2*I+1] (мнимая часть).
   InverseFFT
       -  направление преобразования.
           True, если обратное, False, если прямое.
           
Выходные параметры:
   a  -  результат  преобразования.  Подробнее    см.
           описание на сайте.
*************************************************************************)
procedure FastFourierTransform(var a : TReal1DArray;
   nn : Integer;
   InverseFFT : Boolean);
var
   ii : Integer;
   jj : Integer;
   n : Integer;
   mmax : Integer;
   m : Integer;
   j : Integer;
   istep : Integer;
   i : Integer;
   isign : Integer;
   wtemp : Double;
   wr : Double;
   wpr : Double;
   wpi : Double;
   wi : Double;
   theta : Double;
   tempr : Double;
   tempi : Double;
begin
   if InverseFFT then
   begin
       isign := -1;
   end
   else
   begin
       isign := 1;
   end;
   n := 2*nn;
   j := 1;
   ii:=1;
   while ii<=nn do
   begin
       i := 2*ii-1;
       if j>i then
       begin
           tempr := a[j-1];
           tempi := a[j];
           a[j-1] := a[i-1];
           a[j] := a[i];
           a[i-1] := tempr;
           a[i] := tempi;
       end;
       m := n div 2;
       while (m>=2) and (j>m) do
       begin
           j := j-m;
           m := m div 2;
       end;
       j := j+m;
       Inc(ii);
   end;
   mmax := 2;
   while n>mmax do
   begin
       istep := 2*mmax;
       theta := 2*Pi/(isign*mmax);
       wpr := -2.0*sqr(sin(0.5*theta));
       wpi := sin(theta);
       wr := 1.0;
       wi := 0.0;
       ii:=1;
       while ii<=mmax div 2 do
       begin
           m := 2*ii-1;
           jj:=0;
           while jj<=(n-m) div istep do
           begin
               i := m+jj*istep;
               j := i+mmax;
               tempr := wr*a[j-1]-wi*a[j];
               tempi := wr*a[j]+wi*a[j-1];
               a[j-1] := a[i-1]-tempr;
               a[j] := a[i]-tempi;
               a[i-1] := a[i-1]+tempr;
               a[i] := a[i]+tempi;
               Inc(jj);
           end;
           wtemp := wr;
           wr := wr*wpr-wi*wpi+wr;
           wi := wi*wpr+wtemp*wpi+wi;
           Inc(ii);
       end;
       mmax := istep;
   end;
   if InverseFFT then
   begin
       I:=1;
       while I<=2*nn do
       begin
           a[I-1] := a[I-1]/nn;
           Inc(I);
       end;
   end;
end;


end.



но как ту можно задать границы "вытаскиваемой" полосы??? или я чего то не понимаю.

P.S. нужно было лучше учить МатАнализ smile.gif


____________________
Двое всегда договорятся, если хотя бы один из них – не дурак.
PMEmail Poster
1/5345   
gccrim | Профиль
Дата 9 Ноября, 2008, 3:31
Quote Post




Group Icon

Группа: Silver Member
Сообщений: 717
Регистрация: 02.07.06
Авторитет: 2
Вне форума

Предупреждения:
(0%) -----


Цитата
Изучил, но что то толком мало что понял. В асме не силен, а блог схемы совсем специфические.
В общем нашел пример кода преобразования фурье


Цитата

но как ту можно задать границы "вытаскиваемой" полосы??? или я чего то не понимаю.
P.S. нужно было лучше учить МатАнализ 


Границы задавать не надо. Преобразование Фурье позволяет:
- из исходного сигнала получить его спектр(сумму коэфициентов Sin и Cos некой частоты F и её гармоник 2F, 3F ...)
это называется прямым преобразованием фурье.
- Из спектра обратно получить исходный сигнал - это обратное преобразование.

Чтобы вырезать некоторую полосу частот, надо просто коэфициенты перед sin,cos попадающими в эту полосу обнулить. Те, делаем прямое преобр. обнуляем коэф. и потом делаем обратное.

В математике все эти преобразования - интегралы. В реальности, так как имеем дело с дискретными сигналами(со звуковухи идет 44kHz например), интеграл превращается в сумму...

Надо сначала определится, какие параметры исходного сигнала, какую полосу вырезать и тд.
PMEmail Poster
4/4839   
gccrim | Профиль
Дата 9 Ноября, 2008, 3:37
Quote Post




Group Icon

Группа: Silver Member
Сообщений: 717
Регистрация: 02.07.06
Авторитет: 2
Вне форума

Предупреждения:
(0%) -----


Еще, приведенный паскалевский код это БПФ(FFT) - быстрое преобразование фурье, хитрый алгоритм.
Если для обычного преобразования из N исходных элементов, требуется выполнить N^2 операций, то при БПФ
всего лишь N*log2(N).
Но есть ограничение, при БПФ число исходных элементов должно быть степенью 2, те 256, 512 ...

http://ru.wikipedia.org/wiki/%D0%91%D0%9F%D0%A4
PMEmail Poster
1/4839   

Topic Options Start new topic Start Poll 

 



[ Script Execution time: 0.0687 ]   [ 13 queries used ]   [ GZIP включён ]


Создание и продвижение сайтов в Крыму



Top