Radar de apertura sintética casero (3) interpretación del código Doppler

En la publicación anterior, después de leer el radar Doppler basado en SDR, puede ver el código DSP de la medición de velocidad Doppler del radar de hardware.

Primero mira esta imagen:

El resultado de la medición del desplazamiento Doppler que necesitamos es la salida del mezclador (Multiplicar conjugado), lo que significa que mientras podamos obtener la salida del mezclador, podemos calcular lo que queremos.

Abra esta imagen nuevamente:

La salida del hardware del mezclador pasa a través de Video Amp1 al canal derecho del audio, y el canal izquierdo del audio es la salida de la fuente de señal de diente de sierra.

Por lo tanto, solo los datos del canal derecho de audio son útiles para la medición de la velocidad Doppler (los datos del canal izquierdo son temporalmente inútiles, pero pueden nadar para los otros dos programas). 

Conociendo esta información, será mucho más conveniente mirar el programa.

 


clear all;
close all;

%read the raw data .wave file here
[Y,FS,NBITS] = wavread('Off of Newton Exit 17.wav');

%constants
c = 3E8; %(m/s) speed of light

%radar parameters
Tp = 0.250; %(s) pulse time
N = Tp*FS; %# of samples per pulse
fc = 2590E6; %(Hz) Center frequency (connected VCO Vtune to +5 for example)
%fc = 2495E6; %(Hz) Center frequency within ISM band (VCO Vtune to +3.2V)

%the input appears to be inverted
s = -1*Y(:,2);
clear Y;

%creat doppler vs. time plot data set here
for ii = 1:round(size(s,1)/N)-1
    sif(ii,:) = s(1+(ii-1)*N:ii*N);
end

%subtract the average DC term here
sif = sif - mean(s);

zpad = 8*N/2;

%doppler vs. time plot:
v = dbv(ifft(sif,zpad,2));
v = v(:,1:size(v,2)/2);
mmax = max(max(v));
%calculate velocity
delta_f = linspace(0, FS/2, size(v,2)); %(Hz)
lambda=c/fc;
velocity = delta_f*lambda/2;
%calculate time
time = linspace(1,Tp*size(v,1),size(v,1)); %(sec)
%plot
imagesc(velocity,time,v-mmax,[-35, 0]);
colorbar;
xlim([0 40]); %limit velocity axis
xlabel('Velocity (m/sec)');
ylabel('time (sec)');

 Al principio, este código lee los datos wav, lee los datos de los dos canales del auricular y los coloca en la matriz Y. Luego, inicialice la luz constante, como la velocidad de la luz y la frecuencia portadora. Lo siguiente es leer los datos del canal derecho de la matriz Y (se puede observar que Y (:, 2) significa que solo se leen los datos de la segunda columna de la matriz), porque el canal izquierdo solo tiene los datos de la fuente de señal de rampa, y el canal derecho Es la salida de datos del mezclador de hardware. Luego, el desplazamiento de cd también se elimina restando el valor promedio (función media). Estos no son complicados, nada especial, los comentarios en inglés se pueden entender.

El cálculo real está en el gráfico Doppler vs tiempo aquí.

%doppler vs. time plot:
v = dbv(ifft(sif,zpad,2));
v = v(:,1:size(v,2)/2);
mmax = max(max(v));

Lo que se hace aquí es la transformación de Fourier y se calcula la salida de frecuencia de la señal de mezcla, que corresponde al tamaño del desplazamiento de frecuencia Doppler y la velocidad.

Pero, ¿por qué la función usa ifft en lugar de fft?

Recuerdo que se demostró matemáticamente antes que, aunque fft e ifft son un montón de operaciones inversas, el proceso es en realidad el mismo. Dado que este blog no es un artículo académico, no soy serio y positivo. Puedes echar un vistazo al siguiente artículo para comparar los dos cálculos desde el punto de vista del programa. 

