Skip to main content

Etiket: MATLAB

Türkiye’nin 5G Dönüşümünde Yeni Bir Paradigma

Türkiye’de gerçekleştirilen 5G spektrum ihalesi, iletişim teknolojilerinde yeni bir dönemin resmi başlangıcı olarak görülmekte ve ülkenin dijital dönüşüm vizyonu açısından kritik bir eşik teşkil etmektedir. Bu dönüşüm yalnızca daha yüksek mobil veri hızları anlamına gelmemektedir; aksine, iletişim altyapısının sosyal, ekonomik ve teknolojik katmanlarının yeniden tanımlandığı bütünsel bir değişimi ifade eder. Şehirlerin dijitalizasyonu, endüstriyel otomasyonun gelişimi, savunma uygulamalarındaki iletişim–algılama birleşimi (ISAC), sağlık teknolojilerindeki yenilikler ve yapay zekâ tabanlı gerçek zamanlı sistemler gibi pek çok alan, 5G’nin sunduğu düşük gecikme, yüksek kapasite ve güvenilirlik temelinde şekillenmektedir.

Bu dönüşümün başarısı, yalnızca sahada kurulan baz istasyonlarına ya da operatörlerin sunduğu hizmetlere bağlı değildir. 5G’nin fiziksel katman yapısı, modülasyon teknikleri, anten dizileri, çoklu erişim yapıları, kanal modelleri ve protokol katmanları son derece karmaşık matematiksel süreçlere dayanır. Dolayısıyla bu teknolojinin hayata geçmeden önce akademik ve mühendislik düzeyinde kapsamlı biçimde modellenmesi, simüle edilmesi, test edilmesi ve donanımsal olarak doğrulanması zorunluluk haline gelmiştir. İşte bu noktada MATLAB’in 5G Toolbox, HDL Coder, SoC Blockset ve ilgili FPGA destek paketleri kritik rol oynar; simülasyondan prototiplemeye, prototiplemeden gerçek zamanlı donanım testine uzanan uçtan uca bir mühendislik hattı sunar.

Türkiye’de 5G’nin Sosyo-Teknik Arka Planı

Türkiye’nin 5G’ye geçiş kararı, yalnızca bilgi iletişim sektöründe değil, toplumun hemen her alanında etkili olacak bir değişim anlamına gelmektedir. Akıllı şehirlerden sağlığa, endüstriyel üretimden savunma teknolojilerine kadar geniş bir yelpazede kritik yeniliklerin önünü açan bütünsel bir ekosistemi beraberinde getirmektedir.

  • Akıllı şehir altyapılarının olgunlaşması, trafik yönetiminden enerji dağıtımına, güvenlik kameralarının gerçek zamanlı analizinden afet yönetim sistemlerine kadar pek çok kritik uygulamanın 5G’nin sunduğu yüksek bant genişliği ve düşük gecikme olmadan etkin şekilde işleyemeyeceğini gösteriyor.
  • Endüstri 4.0’ın gerçek anlamda uygulanması, 5G’nin deterministik zamanlama özelliklerinin otomasyon robotları, AGV/AMR sistemleri ve fabrika içi özel ağlarda kritik görev üstlenmesi sayesinde Türkiye’nin üretim sektörü için küresel rekabet gücü açısından bir zorunluluk haline geliyor.
  • Savunma sanayiinde iletişim ve algılamanın birleşimi, dünyada 6G hazırlıklarında en çok konuşulan kavramlardan biri olan Integrated Sensing and Communication (ISAC)’ın Türkiye’nin radar, SİHA ve elektronik harp kabiliyetleriyle birleştiğinde çok daha güçlü sistemlerin ortaya çıkmasını sağlayacağı anlamına geliyor.

Akademik ve Endüstriyel Tasarımın Temel Taşı: MATLAB 5G Toolbox

5G Toolbox, 3GPP NR (Yeni Radyo) fiziksel katmanının matematiksel olarak modellenmesi için son derece kapsamlı bir ortamdır. Akademik çalışmalarda teorik doğruluğun, endüstride ise standarda uygunluğun temel şart olduğu düşünülürse, bu toolbox hem simülasyon doğruluğu hem de esneklik açısından kritik bir rol oynar.

5G Toolbox; OFDM tabanlı dalga şekillerinin üretiminden LDPC/Polar kodlamaya, masif MIMO beamforming mimarilerinden FR1/FR2 kanal modellerine kadar tüm fiziksel katman bileşenlerini modelleyebilir. Üstelik PHY katmanının uçtan uca işleyişi, yani kodlamadan modülasyona, kanaldan eşitleyiciye ve hata oranı analizine kadar tüm aşamalar tek platformda bir araya gelir. Bu durum, tasarım sürecinin disiplinli ve tutarlı bir biçimde ilerlemesini sağlar.

Örneğin, Türkiye’de bir Ar-Ge ekibi yerli 5G modem ya da baz istasyonu tasarlamak istediğinde, ilk aşamada MATLAB 5G Toolbox içinde waveform üretir, kanal etkilerini test eder, beamforming tekniklerini dener ve elde edilen BER/BLER (Bit Error Rate/Block Error Rate) sonuçlarını analiz eder. Bu aşamada alınan sonuçlar, daha sonra FPGA üzerinde gerçekleştirilecek donanım uygulamalarının temel parametrelerini belirler.

Ray-Tracing Channel Görüntüsü

Gerçek Zamanlı 5G Sistemlerinin Vazgeçilmez Bileşeni: FPGA Ekosistemi

5G’nin gerektirdiği performans değerleri — örneğin 100 MHz üzeri bant genişlikleri, masif paralel anten dizileri, yüksek boyutlu FFT işlemleri — klasik işlemcilerin kapasitesini aşan yapıda olduğundan donanım hızlandırıcılar şarttır. FPGA’ler, paralel işlem yapısı ve deterministik çalışma prensibi sayesinde 5G fiziksel katmanının büyük kısmını gerçek zamanlı olarak çalıştırabilir.

FPGA’ler özellikle:

  • OFDM modülasyon/demodülasyon zinciri
  • Beamforming matris işlemleri
  • Kanal kodlama ve kod çözme
  • Zaman ve frekans senkronizasyon
  • Yüksek hızlı I/Q işleme hatları

gibi yoğun hesaplama gerektiren bloklarda kritik rol oynar.

Türkiye’de özellikle savunma ve telekom alanındaki firmalar Xilinx Zynq UltraScale+, RFSoC ve Intel Stratix gibi FPGA platformlarını yoğun biçimde kullanmaktadır. Bu nedenle MATLAB ile FPGA arasında kusursuz bir geliştirme akışı sağlayan araçların önemi büyüktür.

Simülasyondan Donanıma: HDL Coder ve SoC Blockset’in Birleştirici Rolü

5G Toolbox içinde doğrulanan bir algoritmanın FPGA üzerinde çalıştırılabilmesi için HDL Coder devreye girer. Bu araç MATLAB & Simulink modellerini doğrudan sentezlenebilir HDL koduna dönüştürür. Böylece tasarımcıların karmaşık algoritmaları sıfırdan HDL olarak yazmasına gerek kalmaz; kaynak kullanımı, zamanlama analizi ve donanım optimizasyonları otomatik biçimde oluşturulur.

Bu süreç:

  1. MATLAB’da tasarım
  2. Simülasyon ve doğrulama
  3. HDL Coder ile Verilog/VHDL üretimi
  4. FPGA üzerinde test (FIL-FPGA in the Loop)
  5. Geri bildirim ile tasarım iyileştirme

şeklinde döngüsel bir mimari oluşturur.

SoC Blockset ise FPGA + ARM gibi heterojen mimarilerin birlikte nasıl çalışacağını akademik ve endüstriyel düzeyde simüle eder. 5G sistemlerinde kontrol katmanı (MAC/RLC) genellikle ARM üzerinde çalışırken, fiziksel katman (PHY) FPGA üzerinde yürütülür. Bu birleşik yapı, 5G’nin gerçek zamanlı doğasına en uygun mimaridir.

RFSoC ile Gerçek Zamanlı Test Ortamlarının Oluşturulması

Simülasyon ve FPGA doğrulaması önemli adımlardır; fakat 5G’nin gerçek kablosuz ortamda nasıl performans göstereceğini anlamak için RF donanımı gereklidir. RFSoC platformları, entegre ADC/DAC birimleri sayesinde MATLAB–FPGA–RF akışını tamamlayan ideal bir prototipleme ortamı sunar.

Bu tür platformlar, Türkiye’de özellikle:

  • 5G modem prototipleri
  • Pasif bistatik radar çalışmaları
  • mmWave iletişim araştırmaları
  • ISAC projeleri
  • Endüstriyel kablosuz otomasyon sistemleri için sıkça kullanılmaktadır. Çünkü RFSoC ile gerçek antenler üzerinden — MATLAB tarafından üretilen dalga şekilleri kullanılarak —laboratuvar ortamında sahaya yakın testler yapılabilir.

Verify System RF Performance with Streaming Data Akış Görüntüsü

Sonuç

Türkiye’nin 5G’ye geçiş süreci yalnızca bir teknoloji adaptasyonu değil, aynı zamanda ülkenin dijital egemenliği, rekabet gücü ve yenilik kapasitesi açısından stratejik bir adımdır. Bu adımın sağlıklı şekilde ilerleyebilmesi, mühendislik tasarım süreçlerinin simülasyondan donanıma kadar tüm aşamalarda bilimsel doğrulukla yürütülmesine bağlıdır.

MATLAB 5G Toolbox, HDL Coder, SoC Blockset ve FPGA ekosisteminin beraber sunduğu uçtan uca geliştirme zinciri, Türkiye’nin 5G altyapısını:

  • daha güvenilir,
  • daha hızlı geliştirilebilir,
  • daha düşük maliyetli,
  • daha yüksek doğruluklu,
  • daha rekabetçi

hale getirecektir.

Bu bütünleşik yaklaşım, ülkenin yalnızca 5G teknolojisini kullanan değil, aynı zamanda bu teknolojiyi geliştiren, üreten ve ihraç eden bir aktör olmasını mümkün kılar. Özellikle 6G ve ISAC gibi bir sonraki nesil teknolojilere giden yolda Türkiye için bu mühendislik altyapısı vazgeçilmezdir.

MATLAB ile Kestirimci Bakım: İşletme Maliyetlerini Düşürün

