DCA1000 雷达数据处理 - Matlab 代码示例
"clear""all"\n"data"="readDCA1000"("'matlab_lab_adc_data.bin'");\n\n"frame_cnt"="size"("data","2")/"256"/"128"; \n"lightSpeed" ="300000000"; \n"Sample_Rate_Hz" ="10000000"; \n "Slope_Hz" ="29982000000000"; \n"Chirp_repetition_period_sec" ="0.00016"; \n"Start_Frequency_Hz" ="77000000000"; \n "Samples_Per_Chirp" ="540"; "Chirps_Per_Frame" ="128"; "% chris: no of loops in framecfg"\n\n"Tx_antennas" ="1"; "lambda" ="lightSpeed"/"Start_Frequency_Hz"; \n"fftSize1D" ="256"; "fftSize2D" ="128"; "range_step" = ("Sample_Rate_Hz"/"Samples_Per_Chirp")/("Slope_Hz")* ("lightSpeed"/"2")("1e9"/"fftSize1D"); \n"vel_step" = ("1"/ ("Chirp_repetition_period_sec""Tx_antennas"))("lambda"/"2")("1e3"/"fftSize2D"); "vel_axis" = (-"fftSize2D"/"2":"fftSize2D"/"2"-"1")"vel_step"; \n"range_axis" = ("0":"fftSize1D"-"1")"range_step"; "time_axis" = ("0":"fftSize1D"-"1")/"Sample_Rate_Hz"; "for" "i" ="1":"size"("data","2")/"256"\n "recv1_data"("1":"256","i") = "data"("1",("i"-"1")"256"+"1":"i""256");\n"end"\n"for" "i"="1":"frame_cnt"\n "recv1_frame_data"("i",:,:) = "recv1_data"(:,("i"-"1")"Chirps_Per_Frame"+"1":"i""Chirps_Per_Frame");\n"end"\n"window_1D" = "hann"("256");\n"radar_data_1dFFT" = "fft"("squeeze"("recv1_frame_data"("1",:,:))."window_1D", "fftSize1D"); \n\n"radar_data_2dFFT" = "fft"("radar_data_1dFFT","Chirps_Per_Frame","2");\n"radar_data_2dFFT_fftshift" = "fftshift"("radar_data_2dFFT","2");\n"% surf(vel_axis, range_axis, abs(radar_data_2dFFT_fftshift));"\n"imagesc"("vel_axis", "range_axis", "10""log10"("abs"("radar_data_2dFFT_fftshift")+"1"));\n"view"("0","90")\n"ylabel"("'range (meters)'"); \n"xlabel"("'velocity (metersc)'"); \n"zlabel"("'2D FFT Output (dB)'");\n"title"("'2D FFT amplitude profile'")\n \n "Tc" ="Chirp_repetition_period_sec"; "Tf" = "Chirp_repetition_period_sec""Chirps_Per_Frame" ; \n "vel_resolution" = "lambda" / ("2" "Tf"); "%input a formula here;" "disp"( "vel_resolution");\n \n "max_vel" = "lambda"/("4"* "Tc"); "%input a formula here;" "disp"( "max_vel");%%% This script is used to read the binary file produced by the DCA1000 %%% and Mmwave Studio %%% Command to run in Matlab GUI -\n"readDCA1000"("'matlab_lab_adc_data.bin'") "function" ["retVal" ] = "readDCA1000"("fileName") %% global variables % change based on sensor config "numADCSamples" = "256"; % number of ADC samples per chirp "numADCBits" = "16"; % number of ADC bits per sample "numRX" = "4"; % number of receivers "numLanes" = "2"; % do not change. number of lanes is always 2 "isReal" = "0"; % set to 1 if real only data, 0 if complex data0 %% read file % read .bin file "fid" = "fopen"("fileName",'r'"); "adcData" = "fread"("fid", 'int16'"); % if 12 or 14 bits ADC per sample compensate for sign extension "if" "numADCBits" ~= "16"\n"l_max" = "2"^("numADCBits"-"1")-"1"; "adcData"("adcData" > "l_max") = "adcData"("adcData" > "l_max") - "2"^"numADCBits"; "end"\n"fclose"("fid"); "fileSize" = "size"("adcData", "1");\n% real data reshape, filesize = numADCSamplesnumChirps "if" "isReal"\n"numChirps" = "fileSize"/"numADCSamples"/"numRX"; "LVDS" = "zeros"("1", "fileSize");\n%create column for each chirp "LVDS" = "reshape"("adcData", "numADCSamples""numRX", "numChirps");\n%each row is data from one chirp "LVDS" = "LVDS".'; "else"\n% for complex data % filesize = 2 * numADCSamplesnumChirps "numChirps" = "fileSize"/"2"/"numADCSamples"/"numRX"; "LVDS" = "zeros"("1", "fileSize"/"2");\n%combine real and imaginary part into complex data %read in file: 2I is followed by 2Q "counter" = "1"; "for" "i"="1":"4":"fileSize"-"1"\n"LVDS"("1","counter") = "adcData"("i") + "sqrt"(-"1")"adcData"("i"+"2"); "LVDS"("1","counter"+"1") = "adcData"("i"+"1")+"sqrt"(-"1")"adcData"("i"+"3"); "counter" = "counter" + "2"; "end"\n% create column for each chirp "LVDS" = "reshape"("LVDS", "numADCSamples""numRX", "numChirps");\n%each row is data from one chirp "LVDS" = "LVDS".'; "end"\n%organize data per RX "adcData" = "zeros"("numRX","numChirps""numADCSamples");\n"for" "row" = "1":"numRX"\n"for" "i" = "1": "numChirps"\n"adcData"("row", ("i"-"1")"numADCSamples"+"1":"i""numADCSamples") = "LVDS"("i", ("row"-"1")"numADCSamples"+"1":"row"*"numADCSamples");\n"end"\n"end"\n% return receiver data "retVal" = "adcData"; "end"\n
原文地址: https://www.cveoy.top/t/topic/pyLw 著作权归作者所有。请勿转载和采集!