Tek satır kodla sinus hesaplama integer.

devreci

Aktif Üye
Katılım
25 Mart 2020
Mesajlar
478
Sinuse bezetme değil tam doğru değeri hesaplıyor , bunu fpga da yapmak istediğim cpu içine gömeceğim. Bu yöntemle mcu için daire çizme , motor kontrolü vs için sincos elde için çok kolay şekilde kullanılabilir hem de float gerekmez .

Kod bu :katil2:

cos:
   Konum+=Hiz;  Hiz-=Konum/1000;

resim_2024-01-21_164023205.png
 

Ekler

  • cos.zip
    59 KB · Görüntüleme: 146
Hocam nasıl ben tam anlayamadım :D Zamanında mcuda daire çizmek için çok uğraşmıştım ama böyle şeyler hiç bulamamıştım. Mesela cos0 dan cos90 a kadar bütün değerleri print edip bide kendi denkleminiz için eder misiniz ? Ben kodu çeviremedim
 
Değerleri yazdırdım , iyileştirme yapılması lazım ama şu an işe yarar.
 

Ekler

  • sin.zip
    59.5 KB · Görüntüleme: 81
Hiz denen değişkende sinus değeri, konum değişkeni içinde cosinus oluşuyor , yazmayı unutmuşum ,

Sadece bu kodla ekrana daire çizdirmek mümkün , bunu ben icad ettim vay be

daire:
  int Hiz=0,Konum=0x8000000;

   for(döngü)
   {
    Konum+=Hiz;  Hiz-=Konum>>12;
    PutPixel((Konum>>20)+Xyer,(Hiz>>14) + Yyer);
   }



untitled.JPG
 

Ekler

  • daire.zip
    110.4 KB · Görüntüleme: 104
O sonucu.

A*Cos(x) fonskiyonunu Z domeninde yaz ardindan fark denklemine gec.

Matematik basliginda Z islemlerinden bahsedeyim.
 
Son düzenleme:
Ben bunu pid e benzettim ama z domini bunu doğrulayabilir ama z domineni bundan daha sade bir formul ortaya çıkaramaz.

A*Cos(x) fonskiyonunu Z domeninde yaz ardindan fark denklemine gec.

Bana kal geldi yapamadım, sen yazarsan çok sevinirim , belki buradan direkt açı ile sincos ulaşabilme formulu çıkarabiliriz.
 
Bu yontemle herhangi bir acinin sin ya da cos degerini hesaplamak icin 0 dan itibaren adim adim taaa istedigin aciya kadar olan hesaplari tek tek yapman lazim.

Ben bunu pid e benzettim ama z domini bunu doğrulayabilir ama z domineni bundan daha sade bir formul ortaya çıkaramaz.

Bunu yazdim bir kenara. Gor bak aynisi cikacak.
 
Sinüs tipi fonksiyonların low cost şekilde başarılı approximate etmek için cordic gibi algoritma lar mevcut. Üstelik mesela STM yeni işlemcilerinde(önceden yoktu sanırım) cordic co proccessor koyuyor.
 
Direkt aci ile sincos hesaplamayı buldum, kusursuz buluyor tam bilgisayarın bulduğu değeri buluyor. Kod çok daha küçülebiliyor ama yayınlamayacağım.

sincos:
float a=0.0f,b=90.0f;
   for(int h=0;h<23;h++)  {

   float sd=(a+b)*0.5f;  cx=(ax+bx)*0.5f;  cy=(ay+by)*0.5f;

   float u=cx*cx+cy*cy; u=sqrtf(u);  cx/=u; cy/=u;

  if(drc>sd)  {  ax=cx; ay=cy; a=sd;  } else {   bx=cx; by=cy; b=sd;   } 
}   outcos=cy; outsin=cx;

Bulma yöntemim bu , fraktal gibi iç içe 21 . döngüde float hassasiyetine ulaşıyor, vay be... benim icadım
ünlü matemetikçi diye dünya tarihine geçecem noluyoruz lan :dehset1: :dehset1:


untitled.PNG
 

Ekler

  • sincos.zip
    62.5 KB · Görüntüleme: 99
Sinüs tipi fonksiyonların low cost şekilde başarılı approximate etmek için cordic gibi algoritma lar mevcut. Üstelik mesela STM yeni işlemcilerinde(önceden yoktu sanırım) cordic co proccessor koyuyor.

Hocam kendimiz bişeyler yapalım diyoruz, kendi çapımızda eğleniyoruz , bi bok olacağı yok , eğlencemiz bu :temkinli1:.
 
23 iterasyonun her birisinde float bolme ve karekok islemi yapmak hic cazip degil.

23 elemanli Taylor serisini hesaplamak cok daha mantikli. Hic olmazsa carp topla var sadece.

Ya da CORDIC.
 
Hocam kendimiz bişeyler yapalım diyoruz, kendi çapımızda eğleniyoruz , bi bok olacağı yok , eğlencemiz bu :temkinli1:.
Yani amaç tamamen eğlence bile olsa bence karşılaştırma yapacak bir şeye ihtiyaç var, mesela hali hazırda olan algoritmalar ile hesaplama süresini karşılaştırmak lazım. Son attığınız kod mesela bence hiç optimize değil
 
23 iterasyonun her birisinde float bolme ve karekok islemi yapmak hic cazip degil.

23 elemanli Taylor serisini hesaplamak cok daha mantikli. Hic olmazsa carp topla var sadece.

Ya da CORDIC.
Hocam onların hepsi dışarı çıkabiliyor , kod tek satırda sadece toplama çıkarmaya çevrilebiliyor , ama bu şekilde yayınlamadım çünkü adam alacak kullanacak şuna da da üç beş bişeyler atalım demeyecek .

Ayrıca başka bir yöntem daha bulmuştum döngü de yok tek seferde buluyor ama yayınlamaycağım buradaki daha kötü olduğu için yayınladım.
 
Matematiksel cozumlere ve bilgisayar algoritmalarina bildigim kadariyla patent alinamiyor.
Yapman gereken ben yaptim oldu degil de matematiksel aciklamasini yapip makaleyi hakemli dergide yayinlatmak.
Boyle yaparsan senin adinla damgalanmis bir teknik dunyaca bilinmeye baslanir.
 
Son düzenleme:
Hocam float sayıların logaritmaları içinde böyle bir çalışma bekliyorum :D programın bir yerinde log fonskiyonunu çağırmamla 5kb alan gidiyor :D taylor açılımı falan denedim ama iterasyon çok yüksek oluyor
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
6,951
Mesajlar
118,749
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top