利用FFT计算信号的频谱并与信号的真实频谱的抽样比较。
脚本文件T2F.m定义了函数T2F,计算信号的傅立叶变换。
function [f,sf]= T2F(t,st)
%This is a function using the FFT function to calculate a signal's Fourier
%Translation
%Input is the time and the signal vectors,the length of time must greater
%than 2
%Output is the frequency and the signal spectrum
dt = t(2)-t(1);
T=t(end);
df = 1/T;
N = length(st);
f=-N/2*df:df:N/2*df-df;
sf = fft(st);
sf = T/N*fftshift(sf);
脚本文件F2T.m定义了函数F2T,计算信号的反傅立叶变换。
function [t st]=F2T(f,sf)
%This function calculate the time signal using ifft function for the input
%signal's spectrum
df = f(2)-f(1);
Fmx = ( f(end)-f(1) +df);
dt = 1/Fmx;
N = length(sf);
T = dt*N;
%t=-T/2:dt:T/2-dt;
t = 0:dt:T-dt;
sff = fftshift(sf);
st = Fmx*ifft(sff);
另写脚本文件fb_spec.m如下:
%方波的傅氏变换, fb_spec.m
clear all;close all;
T=1;
N_sample = 128;
dt=T/N_sample;
t=0:dt:T-dt;
st=[ones(1,N_sample/2), -ones(1,N_sample/2)]; %方波一个周期
subplot(211);
plot(t,st);短时傅里叶变换matlab程序
axis([0 1 -2 2]);
xlabel('t'); ylabel('s(t)');
subplot(212);
[f sf]=T2F(t,st); %方波频谱
plot(f,abs(sf)); hold on;
axis([-10 10 0 1]);
xlabel('f');ylabel('|S(f)|');
%根据傅氏变换计算得到的信号频谱相应位置的抽样值
sff= T^2*j*pi*f*0.5.*exp(-j*2*pi*f*T).*sinc(f*T*0.5).*sinc(f*T*0.5);
plot(f,abs(sff),'r-')
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论