clear;
close
all
clc;
format
long
%%初值设置
%发送端设置
sendfbandwidth =4.992e9;
%发送信号的带宽
sendtimeT =6.3068e-04;
%发送信号的周期,斜坡时间
schirp = sendfbandwidth/sendtimeT;
%chirp信号的斜率
%接收端设置
t=0.31e-6;
%每个数据间隔
N =2016;
%数据量是2016个
T = t*N;
%采样周期6.2496e-4
Fs =1/t;
%采样频率
%其他设置
c =299792458;
%光速
D =128;
fftN =4096;
%%
datafre1= readtxtdata(
1215120.txt
);
%datafre1= readdata(1.7.111102GJAING.log);
datafre=datafre1(:,3);
%%数据去除直流分量
%[tcoms,tcols]= size(datafre);
tsignal1= datafre-mean(datafre);
figure(1);subplot(2,1,1)
plot(tsignal1(:,1));title(
原始信号去除直流分量
);grid
on
xlabel(
时间轴
);ylabel(
幅值轴
);
%频率寻找最大值
%%高通滤波
Hd = hpasshamming;
%低通滤波器设计
[b,a]=tf(Hd);
%得到传递函数
tsignal2=filter(b,a,tsignal1);
%滤波后的时域数据
%%
[~, signalfabs]= signalfft(tsignal2);
%fft
[~,fpeakloc]= max(signalfabs(1:fftN/2));
fpeak =(fpeakloc-1)* Fs/fftN;
%得到中频信号
fftn =(0:fftN/2-1)* Fs/fftN;
figure(1);subplot(2,1,2)
plot(fftn ,signalfabs(1:fftN/2));title(
原始数据频谱
);xlabel(
频率Hz
);ylabel(
幅值
);
grid
on
R =(c*T .*fpeak)./(2*sendfbandwidth )*1000;
%直接计算的距离值
%%移频
f0=fpeak;
B = Fs/D;
fl=f0-B/2;
%低频截止频率
fh=f0+B/2;
%高频截止频率
%B=fh-fl;%带宽
%
N = length(datafre);
n=(0:N-1);
signalshift=datafre.*exp(-1i*n*2*pi*(fpeakloc-1)/fftN);
%移频
%对比
fn =(Fs/fftN)*(-fftN/2:fftN/2-1);
[~, xsignalfabs]= signalfftshift(signalshift);
%频移后数据fft
[~, signalfabsyuanshi]= signalfftshift(datafre);
%原始数据fft
figure(2);subplot(2,2,1);
plot(fn,signalfabsyuanshi);grid
on
figure(2);subplot(2,2,2);
plot(fn ,xsignalfabs);
xlabel(
频率/Hz
);ylabel(
fft后幅值
);title(
频移后信号fft波形
);
grid
on
%%低通滤波
Hd = lowhamming(B/2);
%低通滤波器设计
[b,a]=tf(Hd);
%得到传递函数
tsignalfil =filter(b,a,signalshift);
%滤波后的时域数据
[~, xsignalshiftabs]= signalfftshift(tsignalfil);
%fft
figure(2);subplot(2,2,[34]);
plot(fn,xsignalshiftabs);
xlabel(
频率/Hz
);ylabel(
fft后幅值
);title(
频移滤波后信号fft波形
);
grid
on
%%
yd=tsignalfil(1:D-1:N);
%重新采样
%%
%对于复频率的数据则是从尾开始按反向排列存放在数据的后半部分。如果用户只需要分析细化FFT的正频率
%域的,需要将细化FFT结果在(NFFT*3/4+1)~NFFT的数据赋值到一个新向量1~NFFT*1/4的单元,
%将排列在1~NFFT/4的数据赋值到这个新向量的(NFFT/4+1)~NFFT/2的单元,于是便可得到频率从0到
%折叠频率的正频率域的细化FFT变换结果。
[yN,~]= size(yd);
zer0= zeros(1,fftN/2-yN);
% ydata =[yd; zer0];
yresamplingmag=abs(fft(yd,fftN))/fftN*2;
zn=zeros(fftN/2,1);
zn(1:fftN/4)=yresamplingmag(fftN*0.75+1:fftN);
zn(fftN/4+1:fftN/2)=yresamplingmag(1:fftN/4);
zf =(fpeak+(-fftN/4:fftN/4-1)*(Fs/D/fftN));
%直接fft和zoomfft对比图
figure(3);subplot(2,1,1);
stem(zf,zn,
MarkerEdgeColor
red
);
%做频谱图
title(
频谱细化后fft图
); grid
on
subplot(2,1,2);
stem(fftn,signalfabs(1:fftN/2),
filled
);
hold
on
plot(fftn,signalfabs(1:fftN/2));
xlabel(
频率(Hz)
);ylabel(
幅值
);title(
原始信号频谱图
);
set(gca,
Xlim
[zf(1) zf(end)]);
grid
on
%%求距离
[~,zpeakloc]= max(zn);
%计算目标回波频率最大值
zfpeak =zf(1)+(zpeakloc-1)*(Fs/D/fftN);
%得出最大值频率点
Targetdistance = zfpeak*c/2/schirp*1000;
tr =[R Targetdistance ];
figure(4)
stem(tr);grid
on
hold
on
plot(tr);
set(gca,
XLim
[-13])
% legend(yuanshi,zoomfft1);
%axis([05018002000]);
% targetdistance2= peakfre1*c/2/schirp
delr = Targetdistance – R;

免责声明:文章内容来自互联网,本站仅提供信息存储空间服务,真实性请自行鉴别,本站不承担任何责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:频谱细化(ZOOMFFT)的matlab算法程序(频谱图怎么画例题) https://www.bxbdf.com/a/70070.shtml