İletişim laboratuvarlarında hepimiz CRO’ları kullanarak genlik modülasyonlu sinyaller üretiriz. Ancak aynı şey Python ve ek kütüphanelerinden birkaçı kullanılarak da yapılabilir.
Kullanmamız gereken 3 tane kütüphane var. Bunlar;
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
Kütüphanelerden sonra belirlememiz gereken 5 tane değer var. Bunlar sırasıyla taşıyıcı genliği, taşıyıcı frekansı, mesaj genliği, mesaj frekansı ve modülasyon indeksidir.
A_c = 1
f_c = 200
A_m = 5
f_m = 10
modulation_index = 8000
İletişimde zaman fonksiyonu sürekli bir fonksiyondur ve biz bu sürekliliği sağlamak için Linspace fonksiyonunu kullanacağız. Linspace fonksiyonu, belirli bir aralık içinde eşit aralıklı sayıları üretir. Linspace’in ilk argümanı başlangıç noktası, ikinci argüman bitiş noktası ve üçüncü argüman ise verilen aralık arasındaki kesme noktası sayısıdır.
t = np.linspace(0, 1, 1000)
Artık taşıyıcı, mesaj ve AM sinyali tanımlayabiliriz.
carrier = A_c*np.cos(2*np.pi*f_c*t)
modulator = A_m*np.cos(2*np.pi*f_m*t)
product = A_c*(np.cos(2*np.pi*f_m*t))*np.cos(2*np.pi*f_c*t)
Son olarak tanımlamamız gereken bir şey kaldı, Noise(gürültü). Gürültü normal şartlarda yayın yaparken dışarıdan istemsiz olarak aldığımız sinyaller bütünüdür. Biz bu gürültüyü python’da kendimiz oluşturacağız.
noise = np.random.normal (0 , np.sqrt(0.01) , len( product ))
Herşeyimiz hazır olduğuna göre artık sinyallerimizi çizdirebiliriz. Çizim için Matplotlib kütüphanesini kullanıyoruz. Çizimlerde sinyal rengini, x ekseni ve ye ekseni isimleri gibi etkenleri belirleyebiliyoruz.
plt.subplot(6,1,1)
plt.title('Amplitude Modulation')
plt.plot(modulator,'g')
plt.ylabel('Amplitude')
plt.xlabel('Message signal')
plt.subplot(6,1,2)
plt.plot(carrier, 'r')
plt.ylabel('Amplitude')
plt.xlabel('Carrier signal')
plt.subplot(6,1,3)
plt.plot(product, color="purple")
plt.ylabel('Amplitude')
plt.xlabel('AM signal')
Yukarıda ki kodda ilk kısım mesaj sinyali, ikinci kısım taşıyıcı sinyal, üçüncü kısım ise modüle edilmiş sinyaldir. Biz daha sonra modüle edilmiş sinyale gürültü ekleyeceğiz. Daha sonra ise alıcı için demodülasyon işlemi uygulayacağız.
withnoise = noise + product
demodulation = withnoise * carrier
Gürültü eklenmiş sinyalimizi de ekrana bastırmak için aşağıdaki kodu kullanıyoruz.
plt.subplot(6,1,4)
plt.plot(withnoise, color="r")
plt.ylabel('Amplitude')
plt.xlabel('Signal With Noise')
plt.subplot(6,1,5)
plt.plot(demodulation, color="r")
plt.ylabel('Amplitude')
plt.xlabel('Demodulation')
Son olarak filtre ekleyip demodüle edilen sinyali filtreden geçiriyoruz. Filtre için kullanmamız gereken kütüphane ise signal kütüphanesi. Biz lowpass filtre uygulayacağız.
b, a = signal.butter(6 , 0.02, btype ='lowpass')
filtered = signal.lfilter (b, a, demodulation )
Filtreyi de kullandıktan sonra mesaj sinyalimizi çizdirebiliriz.
plt.subplot(6,1,6)
plt.plot(filtered, color="r")
plt.ylabel('Amplitude')
plt.xlabel('Filtered')
Şimdi grafiklerimizi istediğimiz gibi özelleştirebiliriz. Yazı tipi, boyutu vb. şeyleri değiştirmemiz mümkün. Resmi kaydetmek için savefig fonksiyonunu kullanacağız. Bu konu da daha fazla bilgi almak için Matplotlib‘in resmi sayfasını ziyaret edebilirsiniz.
plt.subplots_adjust(hspace=1)
plt.rc('font', size=15)
fig = plt.gcf()
fig.set_size_inches(32, 15)
fig.savefig('Amplitude Modulation.png', dpi=100)
Çıkan tüm grafikler sırasıyla aşağıdadır.
Genlik modülasyonu projemiz böylelikle bitmiş oluyor. Aşağıda tam kodu bulabilirsiniz. İyi çalışmalar.
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
A_c = 1
f_c = 200
A_m = 5
f_m = 10
modulation_index = 8000
t = np.linspace(0, 1, 1000)
carrier = A_c*np.cos(2*np.pi*f_c*t)
modulator = A_m*np.cos(2*np.pi*f_m*t)
product = A_c*(np.cos(2*np.pi*f_m*t))*np.cos(2*np.pi*f_c*t)
#############################################
# noise tanımlanan kısım
#############################################
noise = np.random.normal (0 , np.sqrt(0.01) , len( product ))
#############################################
plt.subplot(6,1,1)
plt.title('Amplitude Modulation')
plt.plot(modulator,'g')
plt.ylabel('Amplitude')
plt.xlabel('Message signal')
plt.subplot(6,1,2)
plt.plot(carrier, 'r')
plt.ylabel('Amplitude')
plt.xlabel('Carrier signal')
plt.subplot(6,1,3)
plt.plot(product, color="purple")
plt.ylabel('Amplitude')
plt.xlabel('AM signal')
#######################
# Noise eklenen kısım ve demodule edilen kısım
#######################
withnoise = noise + product
demodulation = withnoise * carrier
#####################
plt.subplot(6,1,4)
plt.plot(withnoise, color="r")
plt.ylabel('Amplitude')
plt.xlabel('Signal With Noise')
#######################
plt.subplot(6,1,5)
plt.plot(demodulation, color="r")
plt.ylabel('Amplitude')
plt.xlabel('Demodulation')
#######################
#Filtre uygulanan kısım
#######################
b, a = signal.butter(6 , 0.02, btype ='lowpass')
filtered = signal.lfilter (b, a, demodulation )
######################
plt.subplot(6,1,6)
plt.plot(filtered, color="r")
plt.ylabel('Amplitude')
plt.xlabel('Filtered')
plt.subplots_adjust(hspace=1)
plt.rc('font', size=15)
fig = plt.gcf()
fig.set_size_inches(32, 15)
fig.savefig('Amplitude Modulation.png', dpi=100)