Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подавление частоты.


Страницы:   1 2

DesWind ©   (2006-11-08 15:19:00) 

Есть оцифрованый сигнал. Надо подавить определенную частоту и ее гармоники, что посоветуете?


Jeer   (2006-11-13 17:55:00) [1]

DesWind ©   (11.11.06 05:46) [29]

Если еще интересует - лучшие результаты будут получены при использовании не очень избирательного, но "гладкого" фильтра Бесселя.

Судя по твоим "относительным" параметрам сигнала и помех - рекомендую рекурсивный НЧ-фильтр Бесселя 7-го порядка.

Кроме того, для повышения помехоустойчивости целесообразно использовать компаратор (не суть важно - программный или аппаратный) с гистерезисом.

Смещение (запаздывание) восстановленного сигнала от исходного не принципиально, т.к. сохраняется пропорциональность на всей наблюдаемой временной области.

см. результат:
http://www.webfile.ru/1190202


DesWind   (2006-11-11 06:08:00) [2]


> Но учти, инженер начинается с чистого листа бумаги и карандаша.
> Когда к этому привыкнешь - пойдет все остальное.

не знаю что где начинается, но три листа чесно исписал


DesWind   (2006-11-11 05:46:00) [3]

Хотя, эт я ща так восторжено говорю, что получился чистый сигнал... Нада будеть посмотреть как там с декодированием, ведь фронты заваливаются... Видно будет в понедельник.


DesWind   (2006-11-11 05:42:00) [4]

Тяжело объяснить... Секрет не сектрет, но... Поставили задачу, обойтись минимальными средствами. "Декодирование на тачке" уже есть.


Jeer   (2006-11-10 15:23:00) [5]

Ок.
Арбайтен - так арбайтен.

Но учти, инженер начинается с чистого листа бумаги и карандаша.
Когда к этому привыкнешь - пойдет все остальное.

Чего за девайс-то ?
На самом деле, я бы прикрутил аппаратный ФНЧ + компаратор на одном сдвоенном операционнике - делов. Декодирование - на тачке.


DesWind   (2006-11-10 14:17:00) [6]

Большое спасибо за помощь!!!! Усе арбайтен!


Jeer   (2006-11-09 17:53:00) [7]

В данном случае использован рекурсивный фильтр нижних частот второго порядка.

Рекурсивный фильтр 2-го порядка получаемый из звена второго порядка H(s) = Wa/(s^2+Wa^2) методом билинейного Z-преобразования
s= (2/T)*(1-Z^(-1))/(1+Z^(-1))
в виде разностного уравнения  выглядит так:

y(i) = G*x(i)+b1*y(i-1)+b2*y(i-2)

где
T - период дискретизации
a = R/(2*L)
Wc = ((1/(L*C))-(R/(2*L)^2))^0.5
b1 = 2*exp(-a*T)*Cos(Wc*T)
b2 = -exp(-2*a*T)
G = (1/Wc)*(a/(L*C))*exp(-a*T)*Sin(Wc*T)
R,L,C - параметры контура (можно перейти от R к добротности)

Нерекурсивный фильтр еще проще:))
Это взвешенная сумма отсчетов

y(i) = sum (a(i)*x(i))
i = 0..N-1

В наиболее простом случае (проектирование методом частотной выборки)
коф-ты рассчитываются как коэф-ты Фурье умноженные на одну из оконных функций (Хемминга, Хариса, Блэкмана и тп)

Хемминг:
w(i) = 0.54 + 0.46*Cos(2*PI*i/(N-1))


DesWind   (2006-11-09 17:27:00) [8]

Это позиционно-зависимый код. А как реализовать такой фильтр который на картинке? )


Jeer   (2006-11-09 15:51:00) [9]

http://www.webfile.ru/1184804

зеленый - зашумленный полезный сигнал
синий - сигнал после фильтрации
красный - после компаратора (смещен вверх для наглядности)


Jeer   (2006-11-09 15:38:00) [10]

Сигнал вида уровнем 0/1 - это понятно.

Что является полезной информацией в сигнале:
- интервал между импульсами
- длительность импульсов
- число импульсов
- ?

Лучше выкладывать оцифровку в plaintext или wav, чтобы можно было определять количественные параметры сигнала.

Что является прикладной задачей, так и непонятно.
Восстановление формы логического сигнала ?
Вряд ли - см. выше о "полезности" сигнала.

Т.е. если сигнал является кодовым, то, в соответствии с принципами кодирования, строится декодер + подавитель помех.

Навскидку, для данного случая вполне достаточно примитивного ФНЧ (фильтр нижних частот) + компаратор уровня.


DesWind   (2006-11-09 14:51:00) [11]

Забыл добавить частота квантования 50 Гц, фильтрация в реальном времени.


DesWind   (2006-11-09 14:45:00) [12]

Я лучше покажу http://www.webfile.ru/1184709(GIF 13 кб). Помеха по характеру постоянна, и на длительном промежутке постоянна по частоте. Но частота может всеравно меняться. т.е. в программе должна быть "крутилка" для подстройки фильтра....


Jeer   (2006-11-09 11:32:00) [13]

DesWind ©   (09.11.06 11:15) [18]

Опиши предметную область - будут более конкретные советы и помощь.


DesWind   (2006-11-09 11:15:00) [14]


> Jeer ©   (09.11.06 09:59) [17]

Ну покрайней мере теперь знаю с чего начинать. )


Jeer   (2006-11-09 09:59:00) [15]

DesWind ©   (08.11.06 19:35) [16]

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


DesWind   (2006-11-08 19:35:00) [16]

Спасибо. Будем эксперементировать.


Jeer   (2006-11-08 17:42:00) [17]

Можно так, на CIC-фильтрах:
Это комбинация интеграторов и дифференциаторов с цель получения решетчатой структуры АЧХ.

http://users.snip.net/~donadio/cic.pdf
http://www.xilinx.com/ipcenter/catalog/logicore/docs/cic.pdf


MBo   (2006-11-08 16:59:00) [18]

Пардон, про гармоники не углядел...


MBo   (2006-11-08 16:56:00) [19]


var
 N, i: Integer;
 A: array of Double;
 Mul, ReSum, ImSum, RejF, MRF: Double;
begin
 N := 44100;
 SetLength(A, N); // 1 секунда оцифровки с частотой 44100
 Mul := 2 * Pi / N;

 for i := 0 to N - 1 do begin
   A[i] := 2 * Sin(Mul * i * 2) + Sin(Mul * i * 13);// смесь частот 2 и 13 Гц, низкие  - для наглядности графиков
   Series1.Add(A[i]);
 end;

 RejF := 2; // частота режекторного фильтра
 MRF := RejF * Mul;

 ReSum := 0;
 ImSum := 0;
 for i := 0 to N - 1 do begin
   ReSum := ReSum + A[i] * cos(MRF * i);
   ImSum := ImSum + A[i] * sin(MRF * i);
 end;
 ReSum := ReSum * 2 / N;
 ImSum := ImSum * 2 / N;

 for i := 0 to N - 1 do begin
   A[i] := A[i] - ReSum * Cos(MRF * i) - ImSum * Sin(MRF * i);
   Series2.Add(A[i]);
 end;


Сергей М.   (2006-11-08 16:37:00) [20]


> Jeer ©   (08.11.06 16:29) [10]


ну ежели так, то согласен - сойдет и "гребенка")


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо