В этой части реализуем и запустим передатчик, тем самым завершив основу трансивера, после этого останется работа по улучшению аппаратной части, отлову глюков и улучшению функционала.
Первым делом был изготовлен ЦАП на DAC904E, о нём писал ранее, к нему приехал хороший трансформатор 1:4, но его установку буду делать в рамках упаковки трансивера в корпус, там буду приводить всё в божеский вид.
Его схема взята из схожего SDR проекта, за что им отдельное спасибо.
Далее предстояла работа по интеграции всего этого хозяйства в код трансивера, по сути это тоже самое что в приёмнике, только наоборот:
- Первым делом запускаем кольцевой буффер DMA для получения данных с кодека WM8731.
- Далее, по достижению половины или окончания кольцевого буфера копируем содержимое его половины в память и начинаем обработку.
- Получаем массив с выборкой одного входящего канала (для микрофона этого достаточно), помещаем его в массив данных I, усиливаем его в необходимое количество раз (регулируется в настройках).
- Пропускаем через LPF(фильтр низких частот), реализованный на FIR, используемом в приёмнике.
- Далее, в зависимости от USB/LSB модуляции, либо копируем содержимое канала I в канал Q (LSB), либо инвертируем (умножаем на -1) в случае USB.
- Применяем преобразование Гильберта, сдвигая фазу канала I на +45 градусов, а Q на -45 градусов.
- Помещаем результаты в кольцевой буфер FPGA и ждём отправки.
- Приступаем к части высокочастотного кода, который будет работать в FPGA.
- Т.к. нам предстоит в 1000 раз поднять дискретизацию сигнала (48кгц в 48мгц на ЦАП/АЦП) то нам потребуется интерполирующий CIC фильтр.
- Но у CIC есть большие проблемы с АЧХ, поэтому перед тем как подать на него сигнал, необходимо пропустить его через CIC-компенсирующий фильтр, который рассчитаем и экспортируем в Matlab.
- Далее подаём на смесители, к которым дополнительно подключен NCO генератор от приёмника и суммируем результаты для вывода в ЦАП.
- В даташите к ЦАП обнаружено, что нулевой сигнал должен подаваться со смещением в 8191 (13 бит). Иначе даже значения 1 и -1 будут максимально раскачивать амплитуду сигнала, и получится эффект, когда тише говоришь — громче передаёшь.
- Прогоняем через сумматор, через переключатель приём-передача и выводим данные в ЦАП.
Все, есть ещё многое что необходимо доработать, но нас уже слышно в эфире на несколько милливатт, а это уже хорошее начало.
Файлы и схемы проекта доступны на GitHub аккаунте.
Полезные ссылки, используемые в проекте: