频谱细化(ZOOMFFT)的matlab算法程序(频谱图怎么画例题)

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算法程序(频谱图怎么画例题)

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

上一篇 2023-05-20 13:42:30
下一篇 2023-05-20 13:43:48

猜你喜欢

联系我们

在线咨询: QQ交谈

邮件:362039258#qq.com(把#换成@)

工作时间:周一至周五,10:30-16:30,节假日休息。