Range estimation for radar system.

14 views (last 30 days)
I am writting a code on range estimation of radar syatem. I an sending a data frim transmitter and receive it after some delay. Now I write it as
% Parameters
fs = 1e6; % Sampling frequency (1 MHz)
T = 1e-3; % Pulse duration (1 ms)
fc = 10e6; % Carrier frequency (10 MHz)
PRI = 10e-3; % Pulse repetition interval (10 ms)
pulse_width = 1e4; % Pulse width (1 us)
c = 3e8; % Speed of light (m/s)
target_range1 = 200;
target_range2 = 100;
target_rcs = 1; % Target radar cross-section (RCS) in square meters
SNR_dB = 20; % Signal-to-noise ratio (in dB)
% Create a time vector for one pulse
num_symbols = 100; % Number of QAM symbols
snr_dB = 20; % Signal-to-noise ratio in dB
sigma_x=1;
% Generate QAM symbols
qam_order = 32; % 16-QAM
qam_symbols = randi([0, qam_order-1],1, num_symbols);
transmitted_pulse= qam_symbols;
% Simulate received signal with target echo and noise
target_delay1 = 2 * target_range1 / c; % Two-way propagation delay
target_delay2 = 2 * target_range2 / c; % Two-way propagation delay
% received_pulse = zeros(1, length(t_pulse));
% Time delay in samples
Fs = 1 / (target_delay1 + (1 / fc)); % Sampling frequency based on the delay and carrier frequency
time_delay_samples = round(target_delay1 * Fs); % Round to the nearest integer for discrete time
shifted_signal = circshift(transmitted_pulse, time_delay_samples);
% Add Gaussian noise to the received signal to achieve the desired SNR
SNR_linear = 10^(SNR_dB / 10); % Convert SNR from dB to linear scale
noise_power = var(shifted_signal) / SNR_linear; % Calculate noise power
noise = sqrt(noise_power) .* randn(1, length(shifted_signal)); % Generate noise
received_signal_with_noise = shifted_signal + noise;
% data indexing
transmitted_pulse1=reshape(transmitted_pulse,1,[]);
shifted_signal1=reshape(shifted_signal,1,[]);
received_signal_with_noise1=reshape(received_signal_with_noise,1,[]);
% Matched filtering (correlation) to detect target
correlation_result = conv(received_signal_with_noise1, fliplr(transmitted_pulse1));
threshold = max(correlation_result) * 0.5; % Adjust the threshold as needed
% Find target detection point
detection_index = find(correlation_result > threshold, 1);
del_t=detection_index/fs; %detection index*sampling frequency
% Calculate detected target range
detected_target_range = c * del_t /2;
% Display results
fprintf('Detected Target Range: %.2f meters\n', detected_target_range);
Here I am using match filter for detection. The code is running but not giving the proper range estimation. Kindly help me to to understand where I am missing.

Accepted Answer

Rangesh
Rangesh on 29 Nov 2023
Hi Soumita,
I understand that you are seeking to determine the correct value for the range.
Based on my understanding, it seems that there is no doppler shift present in the problem. Therefore, there is no need to calculate the frequency (Fs). Given that the sampling frequency (fs) is 1e6, the resolution of the detected range would be 300m for a delay in the received signal.
To find the target detection point, you can use the following:
[value, index] = max (correlation result)
If there is no delay, the matched filter would obtain a peak at the middle index, which in this case would be 100. However, with a delay, the peak would shift. So, we would obtain a peak at 101. Knowing that the time_delay is 1 (101-100), the detected target range can be calculated using the below mentioned formula:
c * time_delay / (2 * fs).
For a better understanding of radar signals, you can refer to the following link:
I hope this resolves your query.
Thanks,
Rangesh.
  1 Comment
SOUMITA NASKAR
SOUMITA NASKAR on 4 Dec 2023
Thank you for replying and your valuable suggestion.

Sign in to comment.

More Answers (0)

Categories

Find more on Detection, Range and Doppler Estimation in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!