Отговори на тема  [ 23 мнения ]  Отиди на страница 1, 2  Следваща
решава логиката (инспектор стрезов) 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 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
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Сря Апр 05, 2006 9:52 pm
Мнения: 877
Местоположение: Разград
Мнение 
2 секунди не са достатъчни за да може да се покрие целия обхват от 900 до 1100 Hz.
Както е зададено в аргумента на sin функцията, времето за семплиране постоянно нараства и 2-те секунди
изтичат още на 930-940 Hz (сега не се сещам как да се изчисли точно). Затова АЧХ то е изместено към ниските честоти.
С други думи, трябва на всеки цикъл времето за генериране на всяка една честоота да е еднакво.


Пет Авг 25, 2006 11:18 pm
Профил
Ранг: Напреднал
Ранг: Напреднал

Регистриран на: Нед Авг 14, 2005 1:08 pm
Мнения: 433
Местоположение: Казанлък
Мнение 
sin(радианите) ?


Съб Авг 26, 2006 2:36 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
каспаров, както казах, времето за сканиране не играе никаква роля, същото АЧХ се получава и при сканиране 100 секунди, абсолютно същото, а не просто подобно. освен това, къде видя че времето за семплиране нараства? времето за семплиране между другото няма никаква значение в случая, затова не съм го дал колко е, но просто за информация - 8килохерца.
и всъщност, изместването вляво на АЧХто, означава обратното на това което твърдиш, а именно че честотата отива ТВЪРДЕ ВИСОКО, над горната граница от 1100 херца, която по план трябва да достига. ако времето изтичаше на 930-940 херца, както предполагаш, въобще нямаше да виждам лентата на филтъра, понеже той пуска в диапазона 950-1050, а забележи, аз я виждам цялата. АЧХто се снема долу горе така: _--___ а реално трябва да е така __--__ .

VSU, много си лаконичен :)


Съб Авг 26, 2006 8:01 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 17, 2005 5:07 pm
Мнения: 813
Местоположение: Сливен
Мнение 
Компилатора ти прави ли разлика между t и Т ?


Вто Авг 29, 2006 1:19 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
разбира се, макар че това се вижда от кода. ако не правеше, нямаше да се влезе в цикъла, тъй като не е изпълнено х<х. а щом все пак кода рисува АЧХто, то значи в цикъла се влиза и следователно прави разлика между малки и главни букви.


Вто Авг 29, 2006 9:33 pm
Профил
Ранг: Напреднал
Ранг: Напреднал

Регистриран на: Нед Авг 14, 2005 1:08 pm
Мнения: 433
Местоположение: Казанлък
Мнение 
кажи zaphod прав ли съм за радианите или другаде е дерта


Вто Авг 29, 2006 11:57 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
не разбирам какво имаш предвид, твърде лаконично се изрази с тези радиани. ако имаш предвид че синуса използва радиани, а не градуси, то не е проблема в това.


Сря Авг 30, 2006 8:06 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение 
Според мен f=900+200*t


Последна промяна perro_iv на Нед Сеп 03, 2006 8:48 am, променена общо 2 пъти



Нед Сеп 03, 2006 12:30 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 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
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение 
Да бе сутринта се сетих и щях да трия мнението, ама ти си го заклеймил :)
Мисля, че float signal=... няма място тука, а трябва да е в друг цикъл.


Нед Сеп 03, 2006 8:49 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
ако е във отделен цикъл (външен по честота и вътрешен по време) определено няма да го има проблема, но честотата ще се променя стъпално, и като цяло при същата прецизност ще се сканира повече време. така с един цикъл си е добре, стига човек да съобрази къде е уловката, пък и в случая това не е тема зов за помощ "кажете къде бъркам", а просто главоблъсканица.


Нед Сеп 03, 2006 5:01 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Ное 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 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
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 23 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

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


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

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