MATLAB 傅里叶变换怎么理解 下面代码最终计算怎样能够看出频率

2020-05-19 教育 107阅读

时域谱和频域谱是相互对应的


时域的信号长度,决定频域的采样间隔,它们成导数关系


时域中信号有N点,每点间隔dt,所以时域信号长度为N*dt

那么频谱每点的间隔就是1/(N*dt)


傅立叶变换结果和原来信号有相同的点数,所以m=N

又第一点一定对应0频率,所以

频域信号的很坐标就是(0:m-1)/(N*dt)


这句就是根据这个很坐标和频谱c,画出频谱plot((0:m-1)/(N*dt),c);


所以在频谱图上,可以根据峰值的位置的横坐标读出对应的频率


clear all;

N=256;dt=0.02;

n=0:N-1;t=n*dt;

x=sin(2*pi*t);

m=N;

a=zeros(1,m);b=zeros(1,m);

for k=0:m-1

  for ii=0:N-1

      a(k+1)=a(k+1)+2/N*x(ii+1)*cos(2*pi*k*ii/N);

      b(k+1)=b(k+1)+2/N*x(ii+1)*sin(2*pi*k*ii/N);

  end

c(k+1)=sqrt(a(k+1)^2+b(k+1)^2);

end

subplot(211);plot(t,x);title('原始信号'),xlabel('时间/t');

f=(0:m-1)/(N*dt);

subplot(212);plot(f,c);hold on

title('Fourier');xlabel('频率/HZ');ylabel('振幅');

ind=find(c==max(c),1,'first');%寻找最到值的位置

x0=f(ind); %根据位置得到横坐标(频率)

y0=c(ind); %根据位置得到纵坐标(幅度)

plot(x0,y0,'ro');hold off

text(x0+1,y0-0.1,num2str(x0,'频率=%f'));


声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com