Mari lanjutkan topik decoding berbagai jenis sinyal radio. Salah satu format menarik yang berkembang dalam satu abad terakhir adalah APT (Automatic Picture Transmission). Ini digunakan untuk mengirimkan gambar Bumi dari luar angkasa, dan yang jauh lebih menarik dan relevan bagi kami, menerima sinyal APT itu sederhana dan dapat diakses oleh amatir radio.
Satelit NOAA © en.wikipedia.org/wiki/NOAA-15
Bagi yang berminat, kelanjutan di bawah dipotong.
informasi Umum
Satelit meteorologi NOAA yang kami minati termasuk dalam seri TIROS (Television InfraRed Observation Satellite), yang pertama diluncurkan pada tahun 1960. Saat ini ada 3 satelit yang beroperasi (NOAA-15, NOAA-18 dan NOAA-19, yang tertua di antaranya, NOAA -15 bekerja sejak 1998). Satelit berputar mengelilingi bumi pada ketinggian 850 km dan melakukan satu revolusi dalam waktu sekitar 1,5 jam. Ada berbagai sensor di dalamnya, tetapi kami akan tertarik untuk menerima gambar meteorologi. Dan ada dua pilihan. Yang paling sederhana dan paling banyak tersedia adalah sinyal analog dari format APT yang telah disebutkan pada frekuensi 137 MHz. Selain itu, satelit juga mengirimkan gambar dalam format HRPT resolusi tinggi (Transmisi Gambar Resolusi Tinggi) pada 1.7 GHz. Dekoder HRPT tersedia, tetapi antena yang dapat diputar dengan penguatan yang baik sudah diinginkan untuk penerimaan, yang lebih sulit dan mahal.
Menurut konvensi internasional, semua data meteorologi terbuka, dan siapa pun dapat menerima sinyal NOAA. Apa yang akan kita lakukan sekarang.
Sudah ada beberapa artikel tentang penerimaan sinyal NOAA di Habré (misalnya, 1 , 2 ), tetapi semuanya biasanya bermuara pada "dicolokkan ke penerima, jalankan program, dapatkan gambar", tanpa banyak penjelasan tentang bagaimana gambar ini dikirim. Mari kita coba turun satu tingkat dan lihat bagaimana sinyal bekerja di dalamnya.
Penerimaan
Yang pertama dan paling jelas. Satelit ini bukan geostasioner, ia bergerak melintasi langit, jadi waktu penerimaan harus "ditangkap". Hal yang paling sederhana adalah menggunakan layanan online n2yo.com, yang memungkinkan Anda menghitung waktu penerbangan untuk satelit mana pun. Berikut adalah contoh untuk NOAA 19 :
Penerimaan yang baik, ketika satelit berada tinggi di atas cakrawala, sekitar sekali sehari, satelit itu sendiri di atas langit membutuhkan waktu sekitar 10 menit, sehingga dapat berguna untuk mengatur rekaman terjadwal pada waktu yang tepat.
Tentu saja, Anda memerlukan penerima untuk menerima sinyal radio. RTL-SDR V3 termurah seharga $ 35 akan dilakukan, saya menggunakan SDRPlay kualitas yang lebih baik dengan pengaturan berikut:
Seperti yang Anda lihat, saya telah menetapkan nilai desimasi ke maksimum, yang memungkinkan saya mendapatkan rentang dinamis maksimum. Tingkat penguatan LNA dan Penguatan harus dipilih tergantung pada antena. Satelit NOAA 15, 18 dan 19 memancarkan sinyal pada frekuensi 137.620, 137.9125 dan 137.100 MHz. Sinyal itu sendiri memiliki bandwidth sekitar 50 kHz, dan jika semuanya dilakukan dengan benar, pada waktu tertentu sinyal akan muncul di spektrum:
Menarik untuk diperhatikan kemiringan garis karena efek Doppler - satelit terbang melewati kita, dan dengan mempertimbangkan waktu penerbangan, ini adalah hal baik lainnya. bukti kebulatan Bumi;)
Berbicara tentang penerimaan, hal hebat tentang satelit NOAA adalah penerimaannya sangat terjangkau untuk pemula. Pada prinsipnya, sinyal akan terdengar di antena apa pun, bahkan di "kumis" dari TV, tetapi untuk gambar yang bagus, kualitas antena sangat penting. Dengan antena yang buruk (seperti milik saya :) gambarnya tidak akan terlalu kontras, tetapi ini cukup untuk mendemonstrasikan pengoperasian decoder. Antena khusus 137 MHz dapat dibeli atau dibuat dari pipa ledeng dan pipa tembaga, contohnya dapat dilihat di sini . Namun, topik artikelnya masih pemrosesan sinyal, dan bukan pertukangan, mereka yang ingin dapat mempelajari topik membuat antena sendiri.
Jadi, kami melihat waktu penerbangan satelit, pilih mode perekaman FM di program dengan bandwidth 50 KHz dan rekam sinyalnya. Hasilnya harus berupa file WAV dengan panjang sekitar 10 menit, dan pulsa periodik harus terdengar jelas. Sekarang Anda dapat mulai mendekode.
Decoding
LANGKAH 1 . Mari memuat file menggunakan pustaka scipy dan menampilkannya di layar. Saya hanya menampilkan fragmen dari 20 hingga 21 detik, jika tidak rendering akan terlalu lama.
import scipy.io.wavfile as wav
import scipy.signal as signal
import numpy as np
import matplotlib.pyplot as plt
fs, data = wav.read('HDSDR_20201227_070306Z_137100kHz_AF.wav')
data_crop = data[20*fs:21*fs]
plt.figure(figsize=(12,4))
plt.plot(data_crop)
plt.xlabel("Samples")
plt.ylabel("Amplitude")
plt.title("Signal")
plt.show()
Periodisitas sinyal yang jelas harus terlihat:
Langkah 2 . Untuk mempercepat decoding, mari kurangi laju pengambilan sampel sebanyak 4 kali, dengan membuang nilai yang tidak perlu:
resample = 4
data = data[::resample]
fs = fs//resample
LANGKAH 3 . Gambar ditransmisikan dalam modulasi amplitudo, untuk konversi ke AM, cukup menerapkan transformasi Hilbert:
def hilbert(data):
analytical_signal = signal.hilbert(data)
amplitude_envelope = np.abs(analytical_signal)
return amplitude_envelope
data_am = hilbert(data)
Anda dapat menampilkan gambar di layar dan memastikan bahwa kami telah menerima amplop sinyal:
Langkah 4 . Kesimpulan. Sebenarnya, decoding sudah selesai. Datanya sendiri ditransmisikan dalam format analog, sehingga warna piksel tergantung pada level sinyal. Kita dapat "membuka" gambar tersebut menjadi gambar 2D, dari format deskripsi tersebut diketahui bahwa satu baris ditransmisikan dalam 0,5 detik:
from PIL import Image
frame_width = int(0.5*fs)
w, h = frame_width, data_am.shape[0]//frame_width
image = Image.new('RGB', (w, h))
px, py = 0, 0
for p in range(data_am.shape[0]):
lum = int(data_am[p]//32 - 32)
if lum < 0: lum = 0
if lum > 255: lum = 255
image.putpixel((px, py), (0, lum, 0))
px += 1
if px >= w:
if (py % 50) == 0:
print(f"Line saved {py} of {h}")
px = 0
py += 1
if py >= h:
break
Fungsi putpixel bukanlah cara tercepat untuk bekerja dengan gambar, dan kode dapat dipercepat 10 kali menggunakan numpy.reshape dan Image.fromarray, tetapi metode baris demi baris lebih deskriptif. Untuk mengubah amplitudo sinyal ke kisaran kecerahan 0..255, nilai dibagi dengan 32, untuk antena lain nilainya mungkin harus diubah.
Untuk kemudahan melihat, rentangkan gambar secara vertikal dan tampilkan di layar:
image = image.resize((w, 4*h))
plt.imshow(image)
plt.show()
Jika semuanya dilakukan dengan benar, kita akan mendapatkan gambar seperti ini:
Hangat dan hijau lampu dipilih hanya untuk kecantikan, mereka yang ingin dapat mengubah gamut warna sesuai kebijaksanaan mereka dengan mengubah parameter fungsi putpixel. Apa yang kita lihat di layar? Dalam format APT, dua saluran ditransmisikan. Inframerah Jauh ditransmisikan pada satu setengah bingkai, IR dekat / tengah ditransmisikan ke yang lain, mode dipilih tergantung pada apakah satelit memancarkan gambar malam atau siang. Gambar tersebut juga berisi penanda sinkronisasi dan telemetri, bagi yang mau dapat melihat keterangan format APTsecara detail. Program yang lebih maju menggunakan penanda ini untuk meratakan gambar, tetapi mungkin tidak bekerja pada sinyal yang lemah. Kode di atas tidak pernah keluar dari sinkronisasi sejak itu tidak ada, bahkan sinyal yang paling lemah dan paling berisik pun akan terlihat, meskipun dengan kontras yang lebih sedikit.
Kesimpulan
Seperti disebutkan sebelumnya, tidak banyak sistem komunikasi yang efektif di dunia, yang sinyalnya dapat diterjemahkan menggunakan 20 baris kode. Satelit NOAA berusia sekitar 20 tahun, dan ketika gagal, format baru kemungkinan besar akan menjadi digital dan lebih kompleks (edit - seperti yang disarankan dalam komentar, Meteor-M2 baru sudah mentransmisikan data dalam bentuk digital pada 137 MHz). Jadi mereka yang ingin mencoba sesuatu yang sederhana dan tidak rumit untuk memecahkan kode dapat disarankan untuk segera.
Tentu saja, sinyal decode opsional NOAA hanya dengan cara ini, ada decoder siap pakai, yang telah digunakan untuklebih banyak kemungkinan, seperti menggambar garis besar negara dan kota, membentuk warna semu dari saluran monokrom, dll. Tetapi melakukannya sendiri dari awal jauh lebih menarik.
Seperti biasa, semoga sukses untuk semuanya.