Bir dizide belirli sayıda en büyükleri bulma

Başlatan fractal, 21 Mart 2013, 17:06:19

fractal

arkadaşlar İrms ve İpeakrms hesaplamak istiyorum.örneğin 64 örnek aldım ve bunların karelerini alıp toplayı karakökünü bularak İrms hesapladım.
daha sonra bu 64 örnekten en büyük 8 tanesini nasıl bulurum en kısa zamanda.nasıl bir algortima kurmam gerekir.çünkü bunları ne kadar kısa zamanda yaparsam akımada okadar cabuk müdahale edeilirim diye düşünüyorum.tabi bu sadece p kontrolör oluyor.
ayriyeten şunuda sormak istiyorum sürekli 64 örnek alıp beklemek dışında başka metotlar varmı yani en son ölçülen değer ile önçeki değer arasındaki bir bağıntıdanda bu değerleri bulabilirmiyim?bu işe dma yı yada pwm modülünün nimetlerini sokabileceğim bir tarafları varmıdır?
Restantum cogniscutur Quantum deligutur

Okan AKÇA

#1
daha once bu şekilde bir uygulama yapmıstım sıralama ile ilk degerden başlıyorsun buldugun ilk büyük degeri başa tekrar alıyorsun aramaya başlıyorsun referans olarak ilk deger daima..

fractal

sanırım tüm tabloyu birbiriyle karşılaştırmadan yapmak imkansız gibi.e dizi uzadıkçada bu büyük problem.diziyi küçültüp sık sık rms bulmak bir çözüm olabilirmi?oda irms değerini ipeakrms değerine çeker..
Restantum cogniscutur Quantum deligutur

fractal

böyele birşey var ama sıralama yapıyor..

int i, j, k;
  8.   int sayi, gecici;
  9.   int sayilar[LIMIT];
 10.
 11.   /* girdi */
 12.   i=0;
 13.   while (i<LIMIT) {
 14.     scanf("%d", &sayi);
 15.     if (sayi==GOZCU)
 16.       break; /* girdi sonu */
 17.     sayilar[i++]=sayi;
 18.   }
 19.
 20.   /* siralama */
 21.   i--;
 22.   for (j=0; j<i; j++)
 23.     for (k=j+1; k<=i; k++)
 24.       if (sayilar[j]>sayilar[k]) {
 25.         gecici=sayilar[k];
 26.         sayilar[k]=sayilar[j];
 27.         sayilar[j]=gecici;
 28.       }
 29.
 30.   /* cikti */
 31.   k=0;
 32.   do
Restantum cogniscutur Quantum deligutur

Tagli

Sıralamanın ardından dizinin ilk 8 (veya son 8) elemanını alman yeterli olur.
Gökçe Tağlıoğlu

Okan AKÇA

bugun akşam eve gidince  bakayım kısa bir kod şimdi tam hatırlamıyorum...

fractal

kısa olması çok önemli 64 sayı için 64x64 karşılaştırma yapacakda tabloya dizilecekte.ama b u karşılaştırmayı yapmadanda bulmak imkanısz gibi yoksa herhangi bir sayının diğer sayıdan büyük yada kücük olduğu nasıl bilinecekki.ipeakrms hesaplamanın daha işlevsel bir yolu varmı bilmiyorum ama şu an bu hesaplamının biraz zaman aldığı bariz.
Restantum cogniscutur Quantum deligutur

elektronik

ilk değeri bir değişkene kaydet, sonraki değeri alıp değişkendeki değer ile karşılaştır yeni değer öncekinden büyükse
değişkene kaydet ( ve bir sonraki değeri okuyup aynı işlemi tekrarla ) değilse bir sonrakine geç bu şekilde tüm değerleri
kontrol et en büyük değeri buşmuş olursun.