查看: 202|回复: 1

[求助] 请教雷达测距频率估计问题

[复制链接]
发表于 2016-10-20 17:46:37 | 显示全部楼层 |阅读模式

登录后才可以下载和分享资料

您需要 登录 才可以下载或查看,没有帐号?注册

x
做Matlab仿真时遇到的问题,380Hz的余弦信号,CZT出来却是381Hz,具体问题描述如下:


给了一个信号频率为380的余弦信号,记f0=380,采样频率fs=25600,采样点数N=512,先做FFT变换找到幅值最大频点为fft_result=400Hz,然后以400为中心,用CZT细化(350Hz,450Hz)间的频谱,细化间隔为1Hz,结果出来幅度最大的频点为381,理论上应该为380才对...


另外,如果我将采样频率25600改成12800,则CZT找出来的幅度最大频点为380,与理论相符,这是为什么....


matlab R2014a 的代码如下
  • clf;
  • close all;
  • clear
  • fs=25600;              %采样频率
  • f0 = 380;             %信号频率
  • N=512;                 %采样点数
  • n=0:N-1;
  • fn=fs*(0:N/2-1)/N;      %F F T对应的频率序列
  • x=cos(2*pi*f0*n/fs);    %信号序列
  • plot(n,x);
  • XK=fft(x,N);                       %进行FFT变换
  • am_xk = abs(XK(1N/2)));         %求FFT变换的幅值
  • [XK_max,fft_i]=max(am_xk);
  • fft_result = fn(fft_i)
  • plot(n(1:end/2),abs(XK(1:(N/2))),'b');
  • % -----CZT变换----------
  • f1=fft_result-fs/N;%细化频率段起点
  • f2=fft_result+fs/N;%细化频率段终点
  • M=100;%细化频段的频点数,(这里其实就是细化精度)
  • w=exp(-j*2*pi*(f2-f1)/(fs*M));%细化频段的跨度(步长),1Hz的步长,(f2-f1)/(fs/N)*2*pi/N/M=(f2-f1)/(fs*M)
  • a=exp(j*2*pi*f1/fs);%细化频段的起始点,这里需要运算一下才能代入czt函数,等于频点对于的序号乘以2*pi/N,或2*pi/N*f1/(fs/N)=2*pi*f1/fs
  • xk=czt(x,M,w,a);
  • h=0:M-1;%细化频点序列
  • czt_f=(f2-f1)/M*h+f1;%细化的频率值
  • a = abs(xk);
  • czt_i = find(a==max(a));  %查找最大值所对应的序号
  • czt_result = czt_f(czt_i)
  • figure;
  • plot(czt_f,a);



回复

使用道具 举报

发表于 2017-4-25 09:34:46 | 显示全部楼层
很久没研究了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表