Для моего личного исследования я хочу реализовать программный модем со следующей подписью, например:
void modulate(float* buffer, float sampleRate, float carrierFreq, const char* message, int length)
Это должно занять около message
из желаемых length
,и закодировать его в buffer
(давайте опускаем управление памятью), который я могу отправить, например, на аудио ЦАП ПК.Например, я могу очень легко выполнять AM-модуляцию:
int i, j;
for(i=0;i<length;++i)
for(j=0;j<100;++j)
buffer[i*100+j] = sin(M_PI*carrierFreq*(i*100+j)) * message[i] / 256;
Здесь используется 256 уровней амплитуды и 1/100 байта на такт.FM не намного сложнее, хотя для этого может потребоваться дополнительный вызов sin()
.Что касается QPSK / QAM - я пытаюсь прочитать статью в Википедии, но я не могу понять, что происходит, и даже в чем разница между QPSK / QAM и как преобразовать это в код.
Не могли бы выПомогите мне разобраться с небольшим фрагментом кода о том, как выполнить это преобразование?