Преобразование реального сигнала в основную полосу IQ - Signal Processing
0 голосов
/ 15 августа 2017

Несмотря на то, что я читаю различные ответы на этом и других сайтах, я все еще не понимаю, как преобразовать реальный сигнал обратно в его исходные значения IQ основной полосы частот. Заметьте, я еще новичок в этом.

У меня есть очень минимальный прототип в Matlab, но я застреваю. Я начинаю с генерации некоторых данных IQ и их модуляции на сигнал несущей, готовый к отправке в виде потока вещественных чисел.

% constants
f = 100; % carrier frequency
Fs=500; % sampling frequency
t=(1/Fs:1000)*T; % time domain

% generate 1000 raw I/Q values to *transmit*
I=randi([0 1],1000,1)';
Q=randi([0 1],1000,1)';

% modulate I/Q values onto a carrier wave
Iwave = I.*cos(2*pi*f*t);
Qwave = Q.*sin(2*pi*f*t);

Я полагаю, что сложение двух волн правильно (не вычитая их, как я видел в некоторых обозначениях)

% add up I/Q. and transmit this stream of real-valued numbers
tx=Iwave+Qwave;

Теперь приемник смешивает сигналы с cos и sin-волнами

rxI = tx .* (cos(2*pi*f*t));
rxQ = tx .* (sin(2*pi*f*t));

Ниже приведено БПФ принятого действительного сигнала в черном пике на частоте 100 Гц. И смешанные сигналы I и Q на приемнике, достигающие пика на частоте 200 Гц (я знаю, что красный пик трудно увидеть, но он присутствует на частоте 200 Гц).

Теперь самое сложное. Каждый ресурс, который я прочитал, упоминает, что я должен фильтровать нижние частоты, это I и Q, и я смогу вернуть свои данные основной полосы частот.

cutoff=200/Fs;
order=32;

% a 32 order low-pass FIR filter with cutoff at 200Hz
filter=fir1(order,cutoff);

filtI=filter(filter,1,rxI);
filtQ=filter(filter,1,rxQ);

Вот БПФ сигналов I и Q после фильтрации нижних частот enter image description here Теперь отправленный и полученный канал I, как показано ниже, явно не похож на другой и просто не может быть демодулирован. enter image description here

Что я здесь не так делаю? В идеальном ответе было бы указано точно , какой фильтр мне нужен для возврата моих данных в основной полосе в Matlab Я думаю, это разумно, поскольку приведенный мною пример идеален и прост.

Пожалуйста, исправьте все недоразумения в этом посте, кроме явно неправильного фильтра, который я использую.

1 Ответ

1 голос
/ 15 августа 2017

Допустимая ширина полосы данных, созданных и используемых для модуляции сигнала IQ, должна быть ниже частоты среза постгетеродинного фильтра нижних частот, которая должна быть ниже несущей частоты, которая должна быть ниже половины Частота выборки ВЧ, чтобы избежать наложения алиасов.

Так что попробуйте более низкую скорость передачи данных и / или намного более высокую несущую частоту, с соответствующим образом соответствующей более высокой частотой дискретизации. Вы можете понизить скорость передачи данных, используя более медленную изменяющуюся инструкцию rand и отфильтровав ее для удаления гармоник квадратных импульсов.

...