| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| решава логиката (инспектор стрезов) http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=2811 |
Страница 1 от 2 |
| Автор: | zaphod [ Пет Авг 25, 2006 8:42 pm ] |
| Заглавие: | решава логиката (инспектор стрезов) |
значи днес наблюдавах поредното чудо, от тия, дето ако човек не внимава, може да почне да вярва в духове. та да разкажа за какво става въпрос правя си аз един цифров филтър (лентов пропускащ), и всичко е точно. пускам си разни честоти през филтъра, държи се както трябва. викам си обаче, я вместо да му пускам честоти на ръка, направо да му изрисувам ачехато та да видя как изглежда в детайли и дали има нещо за позатягане. речено сторено, правя следното: Т=2;// време за сканиране 2 секунди for(float t=0;t<T;t+=dt){ float f=900+200*t/T;// тук формирам линейно нарастваща честота от 900 до 1100 херца float signal=sin(2*pi*f*t); .................................... тук подавам сигнала на филтъра и изрисувам изхода } с една дума, правя един сигнал, който си мени линейно честотата от 900 до 1100 херца и го подавам на филтъра и рисувам изходната реакция. та пускам аз цялата чудесия, и за моя изненада, ачехато на филтъра изместено ВЛЯВО , към ниските честоти, и то доста. толкова доста, че честотите които при ръчно подаване минават без затихване, на АЧХто направо са извън лентата му. реших че просто сканирам прекалено бързо, и това е някаква реакция на филтъра (въпреки че се сещате предполагам, че в такъва случай щеше да е изместена вдясно). намалих скоростта на сканиране, никаква промяна. АЧХто оставаше изместено вляво, дори ако сканирам извънредно бавно, за 100 секунди да речем. пулих се към 15 минути, докато накрая се усетих. обаче, реших да ви предоставя удоволствието и вие да си поблъскате главите, не е за изпускане понеже всичко може да се "обясни", бих искал да сложа един малко по-строг критерий към предположенията, а именно да се посочва какво трябва да се промени, за да се отстрани проблема. голите обяснения никога не са ме кефели.... искам да ви уверя, че причината е изцяло в парчето код което съм дал, и не касае нито филтъра, нито визуализацията. и така, каква е причината според вас? |
|
| Автор: | Ки4о [ Пет Авг 25, 2006 9:23 pm ] |
| Заглавие: | |
до колкото имам бегли познания за С виждам следното: for(float t=0;t<T;t+=dt) Поне доколкото го разбирам,дефинираш,че нараствнето на t+ с dt,но никъде в последствие не работиш с dt. Би трябвало в долните 2 израза да се замени t с dt и от това идва целия проблем. Поне така мисля но може и да греша. |
|
| Автор: | kasparov [ Пет Авг 25, 2006 11:18 pm ] |
| Заглавие: | |
2 секунди не са достатъчни за да може да се покрие целия обхват от 900 до 1100 Hz. Както е зададено в аргумента на sin функцията, времето за семплиране постоянно нараства и 2-те секунди изтичат още на 930-940 Hz (сега не се сещам как да се изчисли точно). Затова АЧХ то е изместено към ниските честоти. С други думи, трябва на всеки цикъл времето за генериране на всяка една честоота да е еднакво. |
|
| Автор: | VSU [ Съб Авг 26, 2006 2:36 am ] |
| Заглавие: | |
sin(радианите) ? |
|
| Автор: | zaphod [ Съб Авг 26, 2006 8:01 am ] |
| Заглавие: | |
каспаров, както казах, времето за сканиране не играе никаква роля, същото АЧХ се получава и при сканиране 100 секунди, абсолютно същото, а не просто подобно. освен това, къде видя че времето за семплиране нараства? времето за семплиране между другото няма никаква значение в случая, затова не съм го дал колко е, но просто за информация - 8килохерца. и всъщност, изместването вляво на АЧХто, означава обратното на това което твърдиш, а именно че честотата отива ТВЪРДЕ ВИСОКО, над горната граница от 1100 херца, която по план трябва да достига. ако времето изтичаше на 930-940 херца, както предполагаш, въобще нямаше да виждам лентата на филтъра, понеже той пуска в диапазона 950-1050, а забележи, аз я виждам цялата. АЧХто се снема долу горе така: _--___ а реално трябва да е така __--__ . VSU, много си лаконичен |
|
| Автор: | valioman [ Вто Авг 29, 2006 1:19 pm ] |
| Заглавие: | |
Компилатора ти прави ли разлика между t и Т ? |
|
| Автор: | zaphod [ Вто Авг 29, 2006 9:33 pm ] |
| Заглавие: | |
разбира се, макар че това се вижда от кода. ако не правеше, нямаше да се влезе в цикъла, тъй като не е изпълнено х<х. а щом все пак кода рисува АЧХто, то значи в цикъла се влиза и следователно прави разлика между малки и главни букви. |
|
| Автор: | VSU [ Вто Авг 29, 2006 11:57 pm ] |
| Заглавие: | |
кажи zaphod прав ли съм за радианите или другаде е дерта |
|
| Автор: | zaphod [ Сря Авг 30, 2006 8:06 am ] |
| Заглавие: | |
не разбирам какво имаш предвид, твърде лаконично се изрази с тези радиани. ако имаш предвид че синуса използва радиани, а не градуси, то не е проблема в това. |
|
| Автор: | perro_iv [ Нед Сеп 03, 2006 12:30 am ] |
| Заглавие: | |
Според мен f=900+200*t |
|
| Автор: | zaphod [ Нед Сеп 03, 2006 8:47 am ] |
| Заглавие: | |
тц не е. по твоя израз t=0, f=900 t=T, f=900+200T ако си избера период за сканиране 10 секунди, излиза че ще сканирам от 900 до 2900 херца, а аз искам независимо от времето за сканиране да сканирам винаги от 900 до 1100 |
|
| Автор: | perro_iv [ Нед Сеп 03, 2006 8:49 am ] |
| Заглавие: | |
Да бе сутринта се сетих и щях да трия мнението, ама ти си го заклеймил Мисля, че float signal=... няма място тука, а трябва да е в друг цикъл. |
|
| Автор: | zaphod [ Нед Сеп 03, 2006 5:01 pm ] |
| Заглавие: | |
ако е във отделен цикъл (външен по честота и вътрешен по време) определено няма да го има проблема, но честотата ще се променя стъпално, и като цяло при същата прецизност ще се сканира повече време. така с един цикъл си е добре, стига човек да съобрази къде е уловката, пък и в случая това не е тема зов за помощ "кажете къде бъркам", а просто главоблъсканица. |
|
| Автор: | nickich [ Нед Сеп 03, 2006 9:03 pm ] |
| Заглавие: | |
Просто налучквам.... float f=900+200*t/T => float f=(900+200*t)/T ??? |
|
| Автор: | miro_atc [ Нед Сеп 03, 2006 11:46 pm ] |
| Заглавие: | |
аз мисля че проблемът е математически, жалко само че съм забравил математиката Всъщност вариантите за обеснения са 2, математически и нематематически. Нематематическият вариант е че sin(2*pi*f*t) където f се изменя от 900 до 1100, а t от 0 до 2, ще изпише 2200 на брой синосуиди. Откъде излиза че едва ли не средната честота е 1100, a пък ние искаме това да е максималната. Математическия вариат на обяснението е че трябва да сметне правилно производната на сигнала и тогава да се интегрира В момента между два отчета имаме нарастване fdt + tdf + dfdt (май последното е излишно |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|