###SDR@@@
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import find_peaks, iirfilter, filtfilt
import pandas as pd
from SoapySDR import Device, SOAPY_SDR_RX, SOAPY_SDR_CS16
sdr = Device()
#100 kHz ile 3.8 GHz
giris_kanal_1 = 0
giris_kanal_2 = 1
cikis_kanal_1 = 0
cikis_kanal_2 = 1
frekans = float(input("Alınacak Frekansı Girin (Hz): "))
ornekleme_hizi = float(input("Örnekleme Hızını Girin (Hz): "))
kayit_suresi_saniye = int(input("Kayıt Süresini Girin (saniye): "))
filtre_order = int(input("Filtre Derecesini Girin (örneğin, 1): "))
filtre_cut_frequency = float(input("Filtre Kesme Frekansını Girin (Hz): "))
sdr.setSampleRate(SOAPY_SDR_RX, giris_kanal_1, ornekleme_hizi)
sdr.setSampleRate(SOAPY_SDR_RX, giris_kanal_2, ornekleme_hizi)
sdr.setSampleRate(SOAPY_SDR_TX, cikis_kanal_1, ornekleme_hizi)
sdr.setSampleRate(SOAPY_SDR_TX, cikis_kanal_2, ornekleme_hizi)
sdr.setFrequency(SOAPY_SDR_RX, giris_kanal_1, frekans)
sdr.setFrequency(SOAPY_SDR_RX, giris_kanal_2, frekans)
num_samples = int(ornekleme_hizi * kayit_suresi_saniye)
samples_channel1 = np.zeros(num_samples, np.complex64)
samples_channel2 = np.zeros(num_samples, np.complex64)
sdr.readStream(SOAPY_SDR_RX, giris_kanal_1, samples_channel1, num_samples) # 1. Giriş kanalından veri oku
sdr.readStream(SOAPY_SDR_RX, giris_kanal_2, samples_channel2, num_samples) # 2. Giriş kanalından veri oku
plt.figure(figsize=(12, 6))
plt.plot(np.abs(samples_channel1), label='Giriş Kanal 1')
plt.plot(np.abs(samples_channel2), label='Giriş Kanal 2')
plt.title("Alınan Veriler")
plt.xlabel("SampNo")
plt.ylabel("max")
plt.legend()
plt.show()
nyquist = 0.5 * ornekleme_hizi
low = (filtre_cut_frequency - 0.2) / nyquist
high = (filtre_cut_frequency + 0.2) / nyquist
b, a = iirfilter(filtre_order, [low, high], btype='band')
filtered_channel1 = filtfilt(b, a, np.real(samples_channel1)) + 1j * filtfilt(b, a, np.imag(samples_channel1))
filtered_channel2 = filtfilt(b, a, np.real(samples_channel2)) + 1j * filtfilt(b, a, np.imag(samples_channel2))
plt.figure(figsize=(12, 6))
plt.plot(np.abs(filtered_channel1), label='Filtrelenmiş Kanal 1')
plt.plot(np.abs(filtered_channel2), label='Filtrelenmiş Kanal 2')
plt.title(f"{filtre_order}. Dereceden, {filtre_cut_frequency} Hz Kesme Frekansına Sahip Bandpass Filtre")
plt.xlabel("sampNO")
plt.ylabel("Max")
plt.legend()
plt.show()
frekanslar1, genlikler1 = np.fft.fftfreq(num_samples, 1 / ornekleme_hizi), np.abs(np.fft.fft(filtered_channel1))
frekanslar2, genlikler2 = np.fft.fftfreq(num_samples, 1 / ornekleme_hizi), np.abs(np.fft.fft(filtered_channel2))
peaks1, _ = find_peaks(genlikler1, height=genlikler1.max() / 2)
peaks2, _ = find_peaks(genlikler2, height=genlikler2.max() / 2)
en_büyük_frekanslar1 = frekanslar1[peaks1]
en_büyük_genlikler1 = genlikler1[peaks1]
en_büyük_frekanslar2 = frekanslar2[peaks2]
en_büyük_genlikler2 = genlikler2[peaks2]
print(f"{filtre_order}. dereceden, {filtre_cut_frequency} Hz kesme frekansına sahip bandpass filtre uygulandı.")
print(f"1. Giriş Kanalındaki en büyük enerjiye sahip frekanslar: {en_büyük_frekanslar1} Hz")
print(f"Bu frekanslardaki genlikler: {en_büyük_genlikler1}")
print(f"2. Giriş Kanalındaki en büyük enerjiye sahip frekanslar: {en_büyük_frekanslar2} Hz")
print(f"Bu frekanslardaki genlikler: {en_büyük_genlikler2}")
np.save("ham_veri_kanal1.npy", samples_channel1)
np.save("islenmis_veri_kanal1.npy", filtered_channel1)
np.save("ham_veri_kanal2.npy", samples_channel2)
np.save("islenmis_veri_kanal2.npy", filtered_channel2)
veriler = {
"Ham Veri Kanal 1": samples_channel1,
"İşlenmiş Veri Kanal 1": filtered_channel1,
"Ham Veri Kanal 2": samples_channel2,
"İşlenmiş Veri Kanal 2": filtered_channel2
}
veri_df = pd.DataFrame(veriler)
veri_df.to_excel("veriler.xlsx", index=False)
sdr.closeStream(SOAPY_SDR_RX, giris_kanal_1)
sdr.closeStream(SOAPY_SDR_RX, giris_kanal_2)
sdr.closeStream(SOAPY_SDR_TX, cikis_kanal_1)
sdr.closeStream(SOAPY_SDR_TX, cikis_kanal_2)