Отговори на тема  [ 14 мнения ] 
Филтър в C# 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Мар 16, 2006 9:42 am
Мнения: 12118
Местоположение: Гьотеборг
Мнение Филтър в 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 1:53 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8397
Местоположение: София
Мнение 
Поправете ме, ако греша, но ваденето на дадена съставляваща от общ сигнал не е ли въпрос на много яка математика (Фурие, уейвлети и т.н.)?


Сря Окт 29, 2008 6:25 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Яну 19, 2007 9:16 am
Мнения: 1063
Местоположение: путинофили: "иди н***й"
Мнение 
и Аз мисля че книгата за C# ти е най-малкия проблем - трябва да наблегнеш малко на математикаъа (всъщност доста!)
(ако съм схванал какво точно искаш да направиш ... )

_________________
путинофили: "иди н***й"


Сря Окт 29, 2008 6:50 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Мар 16, 2006 9:42 am
Мнения: 12118
Местоположение: Гьотеборг
Мнение 
ами в случая не - пакета в случая се разделя на 128 части и след като запомниш статичния пакет(околния шум), започваш измерването. от всяка част на последно постъпилия пакет се вади съоветната стойност от статичния пакет, като накрая се добавя средната стойност от максимума и минимума, които могат да се изобразяват в съоветния прозорец. така ако нямаш сигнал, виждаме права линия - в идеалния случай статичния пакет се вади от само себе си. когато обаче има отклонение от статичния сигнал, в иделания случай виждаш само него(изменението). Май на това му казват медианен филтър.


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


Сря Окт 29, 2008 6:54 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 17, 2005 5:07 pm
Мнения: 813
Местоположение: Сливен
Мнение 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 - новата измерена стойност


Чет Окт 30, 2008 10:07 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Мар 16, 2006 9:42 am
Мнения: 12118
Местоположение: Гьотеборг
Мнение 
благодаря, в момента основната трудност е C#. в този си вид филтъра работи, а това че се закръглява в момента не е проблем (но благодаря за съвета и формулите).

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

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

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


Чет Окт 30, 2008 11:23 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 17, 2005 5:07 pm
Мнения: 813
Местоположение: Сливен
Мнение 
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:


Чет Окт 30, 2008 11:29 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Мар 16, 2006 9:42 am
Мнения: 12118
Местоположение: Гьотеборг
Мнение 
ще го пробвам. нямах предвид Ц# за това, че е лош. имах предвид че акробата работеше добре, а сега се опитват да го накарат да свири, пее
и т.н. но това разваля основното му предназначение - да отваря документи и да ги прави лесни за четене.

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


Чет Окт 30, 2008 1:44 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Чет Дек 18, 2008 9:00 pm
Мнения: 16
Местоположение: 0x2A
Мнение 
Той не е български тоя обичай ;)
Масивите могат да бъдат и многомерни... тоа лист е супер тежък тип, намразих го откакто си направих едни прости сметки. Ако ще правиш големи изчисления с повечко данни и те интересува скоростта, ползвай [] от byte[], вместо <>...

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

_________________
Bit happens


Пон Апр 18, 2011 7:08 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10103
Мнение 
Grubi написа:
имах предвид че акробата работеше добре...

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


Пон Апр 18, 2011 7:36 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6107
Мнение 
Цитат:
и честно казано имах чувството че се качих от мерцедес на трабантче :oops:


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

_________________
main[-1u]={1};


Вто Апр 19, 2011 1:29 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 17, 2005 5:07 pm
Мнения: 813
Местоположение: Сливен
Мнение 
TheWizard написа:
Цитат:
и честно казано имах чувството че се качих от мерцедес на трабантче :oops:


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


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


Вто Апр 19, 2011 8:57 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Чет Дек 18, 2008 9:00 pm
Мнения: 16
Местоположение: 0x2A
Мнение 
Сега за "марки" ли ще спорите? Нали езикът е начин за изразяване и изборът на такъв зависи преди всичко от крайната цел.
Острото Цъ има страшно много глезотии, които са почти безценни, ако пишеш... дотнет, силвърлайт...
А пишеш нещо или за пари или за кеф. Ако го правиш за пари, изобщо не трябва да ти пука и ако можеш да правиш добри свирки и съвестта ти го позволява, нека някой ти се присмива, а ти да правиш пачки с това. Ако го правиш за кеф - всеки език обогатява човека, тъй като с различния синтаксис и "граматика" като цяло, си идва и нова гледна точка за крайния продукт.
В този смисъл, споровете за "по-добри" езици е интересна изложба на речниковия запас, която е полезна само ако не се прекалява.

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

_________________
Bit happens


Вто Апр 19, 2011 10:05 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6107
Мнение 
Не, не - не ме дразни, нито платформите нито съм предубеден към някой език
просто двете платформи Делфи и С# са достатъчно мощни НО коренно различни за да се сравняват с мерцедес и трабантче
Виж, да сравняваш Java и NET съм съгласен....

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

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

_________________
main[-1u]={1};


Вто Апр 19, 2011 11:47 am
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 14 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 8 госта


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

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни