Range estimation for radar system.
13 次查看(过去 30 天)
显示 更早的评论
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.
0 个评论
采纳的回答
Rangesh
2023-11-29
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Transmitters and Receivers 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!