Endüstriyel ekipmanların plansız arızalar sebebi ile duraklaması ciddi üretim kayıplarına yol açmaktadır. Kestirimci bakım (predictive maintenance), sensör verileri ve matematiksel modeller kullanarak bir makinenin ne zaman arıza vereceğini öngörmeye çalışır. Doğru uygulandığında bu yaklaşım, gereksiz bakım işlemlerini azaltır, üretim verimliliğini artırır ve işletme maliyetlerini düşürür. Fiziksel modeller ve makine öğrenimi algoritmaları ile birlikte bu süreç, Predictive Maintenance Toolbox ile hızlandırılabilir. Toolbox, motorlar, dişli kutuları, rulmanlar ve piller gibi uygulamalara yönelik durum izleme ve tahmine dayalı bakım algoritmalarını tasarlamaya yardımcı olur.

Bu yazıda, kestirimci bakım için genel iş akışını özetleyecek ve MATLAB ekosistemindeki toolboxları kullanarak uygulanabilir bir senaryo sunacağız. Senaryoda bir pompanın sensör verileri ile oluşturulan dijital ikizden (digital twin) ve rulman arızası örneğinden yararlanacağız. Anlatılan adımlar, gerçek MathWorks örneklerine dayanmaktadır. Aynı yaklaşımları projelerinizde uygulayabilirsiniz.

Predictive Maintenance Toolbox ile Neler Yapabilirsiniz?

MathWorks’ün Predictive Maintenance Toolbox’ı, durum izleme ve kestirimci bakım algoritmalarını tasarlamak için kapsamlı yetenekler sağlar. Toolbox;

  • Koşul göstergeleri ve anomali tespiti tasarlamaya yardımcı olur. Diğer pek çok uygulama gibi rulman, motor ve batarya izleme için özel örnekler sunar. Teşhissel özellik tasarımı (Diagnostic Feature Designer) uygulaması ile zaman, frekans ve zaman-frekans alanlarındaki özellikleri interaktif olarak çıkartıp sıralamanızı sağlar. Kullanıcılar özellikleri görselleştirebilir, nominal ve arızalı veriler arasında en ayırt edici olanları belirleyebilir ve bu özellikleri daha sonra makine öğrenmesi modellerine aktarabilir.
  • Arıza tespiti ve teşhisi için istatistiksel, makine öğrenmesi ve derin öğrenme modellerini eğitmeyi destekler. Koşul göstergeleri kullanılarak sağlıklı ve arızalı durumları ayırt eden karar modelleri geliştirilebilir. Derin öğrenme kullanarak rulman arızalarının teşhisi gibi sorunlar için scalogram (süreç içerisinde sinyalin sürekli dalgacık dönüşümü sonucu oluşan zaman‑frekans temsili) üzerinden transfer öğrenimi yapılabilir.
  • Kalan kullanım ömrü (RUL) tahmini için özel modeller içerir. RUL, bir sistemin tamir ya da değişim gerektirmeden önceki beklenen kullanım süresidir. Toolbox hem trend‑tabanlı degradasyon modelleri (lineer veya üssel) hem de benzerlik tabanlı ve gözetimli hayatta kalma modelleri gibi yaklaşımları barındırır. Bu modeller, zaman içinde değişen koşul göstergelerinin istatistiksel özelliklerini kullanarak bir test makinesinin kalan ömrünü olasılıksal olarak tahmin eder.
  • Veri yönetimi, simülasyon ve dağıtım olanakları sunar. Ölçülen verileri yerel dosyalardan veya bulut depolarından içe aktarabilir, Simulink/Simscape modelleri ile arıza verisi üretebilir ve algoritmaları C/C++ koduna çevirerek uç cihazlara dağıtabilirsiniz.

Predictive Maintenance Toolbox İş Akışı

Aşağıdaki adımlar Predictive Maintenance Toolbox’ın sunduğu yetenekler kullanılarak gerçekleştirilen bir kestirimci bakım iş akışını özetler.

Veri Toplama ve Organize Etme

Bakım algoritmalarının temelini sensör verisi oluşturur. Vibrasyon, sıcaklık, basınç, akım veya voltaj sensörlerinden elde edilen ölçümler; yerel dosyalarda, veri tabanlarında veya bulut ortamlarında toplanır. Toolbox, bu verileri ensemble formatında organize etmeyi kolaylaştırır ve Simulink/Simscape modelleri ile simülasyon yoluyla arıza verisi üretebilmenizi sağlar. Böylece gerçek arıza verisi az olduğunda dijital ikiz kullanarak eğitim verisi oluşturabilirsiniz.

Özellik Tasarımı ve Sıralama

Bir makinenin sağlıklı veya arızalı olduğunu belirleyen koşul göstergeleri tanımlanmalıdır. Diagnostic Feature Designer uygulaması; zaman alanı istatistikleri (rms, pik faktörü vb.), frekans alanı ölçümleri (spektral kurtosis, zarf spektrumu), zaman‑frekans temsilleri ve döner makine metriklerini interaktif olarak üretir. Bu özellikleri görselleştirip hangi göstergelerin nominal ve arızalı verileri en iyi ayırdığını görebilir ve denetimli/denetimsiz ya da prognostik sıralama yöntemleri ile en etkili özellikleri seçebilirsiniz.

Arıza Tespiti ve Teşhisi

Seçilen koşul göstergeleri, makine öğrenmesi modellerini eğitmek için kullanılır. Toolbox, destek vektör makineleri (SVM), karışık ağaçlar, k‑en yakın komşu (kNN), rastgele ormanlar ve derin sinir ağları gibi pek çok algoritma sağlar. Örneğin derin öğrenme ile rulman arızalarının teşhisi için titreşim sinyalleri scalogram’lara dönüştürülerek transfer öğrenimi uygulanabilir; bu yöntem küçük veri kümelerinde bile yüksek doğruluk sunar. Arıza tespiti işlemi iteratiftir; farklı özellik ve model kombinasyonları denenerek en iyi sonuç veren yapı seçilir.

Kalan Ömür Tahmini (RUL)

Arıza tespitinden sonra, makinenin ne kadar daha çalışabileceğini tahmin etmek gerekir. RUL, koşul göstergelerinin zaman içindeki eğilimine dayalı olarak istatistiksel bir dağılım şeklinde hesaplanır. Predictive Maintenance Toolbox; üssel veya lineer degradasyon modelleri, benzerlik tabanlı modeller ve hayatta kalma modelleri gibi çeşitli yöntemleri destekler. Benzerlik tabanlı bir RUL tahmininde, run‑to‑failure verileri içeren bir ensemble kümesi hazırlanır, trendlenebilir özellikler seçilir, sensör birleşimi ile bir sağlık göstergesi oluşturulur ve eğitim verisi ile benzerlik ölçümleri kullanılarak tahminci eğitilir.

Uygulama ve Dağıtım

Algoritmalar eğitildikten sonra, kod üretimi ile uç cihazlara veya bulut sistemlerine dağıtılabilir. Simscape tabanlı dijital ikizler, geliştirilen algoritmanın farklı arıza senaryolarında nasıl çalıştığını test etmek için kullanılır. MATLAB Coder ve Simulink Coder, modelleri C/C++ koduna çevirerek PLC’lere, mikrodenetleyicilere veya IoT ağ geçitlerine gömülebilir.

Pompa İstasyonunda Kestirimci Bakım

Bir kimya tesisinde dört kademeli santrifüj pompalar prosesi beslemektedir. Geçmişte pompa arızaları, üretimi durdurmuş ve yüksek maliyetlere yol açmıştır. Bu nedenle, bir kestirimci bakım sistemi kurarak pompaların durumunu izlemek ve arızaları önceden tespit etmek istiyoruz. Senaryoda Predictive Maintenance Toolbox, Simscape ve çeşitli MATLAB toolbox’ları birlikte kullanılacak.

Dijital İkiz ile Eğitim Verisi Oluşturma

Gerçek arıza verisi sınırlı olduğundan, Simscape tabanlı bir triplex pompa modeli kullanıyoruz. MathWorks’ün File Exchange’te sunduğu Predictive Maintenance in a Hydraulic Pump örneği, Simscape ile modellenen bir triplex pompa ve bu pompanın çıkış basıncını izleyerek hangi bileşenin arızalandığını tespit eden bir algoritma içerir. Model;

  • Sızdırmazlık kaçakları, tıkanmış girişler, rulman aşınması ve kırık motor sargıları gibi bozulmaları ayrı ayrı simüle edebilir.
  • Simülasyon sonuçlarını tekrar kullanarak eğitim süresini kısaltmaya yönelik kod örnekleri sağlar.
  • Gerçek sensör verileri ile birleştirilebilir; böylece gerçek dünyaya uygun bir eğitim seti elde edilir.

Simulink modelini kullanarak her arıza durumunda pompanın çıkış basıncı, vibrasyon ve akım sinyalleri oluşturulur. Bu veriler ensemble formatında düzenlenir ve her koşul için etiketlenir. Daha sonra veriler Diagnostic Feature Designer uygulamasına aktarılır.

Özellik Çıkarma ve Model Eğitimi

Pompa verileri üzerinde; ortalama, RMS, spektral kurtosis, zarf spektrumu ve harmonik bileşenler gibi özellikler çıkarılır. Diagnostic Feature Designer’ın denetimli sıralama modunu kullanarak arıza durumlarını en iyi ayırt eden özellikler seçilir. Seçilen özellikler bir tabloya aktarılır ve şu adımlar uygulanır:

  1. Arıza sınıflandırma: Seçilen özellikler ile bir makine öğrenmesi sınıflandırıcısı (örneğin, rastgele orman veya SVM) eğitilir. Veri seti, her bir arıza türü için eğitim ve test kümelerine ayrılır. K‑katlı çapraz doğrulama ile modelin doğruluk ve F1 skorları değerlendirilir.
  2. Gerçek zamanlı izleme: Eğitilen model, gerçek pompa verileri üzerinde çalıştırılır. Model çıkışı “sağlıklı”, “rulman aşınması” gibi sınıflar döndürür ve işletme sistemi operatörleri anında bilgilendirilir.
  3. RUL tahmini: Sızdırmazlık kaçakları ve rulman aşınması için koşul göstergelerinin zaman içindeki eğilimi izlenir. Üssel degradasyon modeli ve benzerlik tabanlı model gibi RUL tahmincileri eğitilir. Örneğin, rulman aşınması göstergesi her simülasyonun sonuna kadar kaydedilir; “trendability” ve “prognosability” metrikleri hesaplanarak en güvenilir gösterge seçilir ve fit ile degradasyon modeli parametreleri tahmin edilir. Ardından predictRUL fonksiyonu, her pompa için kalan ömür dağılımını verir.

Deneme Yapabileceğiniz Hazır Örnekler

Kullanıma hazır bazı örnekler aşağıdadır.

