![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подавление частоты.
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]
ну ежели так, то согласен - сойдет и "гребенка")