Kelas : 4 D4 Telekomunikasi A
NRP : 1210161001
LAPORAN PRAKTIKUM 1
SISTEM KOMUNIKASI RADIO DAN SATELIT
B. LANGKAH PERCOBAAN
1. Menyiapkan Sistem Penerima Radio HF
}
else {
devcID = "hw:1,0"; //default soundcard
}
Digunakan untuk mendeteksi ID dari sound card dimana telah diatur defaultnya adalah
“hw:1,0”
Mengenali Soundcard
if ((err = snd_pcm_open(&capture_handle, devcID, SND_PCM_STREAM_CAPTURE, 0)) <
0) {
fprintf(stderr, "tidak dapat membuka perangkat %s
(%s)\n",devcID,snd_strerror(err));
exit(1);
} else {fprintf(stdout, "perangkat berhasil dibuka\n");}
Digunakan untuk mengecek apakah perangkat dengan ID yang telah ditetapkan
sebelumnya berhasil terhubung dan bisa di akses.
Penambahan struktur parameter
if ((err = snd_pcm_hw_params_malloc(&hw_params)) < 0) {
fprintf(stderr, "mustahil untuk menambahkan parameter (%s)\n",
snd_strerror(err));
exit(1);
} else { fprintf(stdout, "parameter tambahkan\n"); }
if ((err = snd_pcm_hw_params_any(capture_handle, hw_params)) < 0) {
fprintf(stderr, "tidak dapat menginisialisasi parameter (%s)\n",
snd_strerror(err));
exit(1);
} else { fprintf(stdout, "parameter diinisialisasi\n"); }
Untuk inisialisasi parameter yang apabila berhasil maka akan menambahkan parameter
sesuai format yang telah di set.
Konfigurasi tipe akses
if ((err = snd_pcm_hw_params_set_access(capture_handle, hw_params,
SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) {
fprintf(stderr, "tidak dapat mengonfigurasi jenis akses (%s)\n",
snd_strerror(err));
exit(1);
} else { fprintf(stdout, "jenis konfigurasi akses!\n"); }
Mengatur format data
if ((err = snd_pcm_hw_params_set_format(capture_handle, hw_params, format)) <
0) {
fprintf(stderr, "tidak dapat mengatur format (%s)\n",
snd_strerror(err));
exit(1);
} else { fprintf(stdout, "format standar\n"); }
Source diatas mengatur format agar sesuai dengan format standar.
Mengatur frekuensi pengambilan sampel
if ((err = snd_pcm_hw_params_set_rate_near(capture_handle, hw_params, &rate,
0)) < 0) {
fprintf(stderr, "tidak mungkin untuk mengatur frekuensi sampling (%s)\n",
snd_strerror(err));
exit(1);
} else { fprintf(stdout, "frekuensi sampling disesuaikan: %d
(Hz)\n",rate); }
Mengatur jumlah saluran
err = snd_pcm_hw_params_get_channels_min(hw_params, &min);
if (err < 0) {
fprintf(stderr, "cannot get minimum channels count: %s\n",
snd_strerror(err));
snd_pcm_close(capture_handle);
return 1;
}
err = snd_pcm_hw_params_get_channels_max(hw_params, &max);
if (err < 0) {
fprintf(stderr, "cannot get maximum channels count: %s\n",
snd_strerror(err));
snd_pcm_close(capture_handle);
return 1;
}
printf("Channels:");
for (i = min; i <= max; ++i) {
if (!snd_pcm_hw_params_test_channels(capture_handle, hw_params, i))
printf(" %u ", i);
}
if ((err = snd_pcm_hw_params_set_channels(capture_handle, hw_params,
min)) < 0) {
fprintf(stderr, "tidak mungkin untuk mengatur jumlah saluran (%s)\n",
snd_strerror(err));
exit(1);
} else { fprintf(stdout, "jumlah saluran disesuaikan\n"); }
Kanal dapat diatur menjadi mono (1) atau stereo (2). Penggunaan kanl ini akan
mempengaruhi penggunaan buffer.
Mempersiapkan soundcard untuk mengambil data
if ((err = snd_pcm_prepare(capture_handle)) < 0) {
fprintf(stderr, "mustahil untuk menyiapkan kartu untuk registrasi
(%s)\n",
snd_strerror(err));
exit(1);
} else { fprintf(stdout, "siap merekam \n"); }
Mempersiapkan alokasi buffer memori 16bit, seperti spesifikasi alokasi PCM_FORMAT
alokasi memori yang cukup untuk registrasi
//alokasi buffer 16bit, seperti spesifikasi alokasi PCM_FORMAT alokasi memori
yang cukup untuk registrasi
// buffer_float = malloc(buffer_frames_48*sizeof(float));
Pada percobaan ini digunakan stereo, oleh karena itu untuk alokasi buffer agar
memenuhi 16bit perlu dilakukan pengalian 2 agar menjadi 16bit.
Melakukan pengambilan data
Menunggu sampai menit genap dengan memanfaatkan fungsi time() dan localtime()
yang harus disinkronisasi dengan internet
time_t t = time(NULL);
struct tm tm = *localtime(&t);
while(tm.tm_min%2 == 0){
printf("sekarang: %d-%d-%d %d:%d:%d\n", tm.tm_year+1900, tm.tm_mon + 1,
tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
t = time(NULL);
tm = *localtime(&t);
sleep(1);
system("clear");
}
while(tm.tm_min%2 == 1){
printf("sekarang: %d-%d-%d %d:%d:%d\n", tm.tm_year+1900, tm.tm_mon + 1,
tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
t = time(NULL);
tm = *localtime(&t);
sleep(1);
system("clear");
if(tm.tm_min%2 ==0)
sprintf(namafile,"%d:%d:%d:%d:%d.raw", tm.tm_year+1900, tm.tm_mon + 1,
tm.tm_mday, tm.tm_hour, tm.tm_min);
}
Saat waktu genap maka soundcard dan raspi akan melakukan sampling data, seperti
terlihat pada script diatas mengambil localtime (waktu yang telah diset pada Raspi), dan
akan dimodulus dengan nilai modulus 2. Hasil genap akan didapatkan apabila localtime
dimodulus dengan 2 bernilai 0, saat kondisi ini terpenuhi maka proses merekam akan
berjalan. Program dibuat sedemikian rupa karena pancaran sinyal WSPR saat menit
genap.
Saat waktu mencapai menit genap maka proses perekaman dimulai. Proses perekaman
adalah 114detik sesuai rtime yang telah diatur.
File hasil rekaman tersimpan dalam format .raw dengan nama 2019:9:16:18:4.raw. Besar
file hasil rekaman sebesar 21888000 bytes. Besar file tersebut diperoleh dari hasil rekaman
dengan durasi 114 detik atau bisa dibuktikan dari perhitungan:
Stereo : 1 frame = 2 sample
1 sample = 2 byte
Fs = 48000 ; t = 114 s
Ukuran file = 114 x 48.000 x 2 x 2
= 21.888.000 byte
≈ 21,8 Mb
e. Pemutaran hasil rekaman
Untuk melakukan oemutaran hasil rekaman menggunakan perintah
# aplay nama_file.raw -r 48000 -f S16_LE -D hw:1,0 -t raw -c 2
Sehingga akan didapat tampilan keterangan sebagai berikut