【雷达通信】基于matlab多普勒连续波测速【含Matlab源码 642期】

一、简介

1 多普勒效应
多普勒效应在我们日常生活中有很多,比如当一辆救护车迎面驶来的时候,听到声音比原来高;而车离去的时候声音的音高比原来低。
这个效应是为纪念奥地利物理学家及数学家克里斯琴·约翰·多普勒(Christian Johann Doppler)而命名的,他于1842年首先提出了这一理论。据说是因为有一次一列火车从他身旁经过,他发现火车从远而近时汽笛声变响,音调变尖,而火车从近而远时汽笛声变弱,音调变低。他觉得很有意思,于是他就对这个现象去深入研究,从而提出了多普勒效应。
多普勒效应的主要内容为物体辐射的波长因为波源和观测者的相对运动而产生变化。在运动的波源前面,波被压缩,波长变得较短,频率变得较高(蓝移 blue shift);在运动的波源后面时,会产生相反的效应。波长变得较长,频率变得较低(红移 red shift);波源的速度越高,所产生的效应越大。根据波红(蓝)移的程度,可以计算出波源循着观测方向运动的速度。

2 卫星导航中的多普勒效应
在这里插入图片描述
3 多普勒定速
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、源代码


AI = ('winsound');   
%2. Add channels - Add one channel to AI. chan = addchannel(AI,1);   
%3. Configure property values - Assign values to the basic setup properties, and  
%create the variables blocksize and Fs, which are used for subsequent analysis.  
%The actual sampling rate is retrieved since it may be set by the engine to a  
%value that differs from the specified value.  
%set(AI,'SampleRate',8000)                             
% 设置采样速率为8000Hz 
ActualRate = get(AI,'SampleRate');                    
% 从AI中获取实际采样速率 
set(AI,'TriggerChannel',chan)                         
% 设置触发通道 
set(AI,'TriggerType','software');                    
% 设置触发类型  
set(AI,'Triggercondition','rising');                  
% 设置为电压上升至某值后触发 
set(AI,'TriggerConditionValue',0.013);                
% 设置触发电压值 
set(AI, 'TriggerDelay', -1);                          
% 设置触发时延  
set(AI, 'TriggerDelayUnits', 'seconds');              
% 设置触发时延的单位 
set(AI,'timeout',2)                                   
% 定义超时值 
Fs = ActualRate;                                      
% 设置采样速率   
clear data1;  
start(AI)                                             
% 开始采样 
try       
[data1,time]=getdata(AI);                         
% 将采样得到的数据保存到data1,采样时间保存到time  
catch time=0;data1=0;      
disp('A timeout occurred.'); 
end
subplot(2,1,1)                                       
% 绘制21列的第1张子图 
plot(time,data1)                                      
% 以时间为横轴,数据为纵轴作图 
xlabel('Time (sec.)')                                 
% 标注横坐标 
ylabel('Signal Level (Volts)')                       
% 标注纵坐标 
grid on                                               
% 添加网格
% 对滤波处理后的数据作FFT频谱分析,并将结果在第二张子图上作图表示,加上横纵坐标和标题  
[f,mag] = daqdocfft(data1,Fs,blocksize);              % 此函数为MATLAB自带   
%MIT IAP Radar Course 2011
%Resource: Build a Small Radar System Capable of Sensing Range, Doppler, 
%and Synthetic Aperture Radar Imaging 
%
%Gregory L. Charvat

%Process Doppler vs. Time Intensity (DTI) plot

%NOTE: set Vtune to 3.2V to stay within ISM band and change fc to frequency
%below

clear all;
close all;

%read the raw data .wave file here
[Y,FS] = audioread('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 / Fs 是采样率,N表示在一个脉冲时间采了多少个点
fc = 2544.2E6; %(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); % 矩阵Y的第二列都乘-1,得到的结果只有Y的第二列乘以-1,s是个列矩阵
%clear Y;

%figure;
%subplot(1,2,2)
%plot(Y(:,2));


%creat doppler vs. time plot data set here
%Temp1 = round(size(s,1)/N)-1;       % 除以 N 计算需要多少个脉冲时间
for ii = 1:round(size(s,1)/N)-1     % size(s,1)返回s的行数,round四舍五入,s的行数除以N之后,四舍五入再减1
    sif(ii,:) = s(1+(ii-1)*N:ii*N); % 将 s 中的 1+(ii-1*N 到 ii*N 行第一个元素(s为列向量),放到 sif 的第ii行 ,一个脉冲时间的数据放一行
end

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

zpad = 8*N/2;% ifft的计算长度

%doppler vs. time plot:
v = dbv(fft(sif,zpad,2));% 按行进行ifft,列数变成了sif的4%Temp2 = v;
v = v(:,1:size(v,2)/2);   % size(v,2)返回 v 的列数,v 的列数除以2, v 的122050(size(v,2)/2)列,构成新的 v
mmax = max(max(v));    % 取出 v 里面最大的元素,第一次行最大元素,第二次所有元素中最大的元素
%calculate velocity
 
subplot(1,2,1)
imagesc(velocity,time,v-mmax,[-35, 0]);  %四个参数??
colorbar;
xlim([0 40]); %limit velocity axis
 
ylabel('time (sec)');

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ 1564658423

猜你喜欢

转载自blog.csdn.net/TIQCmatlab/article/details/115292689