Anda di halaman 1dari 5

Nama : Puspita Ayu Nugraheni

Kelas : 4 D4 Telekomunikasi A
NRP : 1210161001

LAPORAN PRAKTIKUM 1
SISTEM KOMUNIKASI RADIO DAN SATELIT

Percobaan Perekaman Data dari Sinyal WSPR menggunakan Raspberry Pi


A. PERALATAN:
1. RF Transceiver
2. Raspberry Pi yang telah dilengkapi dengan library ALSA Sound dan FFTW
3. SoundCard

B. LANGKAH PERCOBAAN
1. Menyiapkan Sistem Penerima Radio HF

Gambar 1. Rangkaian penerima Radio HF


2. Menyiapkan Raspberry Pi dengan USB Soundcard
Berikut adalah antar muka Radio dengan Raspi

Gambar 2. Antar Muka Radio dengan Raspi


3. Menyalakan Radio HF Transceiver. Terdapat beberapa tahap untuk menyalakan sebagai
berikut :
a. Menyiapkan Power Supply tegangan DC
b. Hubungkan kabel power radio ke power supply dengan polaritas yang benar
c. Terminal antenna radio dihubungkan ke antenna atau ke tuner, atau ke dummy-load
d. Nyalakan Power Supply DC dan atur tegangan menjadi 13,8V
e. Sambungkan radio ke Raspberry Pi dengan melalui rangkaian antarmuka RC
f. Nyalakan radio dan cari frekuensi WSPR di pita yang telah ditentukan
4. Melakukan proses perekaman pada Raspberry PI
Proses perekaman sinyal dilakukan dengan menangkap sinyal suara yang berada pada
frekuensi 5,287 MHz yang ditangkap melalui Radio HF yang kemudian tersambung dengan
Raspberry pi

Gambar 3. Frekuensi yang ditangkap Radio HF

Gambar 4. Antar Muka Raspberry Pi dengan Sound Card


a. Langkah pertama yang dilakukan adalah melakukan instalasi library ALSA sound
menggunakan perintah
#sudo apt-get install libasound2
sudo apt-get install libasound2-dev
Dan untuk library FFTW menggunakan perintah
#sudo apt-get install fftw3-dev
b. Kemudian compile program hw-play.c dari terminal melalui direktori SOUND dimana
file program tersebut tersimpan. Sintaks yang digunakan untuk menjalankan program
adalah
“gcc –o hw-play hw-play.c –lasound”
Tujuan dari compile program hw-play.c ini adalah untuk mengetahui spesifikasi dari
soundcard yang akan digunakan untuk merekam sinyal. Sound card yang akan
digunakan harus mampu menerima setting frekuensi sampling yang diinginkan.
c. Selanjutnya dilakukan compile program hw-record.c untuk mengetahui spesifikasi
microphone yang digunakan untuk merekam mono atau stereo.
d. Selanjutnya dilakukan proses perekaman dengan menjalankan program rekam.c.
 Didalam program rekam.c diawali dengan pendeklarasian variable yang akan
digunakan:
int i,j;
int err;
int16_t *buffer; // buffer integer 16bits
float *buffer_float;
int16_t *buffer_int16;
int rtime =114 ; // 114 detik estimasi jitter transmisi WSPR
int buffer_frames_48 = rtime*48000; // alokasi buffer samping 48KHz sesuai
jumlah sampel
int buffer_frames_12 = (rtime*48000)/8; // alokasi buffer sampleing 12
KHz
unsigned int rate = 48000;// sample rate
char* devcID;// Sound Card ID
snd_pcm_t *capture_handle;
snd_pcm_hw_params_t *hw_params;
snd_pcm_format_t format = SND_PCM_FORMAT_S16_LE;
clock_t t0;
float tdecimasi=0.0;
int channel;
unsigned int min,max;
char namafile[30];
berdasarkan pendeklarasian variable tersebut dapat diketahui bahwa menggunakan integer
16bit, estimasi lamanya jitter pada transmisi WSPR adalah 114 detik, alokasi buffer sampling
48KHz sesuai jumlah sampel dan alokasi buffer sampling adalah 12 KHz, serta nilai rate
(sample rate) = 48000 Hz.
 Mendeteksi ID Device
devcID = malloc(sizeof(char) * 5);
if (argc > 1){
devcID = argv[1];

}
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 = malloc(buffer_frames_48 * (snd_pcm_format_width(format) / 8) * 2);

// buffer_int16 = malloc(buffer_frames_48 * snd_pcm_format_width(format) / 8


* 2);

// 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.

 Simpan data hasil rekaman menjadi sebuah file


FILE *f = fopen(namafile, "wb"); if (f == NULL) {
printf("Kesalahan membuka file!\n");
exit(1);
}
// fwrite(buffer, 2, buffer_frames_48, f); /* jika mono */
fwrite(buffer, 4, buffer_frames_48, f); /* jika stereo */
fclose(f);
free(buffer);
snd_pcm_close(capture_handle);
// free(devcID);
}

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

Dan untuk suaranya bisa didengarkan melalui speaker atau headphone.

Anda mungkin juga menyukai