Перейти к содержанию
    

Квадратурная демодуляция ЛЧМ сигнала

Здравствуйте, стоит задача в приеме ЛЧМ сигнала с помощью квадратурного демодулятора. Я почитал статьи, Цифровую обработку сигналов от Лайонса и на сайте dsplib про кавадратурный прием и методы обработки.
И попытался реализовать, задал такие характеристики как начальная частота 900 Гц конечная 3600. Частота гетеродина cos и sin (900 + 3600)/2 = 2250 как я понял частота должна быть такая. Ведь полосовой сигнал будет смещаться на нулевую частоту как сказано во всех книгах. Все сделал, даже получилось выделить огибающую, а вот с восстановлением сигнала ни как не получается, пытался применить формулы atan2(Q,I), diff(atan(Q./I)), diff(atan2(Q, I)) ничего не получается. Восстановление сигнала мне необходимо для того, чтобы сделать свертку и доказать, что сигнал принят правильно и это именно он.
Прикладываю виды сигналов получившиеся при моделировании.

Заранее больше спасибо за критику и ответы!!!!

К теме прикладываю код который реализовал в матлаб.

	function Recive_CHIRP
	 
	Fd = 10e6;%Частота дискретизации
	 
	td = 1/Fd;%шаг дискретизации
	 
	time_imp = 0.1;%Время импульса
	 
	t = 0:td:time_imp-td;%Время моделирования сигнала
	 
	Fsig_start = 900;%Частота сигнала начальная
	 
	Fsig_stop = 3600;%Частота сигнала конечная
	 
	%Радиолокационный сигнал
	CHIRP_signl = chirp(t,Fsig_start,time_imp,Fsig_stop);
	 
	 
	 
	 
	 
	%%=========================================================================
	%%=========================================================================
	%%=========================================================================
	need_points = 0:td:(time_imp+(time_imp*4));
	 
	sequence_imp = zeros(1,length(need_points));
	 
	 
	for j = 1:1:length(CHIRP_signl)
	    sequence_imp(1,j+(length(t)*2)) = CHIRP_signl(j);
	end
	 
	%Отрисовываем импульс во временной области 
	subplot(3,1,1);
	plot(sequence_imp);
	legend('ЛЧМ сигнал в частотной области');
	%%=========================================================================
	%%=========================================================================
	%%=========================================================================
	%%=========================================================================
	%%=========================================================================
	%%=========================================================================
	%Сигналы гетеродинов
	SIG_GET_COS = cos(2*pi*((900+3600)/2).*need_points + (2*pi/6));
	SIG_GET_SIN = sin(2*pi*((900+3600)/2).*need_points + (2*pi/6));
	 
	% Отрисовка сигналов гетеродина
	% figure();
	% plot(SIG_GET_COS);
	% hold on
	% plot(SIG_GET_SIN);
	% hold off
	%%=========================================================================
	%%=========================================================================
	%%=========================================================================
	%%=========================================================================
	%%=========================================================================
	%%=========================================================================
	 
	%Перемножение входного сигнала с сигналами гетеродина плюс фильтрация
	%получившегося сигнала
	 
	Hd = FilterForChirp;
	 
	I_signal = filter(Hd,sequence_imp.*SIG_GET_COS);
	 
	Q_signal = filter(Hd,sequence_imp.*SIG_GET_SIN);
	 
	%Отрисовка I и Q сигнала
	%figure();
	subplot(3,1,2);
	plot(I_signal)
	hold on
	plot(Q_signal)
	hold off
	legend('Синфазная компонента','Квадратурная компонента');
	%%=========================================================================
	%%=========================================================================
	%%=========================================================================
	%%=========================================================================
	%%=========================================================================
	%%=========================================================================
	 
	%Получение огибающей сигнала
	Sout = sqrt((I_signal.*I_signal) + (Q_signal.*Q_signal));
	 
	%Построение на одном графике реального сигнала и его огибающей
	%figure();
	subplot(3,1,3);
	plot(sequence_imp);
	hold on
	plot(Sout./abs(max(Sout)));
	legend('ЛЧМ импульс','Огибающая импульса');
	 
	figure();
	%plot(diff(atan2(degrees2dms(I_signal),degrees2dms(Q_signal)))/2*pi);
	%plot(Q_signal+I_signal);
	env = I_signal + 1j*Q_signal;
	mod = real(env.*exp(2j*pi*200*need_points));
	plot(abs((hilbert(mod).*exp(-2j*pi*200.*need_points)/sqrt(2))));
	 
	%plot((atan(Q_signal./I_signal)));
	% hold on
	% plot(I_signal)
	% hold on
	% plot(Q_signal)
	% hold off
	end
	код фильтра
	function Hd = FilterForChirp
	%FILTERFORCHIRP Returns a discrete-time filter object.
	 
	% MATLAB Code
	% Generated by MATLAB(R) 9.7 and DSP System Toolbox 9.9.
	% Generated on: 06-Jun-2021 16:48:03
	 
	% Butterworth Lowpass filter designed using FDESIGN.LOWPASS.
	 
	% All frequency values are in Hz.
	Fs = 10000000;  % Sampling Frequency
	 
	Fpass = 2600;        % Passband Frequency
	Fstop = 3000;        % Stopband Frequency
	Apass = 1;           % Passband Ripple (dB)
	Astop = 60;          % Stopband Attenuation (dB)
	match = 'stopband';  % Band to match exactly
	 
	% Construct an FDESIGN object and call its BUTTER method.
	h  = fdesign.lowpass(Fpass, Fstop, Apass, Astop, Fs);
	Hd = design(h, 'butter', 'MatchExactly', match);
	 
	% [EOF]
	

