Jump to content

    

Прием сигнала анализатором - ресемплинг

Я генерирую сигнал векторным генератором, задал частоту дискретизации 1000 кГц, то есть полоса сигнала 1 МГц, 0.5 МГц слева несущей частоты и 0.5 МГц справа, я прав?

Тогда имеем на приеме необходимость анализа полосы 1 МГц. В приборе доступно 4.167 МГц, то есть на каждую выборку моего сигнала теоретически приходится 4.167 выборок с анализатора спектра, опять же, ничего не путаю?

Итак, в итоге получаем, что мне нужно в Матлабе использовать какой-то фильтр, который бы из 4.167 выборок сделал одну. Подскажите несложное и правильное решение, чтобы не ломать голову? Я бы мог просто откидывать лишние выборки, но дробный коэффициент заставляет меня пока сильно напрячься + фильтр, наверное, эффективнее был бы здесь, но вот хочу услышать варианты для моего случая. Принимаю обычный 13-позиционный код Баркера, на приеме отлично вижу как синхросигнал, так и информационный код, но надо дальше с ним что-то делать.

 

Share this post


Link to post
Share on other sites

Шикарно, в принципе решение, спасибо!

Но думаю еще, а так же теряется информация об амплитудах остальных точек. Можно как-то использовать эти 4,167 выборки для накопления информации об амплитуде сигнала?

Share this post


Link to post
Share on other sites

В общем, немного расширяется суть топика.

Ресемпл я сделал, серьезно помогло. Передаю на синхросигнале длинную постедовательность Баркера 13-позиционную, а в качестве информации зацикленный код Баркера 13-позиционный, так вот, на графиках, я приложил, видно, что все принял на ура. Но это на глаз так. 

1. Амплитуда постоянно скачет, как это устранить.

2. Как проще сделать правильный детектор? Чтобы в итоге я получил просто битовую последовательность I и Q и мог дальше это интерпретировать как QAM-модуляцию...

3. Понял, что вопрос немного расширяется. Там в сигнале видно, что присутствует паразитная ненулевая частота, как ее лучше убрать

 

 

1.jpg

2.jpg

3.jpg

 

Сейчас примерно так все представляю, но не получилось! Сигнал после кода все-равно скачет по гармонике.

fid=fopen('C:\Users\User\Documents\UDP_log.pcm','r');
sig=fread(fid,inf,'int16');

I = sig(1:2:end);
Q = sig(2:2:end);

fclose(fid);

sI = smooth(I,4);
sQ = smooth(Q,4);

yI=resample(sI,1000,4167);
yQ=resample(sQ,1000,4167);

carrSynch = comm.CarrierSynchronizer( ...
    'SamplesPerSymbol',1,'Modulation','QPSK');

[ssI,phErrI] = carrSynch(yI);
[ssQ,phErrQ] = carrSynch(yQ)


plot(ssI);
hold on;
plot(ssQ);
hold off;

 

Share this post


Link to post
Share on other sites

Попробовал еще так.

M = 4;
fs = 1e6;
foffset = 100;
carriersync = comm.CarrierSynchronizer('Modulation','QPSK', ...
    'DampingFactor',0.05,'NormalizedLoopBandwidth',0.01);

syncInfo = info(carriersync)
aa = [foffset/fs syncInfo.NormalizedPullInRange/(2*pi)]
carriersync.DampingFactor = aa(1)*1000;

fid=fopen('C:\Users\User\Documents\UDP_log.pcm','r');
sig=fread(fid,inf,'int16');

I = sig(1:2:end);
Q = sig(2:2:end);

fclose(fid);

sI = smooth(I,4);
sQ = smooth(Q,4);

yI=resample(sI,1000,4167);
yQ=resample(sQ,1000,4167);


ss = I+1i*Q;
[ssI,phErrI] = carrSynch(ss);

plot(ssI);
hold on;

Но получается, пока не могу въехать в тему, как использовать CarrierSynchronizer и нужен ли он тут вообще. Картинка может служить логотипом или продолжением кубизма-круголизма-импрессионизма.

untitled.jpg

 

Я так-то осознаю чуть чуть, что раз эллипсоид, нужно устранить IQ дисбаланс, а раз все смешалось в круг, надо применить то, что пробовал. Но вот я не могу до конца понять, подскажите, пожалуйста, чтобы я все таки получил долгожданные точки созвездия:) Попробовал эту функцию без компенсатора: compSig = iqImbComp(ss); Но что-то не так может настраиваю. Если мои вопросы очень простые, прошу наставить, что я могу сделать следующим шагом. Возможно уже есть готовое решение на Матлабе, которым могу воспользоваться?

Share this post


Link to post
Share on other sites

Ок, можно тогда проще. Допустим, я принял такое созвездие, как на рисунке. Частота дискретизации на передатчике 1 МГц. На приеме полоса 4,167 МГц. В двух словах то все просто, данные то я уже на глаз различаю. Просто в каком смысле - созвездие эллипсоид, значит дисбалланс I и Q, и созвездие с размытыми точками и крутящейся фазой, что исправляется синхронизацией несущей частоты. 

Как я могу это смоделировать в Matlab, или хотя бы с чего начать?

Share this post


Link to post
Share on other sites

Вам нужно понять суть формирования и демодуляции сигналов частотной/фазовой модуляции. dsplib.ru

Сформируйте простыми функциями самостоятельно сигнал без всяких встроенных высокоуровневых функций матлаба. Иначе не поймете чего у них там под капотом крутится. Выглядеть будет не особо красиво, но доберетесь до сути.

 

в настоящем случае вам нужна частотная синхра, восстановление несущей (хоть та же петля Костаса). Изучите петлевые фильтры.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now