| Микроконтролери и електроника 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# | |||||||||
Честно казано не разбрах кое те затруднява езика 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 ] | |||||||||
| Заглавие: | ||||||||||
List<byte[]> s12 = new List<byte[]>(); for(int i =0;i<50;i++) { s12.Add(Buffer); } foreach (byte[] b in s12) { /// тука си слагаш обработката за всеки масив като b ти е всеки един от масивите } Лошо е да се говори за нещо за което нищо не знаеш и аз преди година писах на Делфи и го боготворях но преди 2 дни ми се наложи да пиша пак на делфи и честно казано имах чувството че се качих от мерцедес на трабантче |
||||||||||
| Автор: | Grubi [ Чет Окт 30, 2008 1:44 pm ] |
| Заглавие: | |
ще го пробвам. нямах предвид Ц# за това, че е лош. имах предвид че акробата работеше добре, а сега се опитват да го накарат да свири, пее и т.н. но това разваля основното му предназначение - да отваря документи и да ги прави лесни за четене. всяко непознато нещо се посреща с неодобрение и скептицизъм по стар български обичай |
|
| Автор: | ash [ Пон Апр 18, 2011 7:08 pm ] |
| Заглавие: | |
Той не е български тоя обичай Масивите могат да бъдат и многомерни... тоа лист е супер тежък тип, намразих го откакто си направих едни прости сметки. Ако ще правиш големи изчисления с повечко данни и те интересува скоростта, ползвай [] от byte[], вместо <>... ПъСъ: ако имаш работещ код на нещо друго, давай насам, ще помагаме да се портне на До Диез |
|
| Автор: | ДедоБоре [ Пон Апр 18, 2011 7:36 pm ] | |||||||||
| Заглавие: | ||||||||||
аз държа текущ ридер и петица. по простата причина, че за 5 имам плъгин за селект на колона от таблица. особено ми е полезно, като "правя" схематични символи само от .pdf |
||||||||||
| Автор: | TheWizard [ Вто Апр 19, 2011 1:29 am ] | |||||||||
| Заглавие: | ||||||||||
за тебе С# е мерцедеса ли !?!?!?! |
||||||||||
| Автор: | valioman [ Вто Апр 19, 2011 8:57 am ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Гледна точка Явно и теб те дразнят хората които работят с продукти създадени от всичко 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/ |
|