|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 6:06 pm
решава логиката (инспектор стрезов)
| Автор |
Съобщение |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
 решава логиката (инспектор стрезов)
значи днес наблюдавах поредното чудо, от тия, дето ако човек не внимава, може да почне да вярва в духове.
та да разкажа за какво става въпрос
правя си аз един цифров филтър (лентов пропускащ), и всичко е точно. пускам си разни честоти през филтъра, държи се както трябва.
викам си обаче, я вместо да му пускам честоти на ръка, направо да му изрисувам ачехато та да видя как изглежда в детайли и дали има нещо за позатягане. речено сторено, правя следното:
Т=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 минути, докато накрая се усетих. обаче, реших да ви предоставя удоволствието и вие да си поблъскате главите, не е за изпускане
понеже всичко може да се "обясни", бих искал да сложа един малко по-строг критерий към предположенията, а именно да се посочва какво трябва да се промени, за да се отстрани проблема. голите обяснения никога не са ме кефели....
искам да ви уверя, че причината е изцяло в парчето код което съм дал, и не касае нито филтъра, нито визуализацията.
и така, каква е причината според вас? 
|
| Пет Авг 25, 2006 8:42 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
до колкото имам бегли познания за С виждам следното:
for(float t=0;t<T;t+=dt)
Поне доколкото го разбирам,дефинираш,че нараствнето на t+ с dt,но никъде в последствие не работиш с dt. Би трябвало в долните 2 израза да се замени t с dt и от това идва целия проблем.
Поне така мисля но може и да греша.
|
| Пет Авг 25, 2006 9:23 pm |
|
 |
|
kasparov
Ранг: Почетен член
Регистриран на: Сря Апр 05, 2006 9:52 pm Мнения: 877 Местоположение: Разград
|
2 секунди не са достатъчни за да може да се покрие целия обхват от 900 до 1100 Hz.
Както е зададено в аргумента на sin функцията, времето за семплиране постоянно нараства и 2-те секунди
изтичат още на 930-940 Hz (сега не се сещам как да се изчисли точно). Затова АЧХ то е изместено към ниските честоти.
С други думи, трябва на всеки цикъл времето за генериране на всяка една честоота да е еднакво.
|
| Пет Авг 25, 2006 11:18 pm |
|
 |
|
VSU
Ранг: Напреднал
Регистриран на: Нед Авг 14, 2005 1:08 pm Мнения: 433 Местоположение: Казанлък
|
sin(радианите) ?
|
| Съб Авг 26, 2006 2:36 am |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
каспаров, както казах, времето за сканиране не играе никаква роля, същото АЧХ се получава и при сканиране 100 секунди, абсолютно същото, а не просто подобно. освен това, къде видя че времето за семплиране нараства? времето за семплиране между другото няма никаква значение в случая, затова не съм го дал колко е, но просто за информация - 8килохерца.
и всъщност, изместването вляво на АЧХто, означава обратното на това което твърдиш, а именно че честотата отива ТВЪРДЕ ВИСОКО, над горната граница от 1100 херца, която по план трябва да достига. ако времето изтичаше на 930-940 херца, както предполагаш, въобще нямаше да виждам лентата на филтъра, понеже той пуска в диапазона 950-1050, а забележи, аз я виждам цялата. АЧХто се снема долу горе така: _--___ а реално трябва да е така __--__ .
VSU, много си лаконичен 
|
| Съб Авг 26, 2006 8:01 am |
|
 |
|
valioman
Ранг: Почетен член
Регистриран на: Съб Сеп 17, 2005 5:07 pm Мнения: 813 Местоположение: Сливен
|
Компилатора ти прави ли разлика между t и Т ?
|
| Вто Авг 29, 2006 1:19 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
разбира се, макар че това се вижда от кода. ако не правеше, нямаше да се влезе в цикъла, тъй като не е изпълнено х<х. а щом все пак кода рисува АЧХто, то значи в цикъла се влиза и следователно прави разлика между малки и главни букви.
|
| Вто Авг 29, 2006 9:33 pm |
|
 |
|
VSU
Ранг: Напреднал
Регистриран на: Нед Авг 14, 2005 1:08 pm Мнения: 433 Местоположение: Казанлък
|
кажи zaphod прав ли съм за радианите или другаде е дерта
|
| Вто Авг 29, 2006 11:57 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
не разбирам какво имаш предвид, твърде лаконично се изрази с тези радиани. ако имаш предвид че синуса използва радиани, а не градуси, то не е проблема в това.
|
| Сря Авг 30, 2006 8:06 am |
|
 |
|
perro_iv
Ранг: Новодошъл
Регистриран на: Вто Авг 23, 2005 10:36 am Мнения: 156 Местоположение: Казанлък
|
Според мен f=900+200*t
Последна промяна perro_iv на Нед Сеп 03, 2006 8:48 am, променена общо 2 пъти
|
| Нед Сеп 03, 2006 12:30 am |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
тц не е.
по твоя израз
t=0, f=900
t=T, f=900+200T
ако си избера период за сканиране 10 секунди, излиза че ще сканирам от 900 до 2900 херца, а аз искам независимо от времето за сканиране да сканирам винаги от 900 до 1100
|
| Нед Сеп 03, 2006 8:47 am |
|
 |
|
perro_iv
Ранг: Новодошъл
Регистриран на: Вто Авг 23, 2005 10:36 am Мнения: 156 Местоположение: Казанлък
|
Да бе сутринта се сетих и щях да трия мнението, ама ти си го заклеймил
Мисля, че float signal=... няма място тука, а трябва да е в друг цикъл.
|
| Нед Сеп 03, 2006 8:49 am |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
ако е във отделен цикъл (външен по честота и вътрешен по време) определено няма да го има проблема, но честотата ще се променя стъпално, и като цяло при същата прецизност ще се сканира повече време. така с един цикъл си е добре, стига човек да съобрази къде е уловката, пък и в случая това не е тема зов за помощ "кажете къде бъркам", а просто главоблъсканица.
|
| Нед Сеп 03, 2006 5:01 pm |
|
 |
|
nickich
Ранг: Почетен член
Регистриран на: Вто Ное 01, 2005 10:23 am Мнения: 704 Местоположение: Limerick, Ireland
|
Просто налучквам....
float f=900+200*t/T => float f=(900+200*t)/T
??? 
_________________ "640 К са достатъчни на всеки за всичко." Бил Гейтс
|
| Нед Сеп 03, 2006 9:03 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
аз мисля че проблемът е математически, жалко само че съм забравил математиката
Всъщност вариантите за обеснения са 2, математически и нематематически.
Нематематическият вариант е че sin(2*pi*f*t) където f се изменя от 900 до 1100, а t от 0 до 2, ще изпише 2200 на брой синосуиди. Откъде излиза че едва ли не средната честота е 1100, a пък ние искаме това да е максималната.
Математическия вариат на обяснението е че трябва да сметне правилно производната на сигнала и тогава да се интегрира
В момента между два отчета имаме нарастване fdt + tdf + dfdt (май последното е излишно 
|
| Нед Сеп 03, 2006 11:46 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 0 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|