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