Derin Öğrenme ile Rulman Arızası Tanıma

Pompalar haricinde, döner makinelerde en sık görülen arızalardan biri rulman hasarıdır. MathWorks’ün Rolling Element Bearing Fault Diagnosis Using Deep Learning örneği, Wavelet Toolbox, Predictive Maintenance Toolbox ve Deep Learning Toolbox’ı bir araya getirerek 1‑boyutlu titreşim sinyallerini 2‑boyutlu scalogram görüntülerine dönüştürür ve önceden eğitilmiş bir evrişimli sinir ağı ile arıza sınıflandırması yapar. Bu yöntem, geleneksel yaklaşımlarda gereken manuel özellik çıkarımı süresini azaltır ve küçük veri kümelerinde bile yüksek doğruluk sağlar.

Örnekte kullanılan Machinery Failure Prevention Technology (MFPT) verisi, farklı yük ve hız koşullarında sağlıklı, dış bilezik hatalı ve iç bilezik hatalı rulmanlardan oluşan 20 veri seti içerir. Titreşim sinyalleri sürekli dalgacık dönüşümü (CWT) ile zaman‑frekans düzleminde temsil edilerek scalogram’lar elde edilir ve bu görüntüler transfer öğrenimi için bir resim sınıflandırma ağının girişine beslenir. Uygulama adımları şunlardır:

  1. Veri Hazırlama: MFPT veri seti indirildikten sonra her ölçüm için titreşim sinyali (gs) ve örnekleme hızı (sr) alınır. İç ve dış bilezik hatalarının kritik frekansları hesaplanır.
  2. Scalogram Oluşturma: cwt fonksiyonu veya plotBearingSignalAndScalogram yardımcı fonksiyonu kullanılarak titreşim sinyali scalogram’a dönüştürülür. Scalogram’ın iki boyutu zaman ve frekansı temsil eder.
  3. Model Eğitimi: Hazır bir derin sinir ağı (örneğin SqueezeNet) yüklenir, son katmanları MFPT verisindeki sınıf sayısına göre yeniden yapılandırılır ve ağırlıkları dondurarak transfer öğrenimi yapılır. Eğitim sırasında augmentedImageDatastore kullanılarak veri artırımı yapılabilir.
  4. Test ve Değerlendirme: Ayrılmış test verileri ile model doğruluğu hesaplanır. Confusion matrix ve ROC eğrileri değerlendirme için kullanılabilir. Eğitim tamamlandığında, kod MATLAB Coder ile gerçek zamanlı uygulamalara gömülebilir.

Bu yöntem, pompa senaryosunda da kullanılabilir: pompa vibrasyon verileri scalogram’lara dönüştürülüp rulman arızaları bir derin ağla sınıflandırılabilir. Transfer öğreniminin sağladığı hız ve doğruluk avantajları, veri kümesinin küçük olduğu durumlarda özellikle önemlidir.

Kalan Ömür Tahmini ve Bakım Planlaması

Arıza türü tespit edildikten sonra, bakım planlaması için kalan ömrün tahmin edilmesi gerekir. RUL tahmini modelleri, koşul göstergelerinin zaman serilerindeki eğilimleri analiz ederek arızanın ne kadar süre sonra gerçekleşeceğine ilişkin olasılık dağılımları üretir. Predictive Maintenance Toolbox; üssel ve lineer degradasyon modelleri, benzerlik tabanlı modeller ve hayatta kalma modelleri gibi seçenekler sunar. Benzerlik tabanlı bir tahmin için tipik adımlar şöyledir:

  1. Veri hazırlığı: Run‑to‑failure (arızaya kadar çalışma) verilerini içeren bir ensemble oluşturulur. PHM 2008 turbofan motoru veri seti gibi açık veri setleri bu amaçla kullanılabilir. Her makine için zaman, çalışma koşulları ve çoklu sensör ölçümleri tablo halinde saklanır.
  2. Çalışma rejimi kümeleme ve normalizasyon: Farklı çalışma koşullarındaki veriler birbiriyle karşılaştırılabilmesi için kümeleme ve normalizasyon yapılır. Bu adım, hız ve yük gibi değişkenlerin etkisini azaltır.
  3. Trendability analizi ve sağlık göstergesi oluşturma: Tek tek özelliklerin eğilimleri incelenir, en trendlenebilir ve prognostik özellikler seçilir ve sensör füzyonu ile tek bir sağlık göstergesi elde edilir.
  4. Model eğitimi ve tahmin: Sağlık göstergesi kullanılarak bir benzerlik tabanlı RUL modeli (residualSimilarityModel veya pairwiseSimilarityModel) eğitilir. predictRUL fonksiyonu, her yeni ölçüm geldiğinde kalan ömür tahminini günceller.

RUL tahmini sonucunda, bakım müdahalelerinin ne zaman yapılacağı planlanabilir. Örneğin bir pompanın rulman aşınmasının 200 saat içinde arızaya yol açacağı tahmin ediliyorsa, planlı duruş buna göre ayarlanır. Tahminler belirsizlik içerdiğinden, güven aralıkları veya risk tabanlı karar yöntemleri ile desteklenmelidir.

Sonuç

MATLAB ve Predictive Maintenance Toolbox, kestirimci bakım algoritmaları geliştirmek için uçtan uca bir çözüm sunar. Diagnostic Feature Designer ile özellik çıkarmadan makine öğrenmesine, Simscape ile dijital ikiz oluşturup arıza verisi üretmeye ve RUL tahmini ile bakım planlamasına kadar tüm aşamalar tek bir ortamda gerçekleştirilebilir. Bu yazıdaki pompa senaryosu ve rulman örneği, MathWorks’ün gerçek örneklerinden uyarlanmış olup, pratikte uygulanabilir adımlar içerir. Sensör verisini toplayıp koşul göstergeleri tasarlamak, arıza tespit ve teşhisi için uygun modeller seçmek ve kalan ömrü tahmin etmek, modern endüstriyel tesislerde arıza riskini azaltmak için kritik öneme sahiptir.

Kestirimci bakım projelerine başlarken, mevcut verinin kalitesi ve miktarı ile başlayın. Yeterli arıza verisi yoksa, Simscape tabanlı modeller ve benzetimlerle veri üretin ve makine öğrenmesi algoritmalarınızı bu verilerle eğitin. Küçük veri kümeleri için transfer öğrenimi ve otomatik özellik çıkarımı büyük avantaj sağlar. Son olarak, RUL tahminlerinin belirsizlik içerdiğini ve bakım kararlarının mühendislik yargısı ile desteklenmesi gerektiğini unutmayın. İyi planlanmış bir kestirimci bakım stratejisi, ekipman ömrünü uzatır ve üretim hatlarınızın kesintisiz çalışmasını sağlar.

Derin Öğrenme Modellerini PyTorch, TensorFlow ve MATLAB ile Dönüştürme

Bu yazıda, derin öğrenme modellerinin PyTorch, TensorFlow ve MATLAB platformları arasında nasıl dönüştürülebileceğine ve bu dönüşümün sağladığı avantajlara değineceğiz. Özellikle PyTorch model dönüştürme ve TensorFlow model aktarımı süreçleri, farklı platformlarda çalışan araştırmacılar için kritik öneme sahiptir.

Günümüzdeki akademik çalışmalar, öğrenci projeleri ya da endüstriyel uygulamalarda, sıklıkla birden fazla yazılımın birlikte kullanılması gerekebilmektedir. Bu durum, özellikle farklı uzmanlık alanlarından gelen ekiplerin birlikte çalıştığı, çeşitli donanım altyapılarının söz konusu olduğu projelerde yaygın olarak karşımıza çıkmaktadır. MATLAB’in de yeteneklerine baktığımızda, farklı platformlarla birlikte çalışabilme özelliği dikkat çekmektedir. Mühendislik ve bilimsel uygulama çalışmalarında da bu durum çok yaygındır.

MATLAB, bu ihtiyaca yanıt verebilecek şekilde en popüler yapay zekâ kütüphanelerinden ikisi olan PyTorch ve TensorFlow gibi popüler derin öğrenme platformlarıyla birlikte çalışabilme yeteneğine sahiptir. Bu bağlamda MATLAB derin öğrenme iş akışları, mühendislik ve bilimsel uygulamalarda yaygın olarak tercih edilmektedir. ONNX (Open Neural Network Exchange) formatı sayesinde de farklı modeller farklı platformlar arasında taşınabilir hale gelmektedir. Bu durum geliştirme sürecini hızlandırırken modelin ortamlarda yeniden kullanılmasına da olanak tanımaktadır.

Farklı derin öğrenme platformları arasında model dönüşümü hem esneklik hem de iş birliği açısından geliştiricilere büyük bir kolaylık sunmaktadır.

Bu blog yazımızda, sizlere MATLAB, TensorFlow veya PyTorch fonksiyonlarını kullanarak algoritmalarınızın gidişatına nasıl yön verebileceğinizi göstereceğiz. Böylece derin öğrenme eğitimi veya endüstriyel projelerinizde doğru iş akışını seçebilirsiniz.

  1. Modelleri TensorFlow ve PyTorch’tan MATLAB’a aktarma
  2. Modelleri MATLAB’den TensorFlow ve PyTorch’a aktarma

MATLAB, PyTorch® ve TensorFlow™ arasında derin öğrenme modellerini dönüştürmek için doğru fonksiyonları ve diğer kaynakları gösteren blog yazımızı okumaya başlamadan önce iki kaynağı inceleyebilirsiniz; Derin Öğrenme Araç Kutusu, TensorFlow, PyTorch ve ONNX Arasında Birlikte Çalışabilirlik ve TensorFlow, PyTorch ve ONNX’ten Modelleri İçe Aktarmaya İlişkin İpuçları.

Modelleri MATLAB’e Aktarma

PyTorch veya TensorFlow’dan modelleri sadece bir satır kodla içe aktarabilirsiniz. Bu sayede farklı platformlarda geliştirilmiş ağları doğrudan MATLAB derin öğrenme ortamına taşıyabilir ve üzerinde işlem yapabilirsiniz.

     
Ne?PyTorch modellerini içe aktarın.TensorFlow modellerini içe aktarın.PyTorch ve TensorFlow modellerini etkileşimli olarak içe aktarın.
Nasıl?importNetworkFromPyTorch fonksiyonunu kullanın.importNetworkFromTensorFlow fonksiyonunu kullanın.Deep Network Designer uygulamasını kullanın.
Ne zaman?R2022b’de tanıtıldı.R2023b’de tanıtıldı.İçe aktarma özelliği R2023b’de tanıtıldı.

Hızlıca Bir Örnek Yapalım

