|
фильтр визуализации |
|
|
|
Apr 14 2016, 07:29
|
Гуру
     
Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261

|
Цитата(PlainUser @ Apr 14 2016, 10:11)  Измеряем 50гц. Подсчет суммы квадратов за 1сек дает замечательный результат с точностью даже выше чем надо несмотря на так-сказать прямоугольное окно, но нет непрерывности. Подсчет суммы квадратов за 1сек будет работать, если на интервале 1 сек укладывается целое число периодов "квадратов". Если частота на входе 50,25 Гц, то частота "квадратов" будет равна 100,5 Гц и на интервале 1 сек поместится 100,5 периодов, что даст ошибку при подсчете суммы равную сумме значений "квадратов" за пол периода. Если, конечно, я правильно понял смысл выражения "нет непрерывности".
|
|
|
|
|
Apr 14 2016, 07:50
|
Частый гость
 
Группа: Участник
Сообщений: 84
Регистрация: 23-06-05
Пользователь №: 6 244

|
Цитата(_Anatoliy @ Apr 14 2016, 10:31)  Сделайте скользящее окно по принципу MAF. Хто такой MAF ?
|
|
|
|
|
Apr 14 2016, 08:04
|
Частый гость
 
Группа: Участник
Сообщений: 84
Регистрация: 23-06-05
Пользователь №: 6 244

|
Цитата(blackfin @ Apr 14 2016, 10:29)  Подсчет суммы квадратов за 1сек будет работать, если на интервале 1 сек укладывается целое число периодов "квадратов". Если частота на входе 50,25 Гц, то частота "квадратов" будет равна 100,5 Гц и на интервале 1 сек поместится 100,5 периодов, что даст ошибку при подсчете суммы равную сумме значений "квадратов" за пол периода. Если, конечно, я правильно понял смысл выражения "нет непрерывности". Я знаю. "...Подсчет суммы квадратов за 1сек дает замечательный результат с точностью даже выше чем надо... " Цитата(_Anatoliy @ Apr 14 2016, 10:54)  Вон че , MAF это просто скользящее среднее. Вроде надо что-то получше с более крутыми скатами. Частота среза 5-10Гц а частота сигнала на входе 50Гц , остаток в полосе должен быть не более 0.03% примерно.
Сообщение отредактировал PlainUser - Apr 14 2016, 07:56
|
|
|
|
|
Apr 14 2016, 09:24
|
Частый гость
 
Группа: Участник
Сообщений: 84
Регистрация: 23-06-05
Пользователь №: 6 244

|
Цитата(blackfin @ Apr 14 2016, 11:13)  Сомнительно, что существует в природе КИХ-фильтр "с более крутыми скатами", чем у фильтра на основе "скользящего среднего". "Скользящее среднее" это же по сути "бин" преобразования Фурье на нулевой частоте и, следовательно, имеет АЧХ пропорциональную sinc-функции (если точнее, АЧХ пропорциональную функции Дирихле). Не могли-бы вы привести яркий пример для моего случая , особенно что касается расчета количества необходимых точек.
|
|
|
|
|
Apr 14 2016, 09:40
|
Частый гость
 
Группа: Участник
Сообщений: 84
Регистрация: 23-06-05
Пользователь №: 6 244

|
Цитата(blackfin @ Apr 14 2016, 12:31)  Все "яркие примеры для вашего случая" хранятся в MATLAB'e в пакете с именем fdatool. Дерзайте!  Звучит неубедительно. Откуда взялся фильтр бесселя. Вот отсюда. http://www.kit-e.ru/articles/circuit/2010_07_144.phpХотелось-бы услышать какие-то слова в пользу одной из сторон.Лучше с цифрами.
Сообщение отредактировал PlainUser - Apr 14 2016, 09:42
|
|
|
|
|
Apr 14 2016, 10:51
|
Частый гость
 
Группа: Участник
Сообщений: 84
Регистрация: 23-06-05
Пользователь №: 6 244

|
Вот сам фильтр который не желает усреднять. Может с ним что не так? Есть подозрение что у коэфф. точности флоата не хватает и он возбуждается. Но не уверен. /************************************************************** WinFilter version 0.8 http://www.winfilter.20m.comakundert@hotmail.com Filter type: Low Pass Filter model: Bessel Filter order: 4 Sampling Frequency: 8 KHz Cut Frequency: 0.005000 KHz Coefficents Quantization: float Z domain Zeros z = -1.000000 + j 0.000000 z = -1.000000 + j 0.000000 z = -1.000000 + j 0.000000 z = -1.000000 + j 0.000000 Z domain Poles z = 0.994770 + j -0.001392 z = 0.994770 + j 0.001392 z = 0.999100 + j -0.004321 z = 0.999100 + j 0.004321 ***************************************************************/ #define NCoef 4 float iir(float NewSample) { float ACoef[NCoef+1] = { 0.00000000008095721658, 0.00000000032382886631, 0.00000000048574329947, 0.00000000032382886631, 0.00000000008095721658 }; float BCoef[NCoef+1] = { 1.00000000000000000000, -3.98773984171834520000, 5.96328712390839670000, -3.96335452951837610000, 0.98780724756468707000 }; static float y[NCoef+1]; //output samples static float x[NCoef+1]; //input samples int n; //shift the old samples for(n=NCoef; n>0; n--) { x[n] = x[n-1]; y[n] = y[n-1]; } //Calculate the new output x[0] = NewSample; y[0] = ACoef[0] * x[0]; for(n=1; n<=NCoef; n++) y[0] += ACoef[n] * x[n] - BCoef[n] * y[n]; return y[0]; }
Сообщение отредактировал PlainUser - Apr 14 2016, 11:13
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|