Tek satır kodla sinus hesaplama integer.

devreci

Aktif Üye
Katılım
25 Mart 2020
Mesajlar
399
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: 88
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: 38
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: 49
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: 42
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
5,844
Mesajlar
99,712
Üyeler
2,481
Son üye
rfdog12

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top