Önceden eğitilmiş bir PyTorch görüntü sınıflandırma modelini MATLAB ortamına nasıl aktarabileceğimizi adım adım inceleyelim.

TorchVision kütüphanesinde yer alan MnasNet modeli kullanılacaktır. Bu model, daha önce PyTorch’ta eğitilmiş ve doğruluk gibi performans ölçütleri değerlendirilmiştir.

import torch
from torchvision import models
model = models.mnasnet1_0(pretrained=True)

İlk olarak PyTorch modelini gözlemleyerek dönüştürme sürecine hazırlıyoruz. Bu adım, modelin giriş verisine verdiği yanıtı takip ederek çalışma şeklini kaydetmemizi sağlar. PyTorch modelinin nasıl izleneceği hakkında daha fazla bilgi edinmek için Torch belgelerine gidin: Bir fonksiyonu izleme başlığına göz atabilirsiniz. İzleme işleminin ardından, PyTorch modelini kaydederek MATLAB ortamına aktarmaya hazır hale getiriyoruz.

X = torch.rand(1,3,224,224)
traced_model = torch.jit.trace(model.forward,X)
traced_model.save(“traced_mnasnet1_0.pt”)

Şimdi MATLAB tarafına dönebiliriz ve ONNX formatı üzerinden dışa aktardığımız modeli, importNetworkFromPyTorch fonksiyonunu kullanarak MATLAB ortamına içeri aktarabiliriz. Bu adımda, modelin giriş boyutlarını belirtmek için PyTorchInputSizes ad-değer bağımsız değişkenini belirtmemiz gerekir.