untitled.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что вас смущает? На первый взгляд картинки правильные.

Подпись "ЛЧМ сигнал в частотной области" не соответствует содержанию - это же по временной области.

Что вы хотите увидеть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, vitzap сказал:

Подпись "ЛЧМ сигнал в частотной области" не соответствует содержанию - это же по временной области.

Спасибо, не увидел.

3 минуты назад, vitzap сказал:

Что вы хотите увидеть?

Я пытаюсь по I и Q компонентам восстановить реальный сигнал. Просто в примерах которые я видел данное действие возможно, а у меня не получается реализовать. Также я бы хотел восстановить сигнал и сделать корреляцию чтобы показать, что я принял именно этот сигнал, это уже я написал для М последовательности.

18 минут назад, vitzap сказал:

Что вы хотите увидеть?

Даже применить корреляцию к лчм сигналу, чтобы быть уверенным что это именно он, хотя и сдвинутый по времени.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Перемножьте комплексные огибающие (I и Q) на cos и -sin несущей и, просуммировав, получите модулированный сигнал.

По сути дела это умножение на сигнал несущей:

напишем низкочастотный комплексный сигнал как:

Slo(t) = I(t) + jQ(t)

промодулируем его:

Srf(t) = Slo(t) * exp (j*Wo*t)

Wo - частота несущей в рад/с

В итоге должен получиться действительный сигнал на несущей частоте Wo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, vitzap сказал:

Перемножьте комплексные огибающие (I и Q) на cos и -sin несущей и, просуммировав, получите модулированный сигнал.

По сути дела это умножение на сигнал несущей:

напишем низкочастотный комплексный сигнал как:

Slo(t) = I(t) + jQ(t)

промодулируем его:

Srf(t) = Slo(t) * exp (j*Wo*t)

Wo - частота несущей в рад/с

В итоге должен получиться действительный сигнал на несущей частоте Wo

Большое спасибо за объяснение. Сегодня попробую сделать.

Вопрос наверно глупый, но не знаю как на него тогда ответить, если мы принимает сигнал, умножаем его на cos и sin фильтруем получаем I и Q компоненты, из них мы можем получить огибающую и фазу сигнала через diff(арктангенс(Q/I)), а вот например для корреляции и поиска сигнала данный метод менее эффективен получается потому что необходимо восстанавливать сигнал опять?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для корреляционного анализа "опорный" сигнал нужно также перенести на нулевую частоту, т.е.

