23 Mart 2012 Cuma

Çanak Anten Formülü


 
Bir önceki yazıda ispatladığımız gibi yer-sabit (geostationary) uydular ekvator düzleminde yer alan 42.164 km yarıçaplı bir çember üzerinde dolanırlar. Şu anda bu yörüngede 300'den fazla uydu vardır. Bu uyduların konumları ekvator üzerine izdüşümlerinin meridyeni ile verilir. Örnek olarak yer-sabit bir uydu olan TÜRKSAT uydusu 42 derece doğu meridyeni üzerinde yer alır. Peki dünya üzerinde herhangi bir noktadan herhangi bir uyduya çevirdiğimiz çanak anteninin yönü ne olmalıdır? Vektör işlemleri ve koordinat sistemi dönüşümleri ile bu soru da kolayca cevaplandırabilir.

Dünyanın mükemmel bir küre olduğunu varsayalım; (bu varsayımın hassasiyetine en son bakarız.)



İki koordinat sistemi seçiyoruz. Birincisi orjini dünyanın merkezinde olan, z-ekseni kuzey kutbundan çıkan, x-ekseni 0 derece meridyeni ile ekvatorun kesişim noktasından çıkan kartezyen koordinat sistemi olsun. Bu koordinat sisteminde yer-sabit uydunun konumunu vektörü ile; dünya üzerinde paraleli ve meridyeninde bulunan gözlemcinin konumunu ise vektörü ile gösterelim. Bu durumda uyduya bakan gözlemci vektörü yönünde bakmaktadır.

Seçtiğimiz ikinci koordinat sistemi gözlemcinin konum vektörü için küresel koordinat sistemidir. Bu sistem aynı zamanda bu gözlemcinin yerel koordinat sistemidir. Öyle ki vektörü gök kubbenin "doruğunu" (zenith) gösterirken vektörü coğrafi kuzeyi (manyetik kuzeyle karışmasın) vektörü ise coğrafi doğu istikametini göstermektedir. Şapka sembolü birim vektörleri ifade etmektedir.

Vektörlerimizi bu koordinat sistemlerinin birim vektörleri cinsinden yazalım.






Burada R bir önceki yazıda hesapladığımız 42.164 km. olup r ise dünyanın yarıçapı olan 6371 km. dir. (Küre kabulunde bu ortalama rakamı alıyoruz.) Bunun haricinde tanımladığımız küresel birim vektörlerinin kartezyen birim vektörler cinsinden ifadelerine de ihtiyacımız olacak:








Esas yapmamız gereken vektörünün küresel sistemdeki birim vektörler yönünde izdüşümlerini bulmakdır. Böylece hangi coğrafi yönde ve ufuktan kaç derece yukarı bakılması gerektiğini bulmuş oluruz.

Vektörler arasındaki açıyı bulmak için iki vektörü skaler çarpım yaptırıp boylarına böleceğiz. Bu işlem bize aranılan açının kosinüsünü verir.

Önce doruk ile yapılan açıya bakalım. Bu açıya ismini verelim. Bu durumda






eşitliğinin sağındaki ifadeyi hesaplamamız gerekmektedir. Bu ifadenin ters kosinüsünü alıp 90 dereceden çıkarırsak gözlemcinin uyduyu ufuktan kaç derece yukarıda (elevation) araması gerektiğini buluruz.

Peki gözlemcinin yüzünü hangi yöne çevirmesi gerekmektedir?  Bunu bulmak için vektörünün (kuzey) ile (doğu) üzerinde izdüşümlerinin oranını hesaplayacağız. Bu oran bize yönü bildiren açısının tanjantını verecektir.



(Burada beta eğer 0 derece ise kuzeyi, 90 ise doğuyu, 180 ise güneyi, 270 ise batıyı ifade eder.)