net = importNetworkFromPyTorch(“mnasnet1_0.pt”,PyTorchInputSizes=[NaN,3,224,224]
net =
 
  dlnetwork with properties:
 
                 Layers: [153×1 nnet.cnn.layer.Layer]
    Connections: [162×2 table]
        Learnables: [210×3 table]
                    State: [104×3 table]
     InputNames: {‘InputLayer1’}
 OutputNames: {‘aten__linear12’}
            Initialized: 1
 
  View summary with summary.

Böylece içe aktarma fonksiyonu bir grup görüntü için giriş katmanını otomatik olarak oluşturur ve workspace’mize ekler. Daha sonrasında içeriye aldığımız modeli sınıflandırmak istediğiniz görüntü için kullanmak üzere, girdimizi modelimize uygun formatta düzenleriz ve giriş boyutlarını modelimizin giriş katmanına göre uygun hale getiririz.

Im_og = imread(“peacock.jpg”);
InputSize = [224 224 3];
Im = imresize(Im_og,InputSize(1:2));

MnasNet’in girdileri için daha fazla ön işleme gerekir. Bu sebeple görüntüyü yeniden ölçeklendirmemiz gerekmektedir. Ardından, eğitim görüntülerinin ortalamasını çıkarıp eğitim görüntülerinin standart sapmasına bölerek görüntüyü normalleştiririz. Daha fazla bilgi için Girdi Verisi Ön İşleme bölümünü inceleyebilirsiniz.

Im = rescale(Im,0,1);
 
meanIm = [0.485 0.456 0.406];
stdIm = [0.229 0.224 0.225];
Im = (Im – reshape(meanIm,[1 1 3]))./reshape(stdIm,[1 1 3]);

Görüntüyü bir dlarray nesnesine dönüştürürüz ve “SSCB” (spatial, spatial, channel, batch) boyutlarıyla biçimlendiririz. Böylece MATLAB, görüntüyü derin öğrenme modelinde doğru şekilde işler.

Im_dlarray = dlarray(single(Im),”SSCB”);

Artık görüntüyü sınıflandırıp tahmin edilen etiket değerini bulma aşamasına geldik. Bunun için de aşağıdaki kodu kullanabiliriz.

prob = predict(net,Im_dlarray);
[~,label_ind] = max(prob);

Son olarak görüntüyü ve sınıflandırma sonucunu görselleştirerek sonucu inceleyebiliriz.

imshow(Im_og)
title(strcat(“Classification Result: “,ClassNames(label_ind)),FontSize=16)

TensorFlow da bir modeli içe aktarmak PyTorch’tan bir modeli içe aktarmaya oldukça benzerdir. Elbette bunun yerine importNetworkFromTensorFlow fonksiyonunu kullanmamız gerekir. Bunun yanında TensorFlow modelinizin de SavedModel biçiminde olması ve Python tarafında aşağıdaki kodu kullanarak kaydedilmesi gerektiğini unutmamalıyız.

model.save(“myModelTF”)

Daha fazla örnek için importNetworkFromPyTorch ve importNetworkFromTensorFlow fonksiyonlarının referans sayfalarına ve Harici Platformlardan Önceden Eğitilmiş Ağlar hakkındaki dokümantasyon sayfasına göz atabilirsiniz.

Neden Modelleri MATLAB’e Aktarmalısınız?

Kısaca söylemek gerekirse, bir modeli MATLAB’e aktardığınızda artık o model bir MATLAB ağı haline gelir. Bu da şu anlama gelir: Aktardığınız ağ ile MATLAB’in yerleşik araçlarını kullanarak aşağıdaki tüm işlemleri gerçekleştirebilirsiniz. Daha fazla bilgi için Deep Learning Toolbox’a göz atabilirsiniz.

 GörevÖrnekDaha Fazla Kaynak
Kolayca transfer öğrenimi gerçekleştirin ve ağı yeniden eğitin.Derin Ağ Tasarımcısı Kullanarak Transfer Öğrenimi için Ağ HazırlamaTransfer Öğrenimi için Derin Sinir Ağını İçe Aktarın
Aktivasyonları görselleştirin, kararları açıklayın ve ağın sağlamlığını doğrulayın (Deep Learning Toolbox Doğrulama Kitaplığı ile).LIME Kullanarak Ağ Tahminlerini AnlayınDerin Sinir Ağlarını Görselleştirme ve Doğrulama
Ağı Simulink’te simüle edin ve daha büyük bir sistem içindeki performansını test edin.Simulink’te Görüntüleri İçe Aktarılan TensorFlow Ağı ile SınıflandırmaSimulink ile Derin Öğrenme
Ağı niceleme, projeksiyon veya budama ile sıkıştırın.Projeksiyon Kullanarak Sinir Ağını SıkıştırmaNiceleme, Projeksiyon ve Budama
Ağ için otomatik olarak C/C++, CUDA ve HDL kodu oluşturun.Derin Öğrenme Ağları için Kod ÜretimiKod Üretimi ve Dağıtımı

Bu avantajlar sayesinde MATLAB, yalnızca model dönüştürme değil, aynı zamanda endüstriyel yapay zekâ uygulamaları için eksiksiz bir geliştirme ortamı sunar.

MATLAB’den Modelleri Dışa Aktarma

Modelleri doğrudan TensorFlow’a aktarabilirsiniz. Bir modeli PyTorch’a aktarmak için önce modeli ONNX model formatına dönüştürmeniz gerekir.

 
Ne?Modelleri TensorFlow’a aktarın.Modelleri PyTorch’a aktarın.
Nasıl?exportNetworkToTensorFlow işlevini kullanın.exportONNXNetwork işlevini kullanarak ONNX üzerinden dışa aktarın.
Ne zaman?R2022b’de tanıtıldı.ONNX dışa aktarımı R2018a’da tanıtıldı.

Hızlıca Bir Örnek Yapalım

Şimdi, imagePretrainedNetwork kullanarak önceden eğitilmiş SqueezeNet evrişimsel ağını MATLAB ortamına yükleyelim. R2024a versiyonunda tanıtılan bu fonksiyon, önceden eğitilmiş görüntü sınıflandırma ağlarını yüklemenin en kolay ve önerilen yoludur.

[net,ClassNames] = imagePretrainedNetwork(“squeezenet”);

Ağı TensorFlow’a direkt olarak aktarabiliriz. exportNetworkToTensorFlow fonksiyonu, TensorFlow modelini Python paketi myModel’e kaydeder.

exportNetworkToTensorFlow(net,”myModel”)

Böylelikle dışa aktarma işlemini tamamlarız.

Python’da modeli test etmek istediğimizde, MATLAB’de bulunan bir görüntüyü kullanabiliriz. Sınıflandırmak istediğimiz görüntüyü okur ve ağın giriş boyutuna göre yeniden boyutlandırırız.

Im = imread(“peacock.jpg”);
InputSize = net.Layers(1).InputSize;
Im = imresize(Im,InputSize(1:2));

2 boyutlu görüntü verilerini, MATLAB sıralamasından (HWCN) TensorFlow sıralamasına (NHWC) geçiririz; burada H, W ve C sırasıyla görüntünün yüksekliği, genişliği ve kanal sayısıdır ve N görüntü sayısıdır. Daha fazla bilgi için Girdi Boyutu Sıralaması bölümünü inceleyebilirsiniz. Son olarak, görüntüyü bir MAT dosyasına kaydederiz.

ImTF = permute(Im,[4,1,2,3]);
filename = “peacock.mat”;
save(filename,”ImTF”)

Aşağıdaki kod, dışa aktarılan modeli Python’da tahmin etmek için nasıl kullanabileceğinizi ve SavedModel biçiminde nasıl kaydedeceğinizi gösterir. İlk olarak, myModel paketinden dışa aktarılan TensorFlow modelini yüklüyoruz.

import myModel
model = myModel.load_model()

Dışa aktarılan modeli TensorFlow SavedModel formatında kaydedebilirsiniz. Modeli SavedModel formatında kaydetmek isteğe bağlıdır. Derin öğrenme iş akışlarını doğrudan modelle gerçekleştirebilirsiniz.

model.save(“myModelTF”)

Daha sonrasında da görüntüyü, dışa aktarılan model ile sınıflandırırız.

import scipy.io as sio
x = sio.loadmat(“peacock.mat”)
x = x[“ImTF”]
 
import numpy as np
x_np = np.asarray(x, dtype=np.float32)
 
scores = model.predict(x_np)

Derin sinir ağlarını TensorFlow’a dışa aktarma hakkında daha fazla bilgi için bu blog gönderisini inceleyebilirsiniz. Daha fazla örnek için exportNetworkToTensorFlow ve exportONNXNetwork referans sayfalarına ve Derin Sinir Ağlarını Dışa Aktarma ile ilgili belgeler sayfasına göz atın.

MATLAB ve Simulink’te Python Tabanlı Modelleri Birlikte Yürütme

Model performansını ve sistem entegrasyonunu test etmek için Python tabanlı yapay zekâ modellerini doğrudan MATLAB iş akışımızda veya Simulink sistemimizde kullanabiliriz.

Karşılaştırma: Birlikte Yürütme (Co-Execution) & Model Dönüştürme (Model Conversion)

Tabii daha öncesinde birlikte yürütme ve model dönüştürme konularına geçmeden önce bunların ne olduğunu kısaca özetleme ihtiyacı hissediyorum.

Python’da yazılmış yapay zekâ modelini olduğu gibi, dönüştürmeden MATLAB veya Simulink içinde doğrudan çalıştırmak istiyorsak buna Co-Execution denir. Bu yol haritasında modelimizi hızlıca test edip kullanabiliriz. Fakat Python modelini MATLAB formatına çevirip, MATLAB’in kendi araçlarıyla kullanmak istiyorsak buna Model Conversion denir. Bu sayede daha hızlı çalışma ve MATLAB içi işlemler kolaylaşır.

Yani Co-Execution hızlı ve pratik; Model Conversion ise daha uyumlu ve performanslıdır.

İlk olarak, MATLAB ortamında bir PyTorch veya TensorFlow modelini birlikte yürütmeyi, harici platform modelini bir MATLAB ağına dönüştürmekle karşılaştıralım. Böylece hangi iş akışının algoritmamıza en uygun olduğu kararına varabiliriz.

 Birlikte Yürütme (Co-Execution)Model Dönüştürme (Model Conversion)
  Her PyTorch ve TensorFlow modeli için çalışır  EvetHayır
  Simulink’te model simülasyonu  EvetEvet
  Otomatik olarak kod üretme  HayırEvet
  Açıklanabilirlik tekniklerini uygulayın  Yalnızca nesne algılama içinEvet
  Sağlamlık ve güvenilirliği doğrulayın  HayırEvet
  Düşük kodlu (Low-Code) yapay zekâ uygulamalarını kullanın  HayırEvet
  Ağı sıkıştır  HayırEvet

Blog yazımızın sonuna yaklaşırken, sizler için faydalı olabileceğini düşündüğümüz bazı kaynakları paylaşmak istiyoruz. Daha önce yayınladığımız MATLAB ve Python Birlikte Nasıl Kullanılır? başlıklı blog yazımızı inceleyebilir ve ayrıca Python’da görüntü işleme için sıkça tercih edilen OpenCV kütüphanesinin MATLAB Script’inde nasıl çalıştırılacağını anlattığım videoyu izleyebilirsiniz.

MATLAB ile Uydu Yakın Geçiş (Conjunction) Tespiti: Teorik ve Uygulamalı Bir Yaklaşım

Giriş

Düşük Dünya Yörüngesi (LEO) ve diğer yörünge katmanlarında, uyduların çarpışma riski gün geçtikçe artmaktadır. Özellikle CubeSat’ler, mega-konstelasyonlar ve yörünge enkazları arasındaki yoğunluk, görev planlaması ve yörünge yönetimi açısından yeni güvenlik sorunlarını beraberinde getirmektedir. Bu bağlamda, iki uydu arasındaki yakın geçişlerin (satellite conjunctions) doğru biçimde tespiti ve analizi, hem ticari hem de bilimsel misyonların sürdürülebilirliği için kritik öneme sahiptir.

Bu yazıda, MATLAB’in sunduğu satelliteScenario nesnesi üzerinden, halka açık TLE (Two-Line Element) verilerini kullanarak uydu yakın geçişlerinin nasıl tespit edilebileceği sistematik şekilde açıklanacaktır. Ayrıca, bu yaklaşımın doğruluğu, CelesTrak tarafından sağlanan SOCRATES (Satellite Orbital Conjunction Reports Assessing Threatening Encounters in Space) aracı ile karşılaştırılarak değerlendirilecektir.

Not: TLE verilerine dayalı conjunction analizi yalnızca eğitim ve araştırma amaçlıdır. Operasyonel görevlerde 18th Space Defense Squadron veya ulusal uzay ajanslarıyla irtibata geçilmelidir.

SOCRATES ile Yakın Geçiş Senaryosu Seçimi

SOCRATES, TLE verilerine dayalı olarak hesaplanmış potansiyel çarpışma olaylarını sunar. Her bir kayıt aşağıdaki bilgileri içerir:

  • Uydu adları
  • NORAD katalog numaraları
  • En yakın yaklaşım zamanı (TCA)
  • Tahmini çarpışma olasılığı
  • Minimum mesafe (range)
  • Göreceli hız

Örnek olarak alınan TLE verileri:

STARLINK-1079

1 44937U 20001Z   22272.52136386 -.00000745  00000+0 -31120-4 0  9997

2 44937  53.0548 210.2777 0001443  83.0631 277.0522 15.06393387150649

CZ-2D DEB

1 43406U 12073D   22272.74034628  .00008296  00000+0  83006-3 0  9993

2 43406  97.9471 196.5364 0090895 225.9886 133.3815 14.88613293478469

TLE Verisinin Satellite Scenario Nesnesine Yüklenmesi

Fonksiyon: satelliteScenario, satellite, satelliteScenarioViewer

Bu fonksiyonlar birlikte çalışarak, TLE’yi kullanarak uyduların yörüngesini oluşturur ve 3B ortamda izlememizi sağlar.

sc = satelliteScenario;                       % Simülasyon ortamını oluşturur

satellites = satellite(sc, “dosya.txt”);      % TLE’den uydu nesnelerini oluşturur

v = satelliteScenarioViewer(sc);              % Görselleştirme penceresi açar

v.PlaybackSpeedMultiplier = 150;           % Simülasyon hızını ayarlar

Bu adımda, SGP4 yörünge propagasyon modeli ile uyduların hareketi canlandırılır ve 3B görselleştirme için hazır hale getirilir.

Simülasyon Parametrelerinin Ayarlanması

Fonksiyon: StopTime, SampleTime

Bu parametreler senaryonun ne kadar süreyle ve ne sıklıkta çalışacağını belirler.

Yakın geçiş analizlerinde tipik olarak 7 günlük bir zaman penceresi kullanılır. Örnekleme aralığı olarak 20 saniye LEO için uygundur:

sc.StopTime = sc.StartTime + days(7); % 7 günlük simülasyon

sc.SampleTime = 20;                   % 20 saniyelik örnekleme aralığı

LEO (Low Earth Orbit) uydular hızlı hareket ettiği için, yüksek zaman çözünürlüğü gerekir. 20 saniyelik örnekleme, hem doğruluk hem de işlem maliyeti açısından idealdir.


Uydu Ayrım Mesafesinin Hesaplanması

Fonksiyon: aer

Azimut, elevasyon ve mesafe bilgisi verir. Burada sadece mesafe (range) kullanılır.

[~, ~, range, tOut] = aer(satellites(1), satellites(2));

plot(tOut, range);

xlabel(“Zaman”); ylabel(“Mesafe (m)”);

title(“Zamana Göre Uydu Ayrımı”);

Yakın Geçiş Pencerelerinin Belirlenmesi

MATLAB işlemleri: find, diff

Belirli bir mesafenin altındaki noktaları buluruz (örneğin 200 km).

200 km altında kalan zaman dilimleri aşağıdaki şekilde filtrelenebilir:

dMinTarget = 200e3;

kCloseIdx = find(range < dMinTarget);   % Eşik altı noktalar

dW = [0 diff(kCloseIdx)];               % Aralarındaki fark

Burada, zaman aralığında sürekli alt eşik altında kalan bölgeler tespit edilerek birden fazla pencere yakalanır.

Minimum Mesafenin Sayısal Olarak Belirlenmesi

Fonksiyon: fzero, özel gradientScenario fonksiyonu

Bu yöntem, yakın geçişin tam zamanını sayısal olarak çözer.

fzero: Bir fonksiyonun kökünü (yani minimum noktayı) bulur.
gradientScenario: İki uydu arasındaki mesafenin türevini hesaplar.

tMin(k) = fzero(@(t) gradientScenario(t, sat1, sat2, tStart), [tStart, tEnd]);

Bu yöntem, yakın geçişin tam zamanını ve minimum mesafesini milimetre hassasiyetine kadar bulmamıza olanak tanır.

TCA ve Minimum Mesafe Raporlaması

Fonksiyon: min, disp

[rMin, iMin] = min(dRs);

tCA = sc.StartTime + tMin(iMin);

disp(tCA);

disp(rMin);

Örnek çıktı:

03-Ekim-2022 08:06:49

17.1728 metre

TCA Anında Göreceli Hızın Hesaplanması

Fonksiyon: states, vecnorm

Verilen anda her iki uydunun hız vektörlerini alır, farklarını norm alarak göreceli hızı hesaplar.

[~, vel] = states(satellites, tCA);

dV = vecnorm(vel(:,:,1) – vel(:,:,2)); % TCA anındaki hızlar

disp(dV);

Örnek çıktı:

5861.3 m/s

Göreceli hız, çarpışma etkisinin şiddeti ve manevra gereksinimi açısından kritik bir parametredir.

Görselleştirme

figure;

stem(sc.StartTime + tMin, dRs*1e-3);

hold on;

stem(sc.StartTime + tMin(iMin), rMin*1e-3, ‘r’, ‘filled’);

ylabel(‘Ayrım Mesafesi (km)’);

title(‘Yakın Geçiş Tespiti Özeti’);

grid on;

Bu görsel, tüm potansiyel geçişleri ve en yakın geçişi vurgulayan özet bir gösterim sağlar.

TCA Etrafında Senaryo Tekrarı

sc.StartTime = tCA – minutes(5);

sc.StopTime = tCA + minutes(5);

v.PlaybackSpeedMultiplier = 50;

play(sc);

Bu adım, yüksek zaman çözünürlüğünde görsel inceleme imkânı sunar.

Sonuç

Bu teknik çalışma, MATLAB’in satelliteScenario nesnesi ve SGP4 tabanlı TLE propagasyonu ile uydu conjunction olaylarının nasıl tespit edilebileceğini adım adım göstermektedir. İki aşamalı yaklaşım aşağıdaki gibidir:

  1. Ön filtreleme: Sabit eşik mesafesi ile olası yakın geçiş pencerelerinin belirlenmesi
  2. Hassas tespit: Minimum mesafenin türev tabanlı yöntemle optimize edilerek çıkarılması

Uygulama Alanları

  • Uzay trafik yönetimi simülasyonları
  • Akademik araştırma ve yayınlar
  • Uzay durumsal farkındalık (SSA) eğitimleri
  • Öğrenci ve mühendislik projeleri

Gelişmiş Uygulama Önerisi: Bu çalışmayı genişleterek, CubeSat’ler, uzay enkazı kümeleri veya manevra içeren kaçınma algoritmalarını da modelleyebilirsiniz.


Kaynaklar

[1] NASA Spacecraft Conjunction Assessment and Collision Avoidance Best Practices Handbook, NASA/SP-20205011318
[2] CelesTrak SOCRATES Tool: https://celestrak.org/SOCRATES/

[3] Satellite Conjunction Finder

MATLAB Ortamında ChatGPT API Entegrasyonu: Uygulamaya Geçiş Adımları

Bu yazımızda, OpenAI’ nın ChatGPT API’siyle MATLAB ortamında nasıl etkileşim kurabileceğinizi ve doğal dilde verdiğiniz komutlardan nasıl MATLAB kodu üretebileceğinizi ele alacağız. Özellikle, aşağıdaki kod örneğini kullanarak API’ye nasıl POST isteği gönderip yanıt alacağınızı, yanıtı nasıl işleyeceğinizi ve MATLAB üzerinde nasıl uygulayabileceğinizi açıklayacağız.

Kod Parçacığının Genel Yapısı

Aşağıda, ChatGPT API’sine yapılan istek ve yanıtı işleyen MATLAB kodu yer almaktadır:

% Define the prompt
prompt = “Verilerimi tree modeli kullanarak eğitmek istiyorum, MATLAB’de yazar mısın?”;
  
% Define the API endpoint
api_endpoint = ‘https://api.openai.com/v1/chat/completions’;
 
% Define the API key from https://platform.openai.com/account/api-keys
api_key = “Your API Key”;
 
% Define the headers
headers = [“Content-Type”, “application/json”; “Authorization”, “Bearer ” + api_key];

% Define the data
message = containers.Map({‘role’, ‘content’}, {‘user’, prompt});
data = containers.Map({‘model’, ‘messages’}, {‘gpt-3.5-turbo’, {message}});
 
% Convert the data to JSON
data = jsonencode(data);
 
% Send the POST request
options = weboptions(‘RequestMethod’, ‘post’, ‘HeaderFields’, headers);
response = webwrite(api_endpoint, data, options);
 
% Return the response
response = response.choices.message.content;
disp(prompt)
disp(response)

Bu kod parçası, OpenAI’ nın ChatGPT modeline doğal dilde bir istek göndererek MATLAB üzerinden kod üretilmesini sağlamaktadır. Şimdi adım adım bu kodun nasıl çalıştığını ve ne işe yaradığını inceleyelim.

İstek Metninin Belirlenmesi

prompt = “Verilerimi tree modeli kullanarak eğitmek istiyorum, MATLAB’de yazar mısın?”;
  • Açıklama:
    Bu satırda, ChatGPT’ye göndermek istediğiniz komut metnini belirliyorsunuz. Kullanıcının, verilerini “tree modeli” kullanarak eğitmek istediğini belirttiği doğal dil ifadesi burada yer alıyor. Bu ifade, API’ye gönderildiğinde modelin MATLAB kodu üretmesi için temel girdiyi oluşturur.

API Endpoint ve API Anahtarının Tanımlanması

api_endpoint = ‘https://api.openai.com/v1/chat/completions’;
api_key = “sk-proj-…”;  % API anahtarınız burada yer alır
  • Açıklama:
    • api_endpoint değişkeni, ChatGPT API’sinin isteklerin gönderileceği URL’sini belirtir.
    • api_key değişkeninde ise OpenAI hesabınızdan aldığınız API anahtarı yer alır. Bu anahtar, API isteklerinde kimlik doğrulaması için kullanılır.
      Önemli Not: API anahtarınızı güvenlik açısından herkese açık alanlarda paylaşmamaya özen gösterin.

HTTP Başlıklarının (Headers) Ayarlanması

headers = [“Content-Type”, “application/json”; “Authorization”, “Bearer ” + api_key];

Açıklama:
Bu satırda, HTTP isteği için gerekli olan başlıkları tanımlıyorsunuz. MATLAB’da weboptions fonksiyonu kullanılırken HeaderFields parametresi iki sütunlu (Mx2) bir cell array olmalıdır.
Content-Type: JSON formatında veri gönderileceğini belirtir.
Authorization: API anahtarınızı “Bearer” formatında göndererek kimlik doğrulaması yapar.
Önemli olan nokta, iki farklı başlık çiftinin her biri ayrı bir satırda tanımlanmasıdır. Bu şekilde MATLAB, header bilgilerini doğru biçimde alır ve istek sırasında hata vermeden çalışır.

Gönderilecek Verilerin Tanımlanması

message = containers.Map({‘role’, ‘content’}, {‘user’, prompt});
data = containers.Map({‘model’, ‘messages’}, {‘gpt-3.5-turbo’, {message}});
  • Açıklama:
    • message adındaki değişken, ChatGPT’ye gönderilecek mesajın içeriğini belirler. Bu mesajda iki anahtar bulunur:
      • role: Mesajı gönderenin rolü (bu örnekte “user” olarak belirtilmiştir).
      • content: Kullanıcının doğal dilde verdiği komut (burada prompt değişkeni).
    • data değişkeni ise, API’ye gönderilecek genel isteğin yapılandırılmasını sağlar. Bu yapı içerisinde:
      • model: Kullanmak istediğiniz model ismi (örnekte “gpt-3.5-turbo”).
      • messages: Gönderilecek mesajları içeren liste. Burada tek bir mesaj bulunmakta, fakat liste yapısı sayesinde birden fazla mesaj da gönderilebilir.

Verinin JSON Formatına Dönüştürülmesi

data = jsonencode(data);
  • Açıklama:
    API istekleri JSON formatında veri kabul ettiğinden, oluşturduğunuz data yapısını JSON formatına dönüştürmeniz gerekmektedir. MATLAB’ın jsonencode fonksiyonu bu işlemi gerçekleştirir ve verinizi uygun formata çevirir.

POST İsteğinin Gönderilmesi

options = weboptions(‘RequestMethod’, ‘post’, ‘HeaderFields’, headers);
response = webwrite(api_endpoint, data, options);
  • Açıklama:
    • weboptions fonksiyonu ile HTTP istek ayarlarını yapılandırıyorsunuz. Burada isteğin gönderim metodunu post olarak belirtiyor ve yukarıda tanımlanan header bilgilerini ekliyorsunuz.
    • webwrite fonksiyonu ise, belirlenen API endpoint’ine JSON formatındaki veriyi gönderir. Bu fonksiyon, API’den dönen yanıtı response değişkeninde saklar. Böylece, MATLAB üzerinden API’ye başarılı bir POST isteği yapılmış olur.

Gelen Yanıtın İşlenmesi ve Gösterilmesi

response = response.choices.message.content;
disp(prompt)
disp(response)
  • Açıklama:
    • API’den gelen yanıt genellikle bir yapı (struct) formatındadır. Bu yapı içerisindeki choices alanı, modelin ürettiği mesajları içerir. Burada, yanıtın içeriğine erişmek için response.choices.message.content ifadesi kullanılır.
    • Son olarak, disp komutu kullanılarak orijinal komutunuz ve API’den dönen yanıt ekrana yazdırılır. Bu sayede, modelin ürettiği MATLAB kodunu ve mesajı görebilirsiniz.

Uygulamada Dikkat Edilmesi Gerekenler

API Anahtarının Güvenliği

API anahtarınız, tüm API isteklerinde kimlik doğrulaması sağlamak için kullanılır. Bu nedenle, kodunuzu paylaşırken veya GitHub gibi platformlarda depolarken anahtarınızı gizli tutmaya özen gösterin. Çevresel değişkenler veya ayrı yapılandırma dosyaları kullanarak API anahtarınızı saklayabilirsiniz.

Başlık Bilgilerinin Doğru Formatlanması

MATLAB’da HTTP başlıklarını belirtirken, HeaderFields parametresinin Mx2 formatında olmasına dikkat edin. Aksi halde, “Expected HeaderFields to be of size Mx2, but it is of size 1×4.” gibi hata mesajları alabilirsiniz. Yukarıdaki örnekte, iki satırlı bir header array kullanarak bu sorun çözüme kavuşturulmuştur.

JSON Formatına Dönüştürme İşlemi

API’ye gönderilen verinin JSON formatında olması gerektiği için jsonencode fonksiyonu kritik bir rol oynar. Bu adımı atlamamanız, API’nin verinizi doğru şekilde işlemesi açısından önemlidir.

Hata Yönetimi

API istekleri sırasında zaman zaman hata mesajlarıyla karşılaşabilirsiniz. Bu durumda, dönen yanıtı detaylı inceleyerek hatanın nedenini belirleyip gerekli düzeltmeleri yapmanız gerekmektedir. Örneğin, ağ bağlantısı sorunları veya API kullanım limitlerine ulaşıldığında hata mesajları alabilirsiniz. Bu tür durumlarda MATLAB hata ayıklama özelliklerini kullanmak yararlı olacaktır.

Sonuç

MATLAB üzerinden OpenAI’nın ChatGPT API’sine yapılan bağlantı ve istek süreci, yukarıdaki adımlarla oldukça basit ve anlaşılır hale gelmektedir. Bu entegrasyon sayesinde, doğal dilde verilen komutlardan MATLAB kodu üretebilir ve çeşitli uygulama senaryolarında yapay zekadan yararlanabilirsiniz.

  • Veri Analizi: Verileriniz üzerinde farklı analiz işlemleri gerçekleştiren kodları ChatGPT yardımıyla otomatik olarak oluşturabilirsiniz.
  • Fonksiyon Üretimi: Belirli işlevler için MATLAB fonksiyonlarını, doğal dilde verdiğiniz yönergelerle oluşturabilirsiniz.
  • Hata Çözümü: Kodu çalıştırırken karşılaştığınız hataları çözmek için öneriler alabilir ve kodunuzu optimize edebilirsiniz.

Bu yazıda, kodun her adımını ayrıntılı şekilde açıklayarak, MATLAB ve ChatGPT entegrasyonunu nasıl gerçekleştirebileceğinizi gösterdik. Umarız bu bilgiler, kendi projelerinizde yapay zeka destekli kod üretimi yaparken size yol gösterici olur. Her adımda dikkat edilmesi gereken noktalara özen göstererek, projelerinizde güvenli ve etkili bir şekilde ilerleyebilirsiniz.

MATLAB ve Python Birlikte Nasıl Kullanılır?

Bu blog yazısı içerisinde de MATLAB ile Python’un birlikte çalışabilirliği, yetenekleri konusunda bazı önemli ipuçlarından bahsediyor olacağız.

Öğrenciyseniz, akademik çalışmalar yürütüyorsanız veya endüstride çalışıyorsanız muhtemelen birden fazla yazılım ortamında geliştirilen çalışmaları birbiri ile entegre etme gereksinimi hissetmişsinizdir. Bu, özellikle birden fazla ekiple eş zamanlı çalışıldığında ve donanım gereksinimi birden fazla olduğunda karşımıza sıklıkla çıkan durumlardandır. MATLAB’in de yeteneklerine baktığımızda birden fazla platform ile çalışılabilirliği söz konusudur. Mühendislik ve bilimsel uygulama çalışmalarında da bu durum çok yaygındır. Bu konu özelinde de MIT CSIAL’daki araştırmacıların da çıplak gözle algılanamayan renk ve hareket değişikliklerini tespit etmek için MATLAB ve C++’ın güçlü yanlarından faydalandıklarını görebiliyoruz.

Yapay zekâ özelinde geliştirilen projelere baktığımızda sıklıkla karşımıza Python ve MATLAB çalışmaları çıkar. Bu blog yazısında da bu konu üzerinde duracak, MATLAB ile Python’un tek bir arayüz içerisinde nasıl geliştirilebildiğinden bahsedeceğiz. Her iki dilde de harika algoritmalar üzerine çalışan, öğreten ve örnekler paylaşan büyük bir topluluk kitlesi var. Öyleyse neden yazılım dili tercihinden bağımsız olarak tüm bu mükemmel çalışmalardan faydalanmayalım? Örnek olarak vermek gerekirse, hava kalitesi tahmin algoritması ve duyarlılık analizi algoritmasını oluştururken MATLAB ve Python’un birlikte kullanılabilirliğini inceleyebiliriz. Bu iki yazılım dili de Yapay Zekâ (YZ) uygulamaları geliştirilirken birlikte kullanılabilmektedir. Birlikte çalışılabilirlik konusu da bizler için o kadar fazla önemlidir ki MATLAB içerisinde ONNX ve TensorFlow aracılığıyla geliştirilen derin öğrenme ağlarını doğrudan içeriye aktarabilir veya dış ortamlara dağıtabiliriz.


Temeller

Öncelikle sistem gereksinimlerimizi bir kenara bırakalım ve MATLAB ile Python’un kısaca tarihine göz attıktan sonra versiyonlar hakkında biraz bilgi edinelim (eski versiyonları kullananlar olabilir). Temel olarak Python’u kullanabilmek için MATLAB R2014b veya sonrası sürümüne ihtiyacımız olacak. MATLAB ile Python’un çeşitli versiyonları için uyumları söz konusudur. Her geliştirme ile de aralarındaki bağ daha da kuvvetlenmiş olarak karşımıza çıkmaktadır. (Python ve MATLAB’in birlikte çalışabilirlik yeteneklerini en güncel olarak keşfetmek için MATLAB R2025a’ya yükseltmek iyi bir zaman olarak görünüyor!) Sürüm ayrıntılarına da buradan bakabilirsiniz.


Python’u MATLAB’den Çağırma

Başlamadan önce MATLAB’in Python ortamını görebildiğini doğrulayalım. Bunu MATLAB’de pyenv fonksiyonu ile yapabiliriz.

>> pyenv
ans =
      PythonEnvironment with properties:
 
                   Version:          “3.6”
           Executable:          “C:\Python36\WPy-3670\python-3.6.7.amd64\python.EXE”
                    Library:          “C:\Python36\WPy-3670\python-3.6.7.amd64\python36.dll”
                     Home:           “C:\Python36\WPy-3670\python-3.6.7.amd64”
                     Status:          Loaded
  ExecutionMode:          OutOfProcess
             ProcessID:          “20980”
     ProcessName:          “MATLABPyHost”

pyenv fonksiyonu aracılığıyla da değiştirilebilen Python sürümünü ve ortam ayarlarını görüntüleyebiliriz.
Artık Python’a erişebildiğimize göre onu kullanabiliriz! İlk aşamada basit bir örnek olarak matematik kütüphanesini kullanıp sqrt (karekök alma) fonksiyonunu deneyeceğiz.

>>> import math
>>> math.sqrt(42)
6.48074069840786


Aynı Python fonksiyonunu MATLAB’da çağırmak için ise aşağıdaki kodu kullanabiliriz:

>> py.math.sqrt(42)
ans =
    6.480740698407860

Aynı hassasiyeti MATLAB ve Python’da görüntülemek için format long’u kullandık.
Şimdi ise davranışı biraz genelleştirelim. Python modüllerine ve fonksiyonlarına aşağıdaki sözdizimi kullanarak erişiriz.

>> py.module_name.function_name

Kullanıcı tanımlı modüller de aynı şekilde çağırılır. Örneğin hava kalitesi uygulamasındaki weather.py modülü, bir web API’si aracılığıyla belirli bir konum için hava durumu verilerini okuyan fonksiyonu içerir:

>> data = py.weather.get_current_weather(“Boston”,”US”,key)
data =
  Python dict with no properties.
 
{‘coord’: {‘lon’: -71.06, ‘lat’: 42.36}, ‘weather’: [{‘id’: 804, ‘main’: ‘Clouds’, ‘description’: ‘overcast clouds’, ‘icon’: ’04n’}], ‘base’: ‘stations’, ‘main’: {‘temp’: 53.2, ‘feels_like’: 34.9, ‘temp_min’: 51.01, ‘temp_max’: 55, ‘pressure’: 1003, ‘humidity’: 46}, ‘visibility’: 16093, ‘wind’: {‘speed’: 26.4, ‘deg’: 230, ‘gust’: 34.45}, ‘clouds’: {‘all’: 90}, ‘dt’: 1587342601, ‘sys’: {‘type’: 1, ‘id’: 3486, ‘country’: ‘US’, ‘sunrise’: 1587290159, ‘sunset’: 1587339006}, ‘timezone’: -14400, ‘id’: 4930956, ‘name’: ‘Boston’, ‘cod’: 200}

MATLAB’da çıktının bir Python veri tipinde olduğuna dikkat edin! Bunu MATLAB türüne dönüştürebiliriz ancak şimdilik doğrudan bu veri ile çalışmaya devam edelim. Bu şekilde iş akışının devam etmesinin sebebi tek bir arayüzde iki farklı dil ile eş zamanlı çalışabiliyor olmamızdır. Daha fazla özellik çıkarmaya devam edelim.

>> weatherData = py.weather.parse_current_json(data)
data =
  Python dict with no properties.
 
{‘temp’: 39.31, ‘feels_like’: 31.44, ‘temp_min’: 37, ‘temp_max’: 41, ‘pressure’: 1010, ‘humidity’: 80, ‘speed’: 8.05, ‘deg’: 340, ‘city’: ‘Boston’, ‘lat’: 42.36, ‘lon’: -71.06, ‘current_time’: ‘2020-04-18 20:48:00.985146’}

Belirli değerleri görüntülemek için aşağıdaki sözcük yapısına başvururuz:

>> T = weatherData{“temp”}
T = 39.3100

Bu aşamada parantez “()” yerine süslü parantez “{}” kullandığımız duruma dikkat edelim. MATLAB’de, hücre dizileri ve tablolar gibi heterojen veri türlerindeki değişkenlere erişirken genellikle süslü parantez kullanılır. Bu yolu hatırlamanın kolay yolu da normal parantez “()” kullanırken aynı türdeki daha büyük bir veri kümesinin (hücre dizisi veya tablo) alt kümesini elde edebiliyorken süslü parantez “{}” kullandığımızda da sıralanmış diğer orijinal veri türlerine (double, string, char vb.) erişebiliyoruz. Yukarıdaki örnekte de görüldüğü üzere veri içerisinde heterojen bir dağılım vardır. Sıcaklık değerimizin türü de double’dir ve bunu çekmek için süslü parantez kullanırız. Buradaki örnek, Python söz diziminde indekslemeyi gösterir.

Bu aşamadan sonra söz dizimi terimini kavradığımıza göre fonksiyonlardaki çağırmalardaki bir diğer farklılıktan bahsetmek istiyorum. Örneğin varsayalım ki hava durumu verilerinin birimlerini değiştirmek istiyoruz. Python tarafındaki get_forcast fonksiyonu aşağıdaki kodda gösterildiği gibi kullanılır:

>>> forecast = weather.get_forecast(“Boston”,”US”,key,units=”metric”)

MATLAB tarafında ise bu durum pyargs fonksiyonu ad-değer fonksiyonu olarak kullanılır:

>> forecast = py.weather.get_forecast(“Boston”,”US”,key,pyargs(“units”,”metric”)

Şimdi bu kısma kadar MATLAB içerisinde Python sözdizimi ve Python kütüphanelerinin nasıl kullanıldığını, bunu kendi projelerimize nasıl uyarlayabileceğimizi gördük. Bu durumun tam tersi de söz konusudur. Python tarafında MATLAB’ı çağırabilir, MATLAB çıktılarını Python kodumuza entegre edebiliriz. Hadi şimdi buna bir göz atalım. 


Python’dan MATLAB’i Çağırma

Python için MATLAB Engine API, MATLAB’i Python için bir hesaplama motoru, bir algoritma geliştirme ortamı olarak çağırmamıza olanak sağlar. Böylece favori MATLAB kodlarımızı Python’da kullanabiliriz. İlk olarak Python içerisine MATLAB aracını tanıtmamız gerekir. İşletim sistemi (OS prompt)’nde aşağıdaki kodu çalıştırın.

$ cd “matlabroot/extern/engines/python”
$ python setup.py install

“matlabroot” MATLAB’ın kurulu olduğu dizindir (MATLAB’da >> matlabroot’u çağırarak kontrol edin). Kurulum hakkında daha fazla bilgi için bu belge sayfasını kontrol edin.

Şimdi ise eğlenceli kısma geçelim! Python’da MATLAB fonksiyonlarını çağırmak için önce MATLAB Engine’yi içeriye aktarın ve başlatın (eğer halihazırda çalışan bir MATLAB oturumu varsa mevcut oturumu da kullanabilirsiniz).

>>> import matlab.engine
>>> eng = matlab.engine.start_matlab()

Şimdi ise karekök fonksiyonunu çağıralım:

>>> x = eng.sqrt(42.0)
6.48074069840786

Burada önemli bir hususa değinmek istiyorum. sqrt fonksiyonunu 42 ile değil 42.0 ile çağırdık. Bunun neden önemli olduğunu bir sonraki bölümde öğreneceğiz. Blog yazımızı sıkıca takip etmeyi unutmayın!

MATLAB işlevi kendi yerel sözdizimleriyle birlikte çağrılır. Ancak bazı belirgin farklar mevcuttur. Farklılıklarımızdan birisi, birden fazla çıktının yakalanma biçimidir. Örneğin duygu analizi algoritmasında MATLAB kodu duygu ve puanlar için birden fazla çıktı döndürür. Burada nargout kullanarak ilgilenilecek çıktı sayısını belirtmemiz gerekir.

>>> [sentiment,scores] = eng.sentimentAnalysis(text,nargout=2)
Positive
[[0.0,0.510948896408081,0.48905110359191895]]

Benzer şekilde MATLAB fonksiyonumuz hiçbir çıktı döndürmüyorsa (örneğin fonksiyon sonuçları bir dosyaya yazılıyorsa), nargout = 0 değerini kullanmamız gerekir.

Bu aşamadan sonra işimiz bittiğinde, sistem kaynaklarını serbest bırakmak için MATLAB Engine’yi durdurmalıyız.

>>> eng.exit()

Bu adım ile ilgili son olarak şunu belirtmeliyim ki, MATLAB operatörlerini çağırmak için (doğrusal denklem sistemlerini çözmek için kullanılan ünlü ters eğik çizgi “\” operatörü gibi), fonksiyon adlarını (mldivide) kullanmamız gerekir. MATLAB operatörleri ve ilişkili fonksiyonların tam listesini burada bulabilirsiniz.


Veri Türleri Dönüştürme

Daha önce sqrt fonksiyonunu çağırdığımızda, MATLAB’de 42’yi, Python’da 42.0’ı kullanmıştık. Peki neden bu fark?

42 değerini kullanmak MATLAB’de bir double tipinde bir veri döndürürken Python’da bir tam sayı döndürür. Bu kullandığımız karekök örneğimizde float(42) dönüşüm fonksiyonunu kullanmadan veya MATLAB’in sqrt fonksiyonu single, double veya complex tiplerini kabul ettiğinden 42.0 yazmadan hata verirdi.

>>> eng.sqrt(42.0)
6.48074069840786
 
>>> eng.sqrt(float(42))
6.48074069840786

MATLAB’de beklenen tipleri Python fonksiyonlarına geçirmek için tam sayı ve diğer tip dönüştürme fonksiyonlarını (aşağıdaki tabloda gösterilmiştir) da kullanabiliriz.

Bu aşamada dönüşüm yapılınca girdiler bizim için sorunsuz olur. Peki ya çıktılar?

Aşağıdaki tablo yaygın veri tiplerinin eşleşmelerini göstermektedir (daha kapsamlı bir liste, dokümanlarda yer almaktadır).

MATLAB Pyhton
double, singlefloat
complex single,
complex double
Complex
(u) int8, (u) int16
(u) int32, (u) int64
int
NaNfloat(nan)
Inffloat(inf)
string, charstr
logicalbool
structuredict
arraysarray.array()
cell arraylist, tuple

Burada timetable veya categorical gibi bazı özel MATLAB veri tipleri biraz ekstra uğraş isteyecek ve elle dönüştürülmeleri gerekecektir. Neticede Python’un anlayabileceği şekilde dönüşümü gerçekleştirilen veriler fonksiyonlarımızda kullanılmaya devam edilecektir.

MATLABConversion function
categoricalchar()
stringchar()
tabletable2struct()
timetabletimetable2struct()
datetimechat()

MATLAB ve Python arasındaki bu veri geçişlerinden endişeli olabilirsiniz ki bu endişeye gerek yoktur. Bunlar genellikle öncelikle planlama yaparak önlenebilir, iş yükünü hafifletebilir. Tekrar duygu analizi algoritmamıza dönecek olursak ses verileri tam sayılar olarak içeriye aktarılır (varsayılan double yerine) ve buradaki algoritma daha sonra doğrudan Python fonksiyonlarıyla kurgulanır.

Ayrıca özellikle ekipler ve diller arasında iş birliği yaparken verileri aktarmak için genellikle dosyaları kullanmak yaygındır. Verilerimiz tablo halindeyse iki dil arasında veri aktarmak için Apache Parquet’i kullanabiliriz. MATLAB, Parquet’te verileri verimli bir şekilde okumak ve yazmak için Apache Arrow’u kullanır. Verileri okuyabilir, hesaplamalar yapabilir ve verileri desteklenen birkaç dilden Parquet’e yazabiliriz.

Bu, daha büyük veri setleri ile çalışmak için yaygın bir işlemdir ve dönüştürmede kopya ve ekstra ek yük oluşturmaktan kaçınmaya yardımcı olur. MATLAB’de Parquet dosyalarının nasıl okunacağı ve yazılacağı hakkında daha fazla bilgi edinmek için bu dokümantasyon sayfasına göz atabilirsiniz.


Hata Mesajları

Şimdiye kadar hatalardan sürekli kaçarak algoritmamızı geliştirdik. Ancak hadi biraz gerçekçi olalım! Hatalar her algoritma geliştiricisinin karşısına çıkan, kaçınılmaz sonuçlardır. Hata mesajlarını yorumlamak değerli bir beceridir. MATLAB’de Python hataları ve Python’da MATLAB hataları gibi yaygın sorunların giderilmesine ilişkin belge sayfaları mevcuttur. Karşımıza çıkan hata mesajlarını nasıl okuyacağımıza dair tüm günümüzü harcayabiliriz veya ChatGPT gibi yapay zekâ modellerine de sorgulatabiliriz. Fakat buradaki en yararlı ders, hatanın MATLAB’den mi yoksa Python’dan mı meydana geldiğini bilmemiz, kurguladığımız yapıya hâkim olmamızdır. Hata mesajına baktığımızda ilgili hatanın nereden kaynakladığına dair bir gösterge görebiliriz.

Şimdi ise hatalı bir veri tipi ile sqrt fonksiyonu çalıştıralım:

>> py.math.sqrt(“42”)
Python Error: TypeError: must be real number, not str

MATLAB’de satırın başında Python Error’u görüyoruz. Ardından Python’dan kaynaklanan hata mesajı açıklaması geliyor. Bu da hatalarımızı ayıklamayı kolaylaştırıyor! MATLAB burada Python hatasını yakaladı ve aynı mesajı içeren bir MATLAB düzeltme uyarısı oluşturdu.
Aynısını Python’da yapalım:

>>> eng.sqrt(“42”)
Traceback (most recent call last):

MatlabExecutionError: Undefined function ‘sqrt’ for input arguments of type ‘char’.

Python geri izleme burada en aza indirilmiştir. Ancak son satıra bakarsak MatlabExecutionError ve MATLAB hata mesajını görürüz. MATLAB hata mesajı Python içerisinde de yakalandı ve Python içerisinde düzeltme uyarısı oluşturuldu.

Bu kısmı biraz basit tutuyorum. İstisnaları yakalamanın daha karmaşık yolları vardır ve bunlar test ile uygulama paylaşımları için yararlı olabilirler. Sizlere daha fazla bilgi için burada bir uzantı bıraktım.


MATLAB Kodundan Python Paketi Oluşturma

Şimdiye kadar MATLAB’i Python’dan veya tam tersi kullanmaktan bahsettik. Ancak bu çalışmalarda her ikisinin de aynı makineye kurulu olduğunu varsaydık. Peki algoritma veya kütüphanelerimizi MATLAB ortamında oluşturup Python’da bu oluşturduğumuz kütüphaneleri nasıl kullanabiliriz? Bu bölümde buna değinmek istiyorum. 

MATLAB Compiler SDK, MATLAB kodunu ve destekleyici dosyaları Python’dan (veya Java, C/C++, vb.) çağıracak ve bir çalışma zamanı ile yürütecek şekilde diğer dillerde paketlememize olanak tanır. Ayrıca süreci yürütmeye ve gerekli dosyaları oluşturmaya yardımcı olmak için bir uygulama da sağlanır.

Hava kalitesi tahmini örneği, MATLAB tahmin fonksiyonu predictAirQual.m’den bir Python paketi oluşturmak için bu işlemi kullanır. Library Compiler App kullanabilir ve dahil edilecek fonksiyonu/fonksiyonları seçebiliriz (bağımlılıklar otomatik olarak algılanır).

Bu, ihtiyacımız olan dosyaları paketler ve Python adımlarına ilişkin talimatları içeren bir setup.py ve readme.txt dosyası oluşturur.

Bunu Python’da çağırmak için oluşturulan setup.py dosyasını kullanarak MATLAB Engine API’si için olan sürece benzer bir kurulum adımı vardır (talimatlar burada).
Daha sonra paketi içe aktarıp başlatmamız ve fonksiyonları şu şekilde çağırmamız gerekiyor:

>>> import AirQual
>>> aq = AirQual.initialize()
>>> result = aq.predictAirQual()

İşimiz bitince de süreci sonlandırmak için aşağıdaki kodu kullanırız:

>>> aq.terminate()

Hava kalitesi örneği, bir web arayüzünde kullanılacak (ve potansiyel olarak aynı anda birçok kullanıcı tarafından erişebilecek) MATLAB işlevselliğini paylaşmada bir adım daha ileri gidiyor. Bu durum, yük dengeleme için MATLAB Production Server kullanılabilir ve MATLAB koduna bir RESTful API veya Python istemcisi aracılığıyla erişilebilir.

Bu kısımda daha fazla ilerlemeyeceğiz. Sadece birkaç kaynak daha paylaşıp toparlamak istiyorum. Hava kalitesi ve duygu analizi örnekleri, MATLAB ve Python’un birlikte nasıl ve neden harika şeyler için kullanılabileceğini göstermek için harika örneklerdir! Ayrıca Python’u MATLAB’den çağırmak ve MATLAB’i Python’dan çağırmak için duygu örneğini kullanarak kısa videolar da oluşturulmuştur. Ayrıca hava kalitesi örneğiyle yukarıdakilerin hepsini tartışan bir video da vardır.


Sonuç

En nihayetinde son bölüme kadar ulaşmış bulunuyoruz. Yukarıda anlattığımız konu özelinde farklı ekipler birbirleri ile paralel şekilde çalışabilir, farklı dillere yoğunlaşabilir, algoritmalarını farklı platformlarda geliştirebilir ve ortak bir paydada, platformda buluşabilirler. Bu durum bizlere ekipler arasındaki veri kayıplarını minimize etmeye, anlaşmazlığı ortadan kaldırmaya ve daha az zaman maliyetinde ürün çıkarmaya yardımcı olur.

Python’u MATLAB içerisine entegre ederek OpenCV kütüphanesinin MATLAB Script’inde nasıl çalıştırılabileceğini öğrenmek için buradaki linke göz atabilirsiniz. 

© FİGES A.Ş. Tüm hakları saklıdır.