Я пытаюсь отправить данные по звуку с использованием ультразвуковой частоты.По этой причине мне нужно реализовать фазовую манипуляцию модуляции и демодуляции.Я должен реализовать это в C # с помощью NAudio.
Я прошел один проект, который я не понимаю, потому что, в основном, у меня нет опыта в цифровой обработке сигналов.Ссылка на проект GitHub прилагается ниже.https://github.com/Katee/quietnet В этом проекте автор использовал pyaudio.Я понимаю отправляющую часть (send.py).Но в части прослушивания я не могу понять некоторые части.
Кстати, я рассмотрел библиотеку CHIRP.Но это не доступно для xamerin.Поэтому я должен написать свой собственный модуль.
Для начала я не понимаю этот кусок кода
def get_peak(hertz, rate, chunk):
return int(round((float(hertz) / rate) * chunk))
Я не могу понять, как деление частоты на частоту дискретизации и умножение количества кусков вернет peak_index
def process_points():
while True:
cur_points = []
while len(cur_points) < frame_length:
try:
cur_points.append(points.get(False))
except Queue.Empty:
time.sleep(wait_for_point_timeout)
while True:
while np.average(cur_points) > bottom_threshold:
try:
cur_points.append(points.get(False))
cur_points = cur_points[1:]
except Queue.Empty:
time.sleep(wait_for_point_timeout)
next_point = None
while next_point == None:
try:
next_point = points.get(False)
except Queue.Empty:
time.sleep(wait_for_point_timeout)
if next_point > bottom_threshold:
bits.put(0)
bits.put(0)
cur_points = [cur_points[-1]]
break
print("")
last_bits = []
while True:
if len(cur_points) == frame_length:
bit = int(quietnet.get_bit(cur_points, frame_length) > bottom_threshold)
cur_points = []
bits.put(bit)
last_bits.append(bit)
# if we've only seen low bits for a while assume the next message might not be on the same bit boundary
if len(last_bits) > 3:
if sum(last_bits) == 0:
break
last_bits = last_bits[1:]
try:
cur_points.append(points.get(False))
except Queue.Empty:
time.sleep(wait_for_point_timeout)
Кроме того, если мы используем более высокую частоту, у нас следует выполнить цикл, пока мы не получим более низкие пороговые значения.
По сути, я спрашиваю, может ли кто-нибудь предложить мне некоторую ссылку на DSP и фазовую манипуляцию, чтобыя могу понять этот проект и реализовать его в C # .Net.