ЛЧМ квадратурный знаковый коррелятор в Матлаб

ЛЧМ знаковый коррелятор в Матлаб Тема знакового коррелятора уже подымалась на нашем сайте. Данный пост это моделирование знакового квадратурного коррелятора на базе ЛЧМ сигнала в Матлаб. Моделирование коррелятора в Матлаб дает ответы на вопросы наилучшей совместимости частоты дискретизации с полосой частот в которой формируется сигнал в случае, если дискретизация проводится по полосе формируемых частот. Итак: имеется ЛЧМ сигнал 71...79 кГц который занимает полосу в 8кГц. По Найквисту частота дискретизации в этом случае должна быть не менее 16 кГц.

Матлаб модель квадратурного знакового коррелятора:


%% инициализация

clc; 
clear all;
  
f_begin = 71000;    % начальная частота 71 кГц
f_end = 79000;      % конечная частота 79 кГц   
f_dt = 39700;       % частота дискретизации Гц
tch_begin = 0;      % начальное время моделирования 
tch1 = 0;						% начальное время модели
tch2 = 13e-3;				% конечное время модели
tch_end = 3*tch2;   % конечное время моделирования
tch_dt = 1/f_dt;    % время одного дискрета   
%Nt = tch2*f_dt; 

%% моделирование

% время моделирования от tch_begin до tch_end шаг tch_dt
%tch = linspace(tch_begin,tch_end,768);
% время существования моделей
tch_lf = tch1:tch_dt:(tch2-tch_dt);
% количество выборок в модели
tm = length(tch_lf);
fprintf('Количество дискретов за время существ. моделей 13 мсек %d\n', tm);             

% Формирование ЛЧМ сигнала на участке 39 мсек
y_t1 = zeros(1,tm);
y_t2 = zeros(1,tm);
y_lf = chirp(tch_lf,f_begin,tch2,f_end, 'li', pi);  
y = cat(2,y_t1,y_lf,y_t2);
tst = length(y);
% fprintf('Количество дискретов за время моделирования 39 мсек %d\n', tst);             

% косинусная модель
x_cos = chirp(tch_lf,f_begin,tch2,f_end);
% синусная модель
x_sin = imag(hilbert(x_cos)); 
% сигнал в противофазе
%x_sin = x_cos.*x_cos;   

% модель cos в логике 
x_log_cos = dec2bin( reshape( x_cos > 0, [], 1 ));
% модель sin в логике
x_log_sin = dec2bin( reshape( x_sin > 0, [], 1 ));
% сигнал в логике
y_log = dec2bin( reshape( y > 0, [], 1 ));
fprintf('Модель cos %s', x_log_cos);             
fprintf('\n');                   
fprintf('Модель sin %s', x_log_sin);             
fprintf('\n');                   
fprintf('Сигнал %s', y_log);             
fprintf('\n');                   
fprintf('\n');

% бинарный формат моделей и сигнала
x_bit_cos = reshape( x_cos > 0, [], 1 );
x_bit_sin = reshape( x_sin > 0, [], 1 );
y_bit = reshape( y > 0, [], 1 );

% распечатка HEX кода моделей если кол. дискр. моделей без остатка /4
if (mod(tm,(4*round(tm/4))) == 0)
	rsh_cos = reshape( x_cos > 0, [], tm/4 );
	rsh_sin = reshape( x_sin > 0, [], tm/4 );
	% модели в hex
	x_hex_cos = dec2hex( bi2de(rsh_cos', 'left-msb'));
	x_hex_sin = dec2hex( bi2de(rsh_sin', 'left-msb'));
	% формат строки
	formatSpec_x_cos_hex = 'Модель cos hex %s';
	formatSpec_x_sin_hex = 'Модель sin hex %s';
	% значения y_hex в hex виде
	fprintf(formatSpec_x_cos_hex, x_hex_cos);             
	fprintf('\n');                   
	fprintf(formatSpec_x_sin_hex, x_hex_sin);             
	fprintf('\n');                   
	fprintf('\n');

	% открытие файла на запись косинусной модели
	fid = fopen('x_hex_cos.txt', 'wb'); 
	% проверка корректности открытия
	if fid == -1                     
			error('File is not opened');
	end 

	% запись в файл 
	fwrite(fid, x_hex_cos);
	% закрытие файла 
	fclose(fid);  

	% открытие файла на запись синусной модели
	fid = fopen('x_hex_sin.txt', 'wb'); 
	% проверка корректности открытия
	if fid == -1                     
			error('File is not opened');
	end 

	% запись в файл 
	fwrite(fid, x_hex_sin);
	% закрытие файла 
	fclose(fid);  
	
else
	fprintf('Невозможно создать полный HEX код моделей\n')  
	fprintf('Количество дисретов моделей не делится без остатка на 4\n');             
	fprintf('Необходимо изменить частоту дискретизации \n\n');             
	
end

z_cos = zeros(3*tm);
z_sin = zeros(3*tm);
z = zeros(3*tm);
% Коррелятор знаковый
for tm_mod = 1:(2*tm)
  
	% побитовая XOR в матрицу xy_cos 
	xy_cos = bitxor(y_bit(tm_mod:(tm_mod+(tm-1))), x_bit_cos);
	% побитовая XOR в матрицу xy_sin
	xy_sin = bitxor(y_bit(tm_mod:(tm_mod+(tm-1))), x_bit_sin);
	% подсчет совпадений   
    z(tm_mod) = (tm/2 - length(find(xy_cos))) + (tm/2 - length(find(xy_sin))); 

end

% максимальное значение в свертке
fprintf('Максимум в свертке %d\n', max(z(:,1)));
fprintf('\n'); 

%% графика

figure
tr = 1:tst;
plot(tr/f_dt, y), grid;
xlabel('Время мсек');
title('ЛЧМ сигнал');
zoom xon;

figure
plot(tch_lf, x_cos), grid;
xlabel('Время (в сек)');
title('ЛЧМ модель cos');
zoom xon;

figure
plot(tch_lf, x_sin), grid;
xlabel('Время (в сек)');
title('ЛЧМ модель sin');
zoom xon;

figure
tl = 1:(3*tm);
plot(tl, z), grid;
xlabel('Дискреты');
title('Знаковый коррелятор');
zoom xon;

Модель коррелятора работает просто. Сигнал, который сформирован в виде матрицы, в цикле как-бы 'заползает' на свои косинусную и синусную модели, которые сформированы тоже в виде матриц.

ЛЧМ сигнал в Матлаб

Каждый шаг в циле производится логическая свертка сигнала со своими синусной и косинусной моделями. Проще говоря подсчитывается количество логических совпадений и несовпадений сигнала с моделями.

Косинусная модель ЛЧМ сигнала

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

Диаграмма моделирования ЛЧМ знакового коррелятора

Программа моделирования снабжена обильными комментариями, а также полезным участком кода позволяющими сформировать HEX код моделей для возможного их использования в ПЛИС при создании знакового квадратурного коррелятора. Меняя частоту дискретизации можно, в режиме реального времени (шутка) оценивать качество свертки по двум параметрам - количеству совпадений в максимуме и качеству диаграммы коррелятора в части выбросов до и после корреляционного максимума.

Изменение частоты дискретизации знакового коррелятора

В данном конкретном случае изменение частоты дискретизации в сторону существенного отклонения от целочисленной кратности верхней частоте ЛЧМ сигнала (79 кГц) приводит к ухудшению качества свертки и уменьшению количества совпадений сигнала с моделями в максимуме. 

Top.Mail.Ru