82 lines
1.9 KiB
Matlab
82 lines
1.9 KiB
Matlab
function [ A, signal_t ] = generate_chirp_mtx(PRF, B, fs, D, gamma, sign_mid)
|
|
% Generates a chirp measurement matrix
|
|
%
|
|
% Usage:
|
|
% [A, signal_t] = generate_chirp_mtx(PRF, B, fs, D, gamma, sign_mid)
|
|
%
|
|
% Inputs:
|
|
% PRF: Pulse Repetition Frequency
|
|
% B: Bandwidth
|
|
% fs: Sampling frequency
|
|
% D: Duty ratio
|
|
% gamma: Compression ratio
|
|
% sign_mid: if sign_mid is 0 means the initial frequency is 0,
|
|
% if sign_mid is 1 means the initial frequency is -B/2,
|
|
%
|
|
% Outputs:
|
|
% A: Chirp measurement matrix
|
|
% signal_t: Transmitting signal
|
|
|
|
|
|
% parameters
|
|
if nargin < 5
|
|
gamma = 0.5;
|
|
end
|
|
if nargin < 6
|
|
sign_mid = 0;
|
|
end
|
|
Tr = 1 / PRF;
|
|
Tp = Tr * D;
|
|
K = B / Tp;
|
|
|
|
% generate_signal
|
|
N = Tr * fs;
|
|
N_high = Tp * fs;
|
|
N_mtx = round(N / gamma);
|
|
|
|
signal_t = zeros(1, N);
|
|
for i = 1: N_high
|
|
tp = i * (1 / fs) - sign_mid * N_high / fs / 2;
|
|
signal_t(1, i) = exp(1j * 2 * pi * 0.5 * K * tp .^ 2);
|
|
end
|
|
|
|
signal_t_2fs = zeros(1, N_mtx);
|
|
for i = 1: round(N_high / gamma)
|
|
tp = (i+1) * (1 / fs / 2) - sign_mid * N_high / fs / 2;
|
|
signal_t_2fs(1, i) = exp(1j * pi * K * tp .^ 2);
|
|
end
|
|
|
|
% generate chirp matrix
|
|
A = generate_matrix_by_signal2fs(transpose(signal_t_2fs));
|
|
|
|
end
|
|
|
|
|
|
%% sub-functions
|
|
% generate chirp matrix when gamma=0.5
|
|
function [ mtx ] = generate_matrix_by_signal2fs(signal)
|
|
|
|
mtx = [];
|
|
l = round(length(signal) / 2);
|
|
temp1 = signal(1:2:end);
|
|
temp2 = circshift(signal(2:2:end), 1);
|
|
if length(temp2) ~= length(temp1)
|
|
temp2 = [temp2; 0];
|
|
end
|
|
|
|
for i = 1:l
|
|
t1 = circshift(temp1, i-1);
|
|
t2 = circshift(temp2, i-1);
|
|
if i - 1 > 0
|
|
t1(1:i - 1,1) = 0;
|
|
end
|
|
if i - 1 > 0
|
|
t2(1:i - 1,1) = 0;
|
|
end
|
|
mtx = [mtx,t1,t2];
|
|
end
|
|
|
|
end
|
|
|
|
|