Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Филтър в C#
http://mcu-bg.com/mcu_site/viewtopic.php?f=16&t=6221
Страница 1 от 1

Автор:  Grubi [ Сря Окт 29, 2008 1:53 pm ]
Заглавие:  Филтър в C#

Имаме радиоприменик, и с филтъра реализиран в кода премахваме статичните смущения от приетия сигнал. Т.е. взимаме един пакет, който смятаме за статичен(в който измерваме статичния шум) и после го вадим от всички последващи динамични (в които се предполага се измерваме сигнал+шум) пакети и накрая добавяме разликата между зададената минимална и максимална стойност, за да формираме графиката(т.е. получаваме права линия ако няма друг сигнал освен шума). Лошото е, че статичните смущения се взимат само от един пакет с данни, а аз искам да осредня примерно 50 пакета и този осреднен статичен пакет да го вадя от последващите динамични. Лошото, е че не мога да се оправя с масивите в някакъв цикъл до 50, в който да направя осредняването. Някаква идея, освен да продължа да чета дебелите книги за C#

// Cluttermaptest
int avg = (radar.ZoomMax - radar.ZoomMin) / 2;
int[] buffer2 = new int[FullFrameQueue.Newest.FullFrame.Length];
Array.Copy(FullFrameQueue.Newest.FullFrame, buffer2, buffer2.Length);
if ((clutterMap == null) || (clutterMap.Length != buffer2.Length))
{
clutterMap = new int[FullFrameQueue.Newest.FullFrame.Length];
Array.Copy(FullFrameQueue.Newest.FullFrame, clutterMap, clutterMap.Length);
}
for (int j = 0; j < buffer2.Length; j++)
{
buffer2[j] = buffer2[j] - clutterMap[j] + avg;
}


fullFrameQueue.Enqueue(buffer, tickCount);
fullFrameQueue.Newest.FilteredFrame = buffer2;
}
}

Автор:  Реконструктор [ Сря Окт 29, 2008 6:25 pm ]
Заглавие: 

Поправете ме, ако греша, но ваденето на дадена съставляваща от общ сигнал не е ли въпрос на много яка математика (Фурие, уейвлети и т.н.)?

Автор:  ps66 [ Сря Окт 29, 2008 6:50 pm ]
Заглавие: 

и Аз мисля че книгата за C# ти е най-малкия проблем - трябва да наблегнеш малко на математикаъа (всъщност доста!)
(ако съм схванал какво точно искаш да направиш ... )

Автор:  Grubi [ Сря Окт 29, 2008 6:54 pm ]
Заглавие: 

ами в случая не - пакета в случая се разделя на 128 части и след като запомниш статичния пакет(околния шум), започваш измерването. от всяка част на последно постъпилия пакет се вади съоветната стойност от статичния пакет, като накрая се добавя средната стойност от максимума и минимума, които могат да се изобразяват в съоветния прозорец. така ако нямаш сигнал, виждаме права линия - в идеалния случай статичния пакет се вади от само себе си. когато обаче има отклонение от статичния сигнал, в иделания случай виждаш само него(изменението). Май на това му казват медианен филтър.


Сложната математика в случая са едни корелационни приемници в чипа от който идват пакетите, но там няма как да се пипа... А това първоначален вид на филтъра, доказано върши работа, но смениха софтвера и сега тоя Ц# ми идва в повече...

Автор:  valioman [ Чет Окт 30, 2008 10:07 am ]
Заглавие:  Re: Филтър в C#

Grubi написа:

// Cluttermaptest
int avg = (radar.ZoomMax - radar.ZoomMin) / 2;
int[] buffer2 = new int[FullFrameQueue.Newest.FullFrame.Length];
Array.Copy(FullFrameQueue.Newest.FullFrame, buffer2, buffer2.Length);
if ((clutterMap == null) || (clutterMap.Length != buffer2.Length))
{
clutterMap = new int[FullFrameQueue.Newest.FullFrame.Length];
Array.Copy(FullFrameQueue.Newest.FullFrame, clutterMap, clutterMap.Length);
}
for (int j = 0; j < buffer2.Length; j++)
{
buffer2[j] = buffer2[j] - clutterMap[j] + avg;
}


fullFrameQueue.Enqueue(buffer, tickCount);
fullFrameQueue.Newest.FilteredFrame = buffer2;
}
}


Честно казано не разбрах кое те затруднява езика C# или това което искаш да направиш (Филтъра)
Грешка 1 int avg = (radar.ZoomMax - radar.ZoomMin) / 2;
още от АНСИ С се знае че резултата от това е грешен защото е декларирано като INT т.е примерно ако имаш 3/2 реално отговора е 1.5 но при теб ще се получи 1
Разгледай Math класа в него са ти всички възможни математически функции .
за сметки ползвай DOUBLE или DECIMAL a не INT
Ако искаш дай конкретен пример за да се знае от какви данни какво искаш да получиш .. аз лично за изчистване на шум ползвам една формула с Тегловен коефициент която е вид интегриране и се държи добре .

Пример : за 200 измервания
y(t)=(199*y(t-1)+a)/200
y(t) - новата интегрирана стойност
y(t-1) - старата интегрирана стойност
a - новата измерена стойност

Автор:  Grubi [ Чет Окт 30, 2008 11:23 am ]
Заглавие: 

благодаря, в момента основната трудност е C#. в този си вид филтъра работи, а това че се закръглява в момента не е проблем (но благодаря за съвета и формулите).