Slo(t) = Srf(t) * exp (-j*Wo*t)

Ведь когда вы "искали" M-последовательность, вы делали корреляцию с немодулированной М-последовательностью?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

52 минуты назад, vitzap сказал:

Для корреляционного анализа "опорный" сигнал нужно также перенести на нулевую частоту, т.е.

Slo(t) = Srf(t) * exp (-j*Wo*t)

Я об этом не подумал кстати. Просто нужно иметь образ сигнала s(t) = I(t) + Q(t);

И на основе него сравнивать. Большое спасибо за помощь.

54 минуты назад, vitzap сказал:

Ведь когда вы "искали" M-последовательность, вы делали корреляцию с немодулированной М-последовательностью?

я делал qam модуляцию м последовательности. Создавал большой массив из нулей добавлял в рандомное место кусок данного сигнала, добавлял шум и производил корреляцию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 6/7/2021 at 6:21 AM, Nik_Su said:

Все сделал, даже получилось выделить огибающую, а вот с восстановлением сигнала ни как не получается, пытался применить формулы atan2(Q,I), diff(atan(Q./I)), diff(atan2(Q, I)) ничего не получается.

для вычисленных Вами квадратур формула atan2(Q,I) применяется и дает возможность увидеть исходную фазовую модуляцию

я применял формулу к такому участку вычисленных Вами квадратур

plot(t,I_signal,t,Q_signal);

res_00.thumb.png.a61df8430366af758f0c2fb6792485f0.png

закон изменения фазы принятого сигнала

plot(atan2(I_signal,Q_signal));

 

res_01.thumb.png.c3fd3676bb4ad5420372844a937aab9c.png

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

plot(unwrap(atan2(I_signal,Q_signal)));

 

res_02.thumb.png.7a4b3eaa636a3bf5f99d3846df2f0baf.png

закон изменения фазы - порабола, как и положено для ЛЧМ сигнала. Также убедимся, что закон изменения частоты линейный

plot(diff(unwrap(atan2(I_signal,Q_signal))));

res_03.thumb.png.2323ce9c7719e787144175390aa4d59b.png

по результатам расчетов видно, как именно использованный ранее в расчетах НЧ фильтр искажает закон изменения частоты сигнала при таких вычислениях

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31.07.2021 в 23:31, stealthisname сказал:

для вычисленных Вами квадратур формула atan2(Q,I) применяется и дает возможность увидеть исходную фазовую модуляцию

я применял формулу к такому участку вычисленных Вами квадратур


plot(t,I_signal,t,Q_signal);

res_00.thumb.png.a61df8430366af758f0c2fb6792485f0.png

закон изменения фазы принятого сигнала


plot(atan2(I_signal,Q_signal));

 

res_01.thumb.png.c3fd3676bb4ad5420372844a937aab9c.png

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


plot(unwrap(atan2(I_signal,Q_signal)));

 

res_02.thumb.png.7a4b3eaa636a3bf5f99d3846df2f0baf.png

закон изменения фазы - порабола, как и положено для ЛЧМ сигнала. Также убедимся, что закон изменения частоты линейный


plot(diff(unwrap(atan2(I_signal,Q_signal))));

res_03.thumb.png.2323ce9c7719e787144175390aa4d59b.png

по результатам расчетов видно, как именно использованный ранее в расчетах НЧ фильтр искажает закон изменения частоты сигнала при таких вычислениях

Большое спасибо за развернутый ответ, некоторые моменты вы прояснили мне!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

  От приемного тракта много зависит, режим миксера смотрите, там столько комбинационных сигналов. Понятно что сечас все SoC, но его режим должен программно управлятся. 

Ищите/паяйте  узкополосный sdr  ,по проще .

 Либо кварцевые/пьезо фильтры от древних сотовых

 

 1-st mixer приемного тракта - очень ответственный узел, в самодельн. приемниках,при его неправильном режиме искажения слышно. 

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

 Хотя в жизни - от наших они мало отличимы. Зануды бывают.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...