Vektörlerin hepsinin kartezyen koordinatların birim vektörleri cinsinden ifadelerini yerine koymak kalıyor. Eğer sözüme güvenirseniz sonuçta çıkan formüllerin hiç de sevimli ve akılda kalıcı şeyler olmadığını söyleyebilirim. Dolayısı ile daha pratik olan şeyi tercih ediyorum ve bu hesabı bizim için yapan bir bilgisayar kodu veriyorum. Her zamanki gibi python dilinde. Sonuçlar sadece bu işi yapan bir web sitesi olan www.dishpointer.com ile tamamen uyumludur. Dolayısı ile küre varsayımımızın iyi işlediği söylenebilir. 

NOT: Aynı programda R vektörü dünya üzerinde bir noktayı gösterecek şekilde değiştirilir, omega ve alfa iptal edilirse program bu noktaya doğru bakan yönü bulmak için de pekala kullanılabilir. (ör: Kıble yönü vs...)

---------------
import math as m  # Trigonometri icin lazim

def carp(a,b):           # Once vektorleri skaler carpmayi ogretelim bilgisayara
    return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]

def skaler(c,a):         # Simdi de bir vektoru bir skaler ile carpmayi
    d = [ ]
    d.append(c*a[0])
    d.append(c*a[1])
    d.append(c*a[2])
    return d

def topla(a,b):         # Iki vektoru toplamayi da ogretelim.
    c = [ ]
    c.append(a[0]+b[0])
    c.append(a[1]+b[1])
    c.append(a[2]+b[2])
    return c

def boy(a):              # Son olarak bir vektorun boyu nasil hesaplanir gosterelim
    return (a[0]*a[0]+a[1]*a[1]+a[2]*a[2])**0.5

r_boy = 6371.0             # Dunya yaricapi
R_boy = 42164.0          # Uydu mesafesi

print 'KUZEY PARALELLERI POZITIF GUNEY PARALELLERI NEGATIF GIRILMELIDIR'

teta = input('Paralel: ')*m.pi/180    # Girilen aciyi dereceden radyana cevirir

print 'DOGU MERIDYENLERI POZITIF BATI MERIDYENLERI NEGATIF GIRILMELIDIR'

fi = input('Meridyen: ')*m.pi/180

print 'DOGU MERIDYENLERI POZITIF BATI MERIDYENLERI NEGATIF GIRILMELIDIR'

omega = input('Uydu meridyeni: ')*m.pi/180

# Birim vektorleri tanitalim

r_bir = [m.cos(teta)*m.cos(fi),m.cos(teta)*m.sin(fi),m.sin(teta)]
teta_bir = [-1*m.sin(teta)*m.cos(fi),-1*m.sin(teta)*m.sin(fi),m.cos(teta)]
fi_bir = [-1*m.sin(fi),m.cos(fi),0]


# Uydunun ve gozlemcinin konum vektorlerini tanimlayalim

R = [R_boy*m.cos(omega),R_boy*m.sin(omega),0]
r = skaler(r_boy,r_bir)

Rr = topla(R,skaler(-1,r))
alfa = 90 - 180*m.acos(carp(Rr,r_bir)/boy(Rr))/m.pi

Dogu_iz = carp(Rr,fi_bir)          # Dogu yonune izdusum
Kuzey_iz = carp(Rr,teta_bir)      # Kuzey yonune izdusum
beta = 180*m.atan(Dogu_iz/Kuzey_iz)/m.pi

if Dogu_iz*Kuzey_iz >= 0:           # Bu kisim coklu deger alabilen
   if Dogu_iz < 0:                          # trigonometrik fonksiyonlarin
      beta = beta + 180                  # degerlerinin karismasini onlemek
else:                                              # icindir.
   if Kuzey_iz < 0:                          # 
      beta = beta + 180                  #
   else:                                           #
      beta = beta + 360                  #

print beta,'yonunde.'
print 'Ufuktan',alfa,'derece yuksekte.'

2 yorum:

  1. matlab kodu olduğunu belirtmekte fayda olabilir

    YanıtlaSil
  2. Kod python dilindedir, ekleme yaptım, teşekkürler...

    YanıtlaSil