Основно проблема ми е да боравя с обекти, методи и т.н. - та явно ще продължа да чета докато ми светне.

В случая вместо да заредя само buffer2, който да се зарежда от стойността на FullFrameQueue.Newest.FullFrame, искам да заредя още 50 буфера например и да ги осредня.
Иначе други проблеми няма, като изключим че гърми тук и там и създателите на кода си признават че още са в самото начало.

Офтопик> Започвам да се убеждавам, че сoфтвера от мания да стане по-лесен и удобен, избива в някакви ужасии - Acrobat Reader6 - отваря огромни файлове без да гръмне, заема 43МБ... Acrobat Reader 8 и9 гърмят и заемат по 200МБ и повече. А по старите Акробати за малки файлове нямат равни.

Автор:  valioman [ Чет Окт 30, 2008 11:29 am ]
Заглавие: 

Grubi написа:
благодаря, в момента основната трудност е C#. в този си вид филтъра работи, а това че се закръглява в момента не е проблем (но благодаря за съвета и формулите).

Основно проблема ми е да боравя с обекти, методи и т.н. - та явно ще продължа да чета докато ми светне.

В случая вместо да заредя само buffer2, който да се зарежда от стойността на FullFrameQueue.Newest.FullFrame, искам да заредя още 50 буфера например и да ги осредня.
Иначе други проблеми няма, като изключим че гърми тук и там и създателите на кода си признават че още са в самото начало.
.


List<byte[]> s12 = new List<byte[]>();
for(int i =0;i<50;i++)
{
s12.Add(Buffer);
}
foreach (byte[] b in s12)
{
/// тука си слагаш обработката за всеки масив като b ти е всеки един от масивите
}


Лошо е да се говори за нещо за което нищо не знаеш и аз преди година писах на Делфи и го боготворях :))
но преди 2 дни ми се наложи да пиша пак на делфи и честно казано имах чувството че се качих от мерцедес на трабантче :oops:

Автор:  Grubi [ Чет Окт 30, 2008 1:44 pm ]
Заглавие: 

ще го пробвам. нямах предвид Ц# за това, че е лош. имах предвид че акробата работеше добре, а сега се опитват да го накарат да свири, пее
и т.н. но това разваля основното му предназначение - да отваря документи и да ги прави лесни за четене.

всяко непознато нещо се посреща с неодобрение и скептицизъм по стар български обичай :D, опитвам се да си променя подхода.

Автор:  ash [ Пон Апр 18, 2011 7:08 pm ]
Заглавие: 

Той не е български тоя обичай ;)
Масивите могат да бъдат и многомерни... тоа лист е супер тежък тип, намразих го откакто си направих едни прости сметки. Ако ще правиш големи изчисления с повечко данни и те интересува скоростта, ползвай [] от byte[], вместо <>...

ПъСъ: ако имаш работещ код на нещо друго, давай насам, ще помагаме да се портне на До Диез

Автор:  ДедоБоре [ Пон Апр 18, 2011 7:36 pm ]
Заглавие: 

Grubi написа:
имах предвид че акробата работеше добре...

аз държа текущ ридер и петица. по простата причина, че за 5 имам плъгин за селект на колона от таблица.
особено ми е полезно, като "правя" схематични символи само от .pdf

Автор:  TheWizard [ Вто Апр 19, 2011 1:29 am ]
Заглавие: 

Цитат:
и честно казано имах чувството че се качих от мерцедес на трабантче :oops:


за тебе С# е мерцедеса ли !?!?!?!

Автор:  valioman [ Вто Апр 19, 2011 8:57 am ]
Заглавие: 

TheWizard написа:
Цитат:
и честно казано имах чувството че се качих от мерцедес на трабантче :oops:


за тебе С# е мерцедеса ли !?!?!?!


Гледна точка :P
Явно и теб те дразнят хората които работят с продукти създадени от всичко Micro започващо.

Автор:  ash [ Вто Апр 19, 2011 10:05 am ]
Заглавие: 

Сега за "марки" ли ще спорите? Нали езикът е начин за изразяване и изборът на такъв зависи преди всичко от крайната цел.
Острото Цъ има страшно много глезотии, които са почти безценни, ако пишеш... дотнет, силвърлайт...
А пишеш нещо или за пари или за кеф. Ако го правиш за пари, изобщо не трябва да ти пука и ако можеш да правиш добри свирки и съвестта ти го позволява, нека някой ти се присмива, а ти да правиш пачки с това. Ако го правиш за кеф - всеки език обогатява човека, тъй като с различния синтаксис и "граматика" като цяло, си идва и нова гледна точка за крайния продукт.
В този смисъл, споровете за "по-добри" езици е интересна изложба на речниковия запас, която е полезна само ако не се прекалява.

Мисля си на глас, де, вие си продължавайте.

Автор:  TheWizard [ Вто Апр 19, 2011 11:47 am ]
Заглавие: 

Не, не - не ме дразни, нито платформите нито съм предубеден към някой език
просто двете платформи Делфи и С# са достатъчно мощни НО коренно различни за да се сравняват с мерцедес и трабантче
Виж, да сравняваш Java и NET съм съгласен....

@Grubi:
не разбрах какво точно те мъчи в случая
а само информативно ти давам една "светлинка" да разгледаш в гугъла - CFAR(Constant false alarm rate) може и да ти е от полза :)

а може и:
Exponential Moving Average
EMA(current) = ( (Price(current) - EMA(prev) ) x Multiplier) + EMA(prev)

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/