https://blog.csdn.net/weixin_42316458/article/details/80462145

  De hecho, uno de los principios de cálculo de IFFT es tomar los datos del dominio de frecuencia (tenga en cuenta que el dominio de frecuencia es un número complejo) para tomar el número complejo conjugado (invertir la parte imaginaria) y luego realizar la transformación FFT, de modo que la señal del dominio de frecuencia se convierta al dominio del tiempo. Debido a que el resultado de la transformación FFT es un número complejo, el resultado de la transformación FFT del dominio de frecuencia también es un número complejo. En este momento, solo necesita tomar la parte real del número complejo como la señal original en el dominio del tiempo (al mismo tiempo, la parte imaginaria del número complejo ya es muy pequeña. , Simplemente omítalo).

    La función incorporada de MATLAB no explica el motivo de IFFT, así que verifico el IFFT. Se calcula la función IFFT que viene con MATLAB y se invierte la parte imaginaria y luego se calcula FFT. Los dos métodos de cálculo muestran que los resultados son los mismos. Entonces, el cálculo de IFFT es en realidad el mismo que el cálculo de FFT.

Se puede encontrar que ifft y fft son solo diferentes en la parte imaginaria, pero mi fft aquí es solo para señales de sonido reales, no hay una parte imaginaria, por lo que es exactamente lo mismo.

Eche un vistazo al siguiente artículo nuevamente.

https://zhidao.baidu.com/question/280685418.html

El dim in ifft (SLM, [], dim) significa bai dimension du, 1 significa columna y 2 significa fila. El segundo parámetro es [] significa el número de puntos y el número primo de cada columna de la matriz original. Si es ifft (SLM, N, 1), el número de puntos en la columna ifft es N.

Comprender el uso de la función ifft, el primer parámetro son los datos que se utilizarán para el cálculo, el segundo parámetro es el número de puntos FFT (de hecho, es similar al concepto de resolución) y el último es para un grupo específico en la matriz. Los datos se calculan (porque en la matriz original, además de la información de intensidad del sonido en la matriz, hay otra matriz correspondiente al tiempo de muestreo, lo que queremos hacer ahora es la matriz de intensidad del sonido).

En este caso, creo que puedo reemplazar directamente ifft con la función fft para hacer la transformada de Fourier.

%doppler vs. time plot:
%v = dbv(ifft(sif,zpad,2));
v = dbv(fft(sif,zpad,2));
v = v(:,1:size(v,2)/2);
mmax = max(max(v));

Este es el resultado del cálculo Se puede ver que es consistente con la salida del programa de medición de velocidad original en el primer texto.

 El dbv en esta sección del programa se implementa en el programa dbv.m, pero el valor se convierte a decibelios, que es relativamente simple y no se ampliará en detalle.

La siguiente sección de cálculo también es más importante, que consiste en convertir el cambio de frecuencia Doppler en velocidad.

%calculate velocity
delta_f = linspace(0, FS/2, size(v,2)); %(Hz)
lambda=c/fc;
velocity = delta_f*lambda/2;

Continúe consultando este blog de Sohu 

https://www.sohu.com/a/286298900_819029

Según la fórmula, el resultado de la velocidad de la velocimetría Doppler es igual al tamaño del cambio de frecuencia Doppler multiplicado por la longitud de onda dividida por 2.

Aquí la longitud de onda es la frecuencia de radio real, que es la frecuencia portadora.

Esto también está escrito en el código de matlab. Velocity = delta_f * lamda / 2

Como para delta_f se calcula a partir de la v anterior, v solo representa la posición en la matriz fft, y el valor correspondiente a la matriz [0, FS / 2] debe ser el cambio de frecuencia real.

También se puede ver desde aquí que delta_f no excederá FS / 2, y FS es la frecuencia de muestreo del archivo de sonido, que depende de la frecuencia de muestreo de la tarjeta de sonido. Si la frecuencia de muestreo de la tarjeta de sonido no es lo suficientemente alta, no podrá distinguir los objetos que se mueven rápidamente.

 

 Otro punto importante es:

En este experimento de medición de velocidad, el primero es ajustar la fuente de señal al modo CW, es decir, el radar de hardware utiliza una fuente de señal de frecuencia fija en lugar de rampa cuando mide la velocidad, de modo que no envía señales chirp sino radar de velocidad SDR. La señal es la misma.

La fuente de la señal debe cambiarse para la medición de rango y velocidad; hablaremos de ello en detalle en el próximo artículo sobre rango. 

 

Supongo que te gusta

Origin blog.csdn.net/shukebeta008/article/details/108380890
Recomendado
Clasificación