Jump to content

    
Sign in to follow this  
Nik_Su

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

Recommended Posts

Здравствуйте, стоит задача в приеме ЛЧМ сигнала с помощью квадратурного демодулятора. Я почитал статьи, Цифровую обработку сигналов от Лайонса и на сайте 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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites
2 минуты назад, vitzap сказал:

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
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)), а вот например для корреляции и поиска сигнала данный метод менее эффективен получается потому что необходимо восстанавливать сигнал опять?

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites
52 минуты назад, vitzap сказал:

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this