matlab dft连续时间信号频谱分析,matlab怎么利用dft对连续信号逼近

所谓信号的谱分析,就是时频域转换,变成数学知识,就是对信号进行傅立叶变换(FT),连续信号与系统的傅立叶变换不便于用计算机进行计算。而在Matlab中的绘图操作,是通过将一些离散的点连接而成。求连续信号的频谱,应用的是离散傅立叶变换(DFT)。

下面这段程序是绘制简单的Sa函数时域和频域图像。Sa(t)=sin(200t)/200t对于这个函数我们要说明一点。由傅立叶变换理论知道,若信号持续时间有限长,则其频谱无限宽;若信号频谱有限宽,则其持续时间无限长。因此要对其进行谱分析就必须在时域采样无穷多个点,这又显然不满足DFT变换的要求。

从工程实际角度来看,滤除幅度很小的高频成分和截去幅度很小的部分时间信号是允许的,因此这里我们截取(-5≤t≤5)时间段的Sa(t)。下面是程序代码:Sa。mCleart0=10;%定义时间长度10s,即(-5≤t≤5)ts=0。001;fs=1/ts;%定义采样周期、采样频率df=0。

5;%定义频谱分辨率(见说明1)。t=[-t0/2:ts:t0/2];%定义时间序列--------------------------------------------------------------------------------------------------%定义函数Sa(t):x=sin(200*t);m=x。

/(200*t);w=t0/(2*ts)+1;%由于sin(t)/t在t=0时Matlab会得出值NaN,所以需要加以修正。m(w)=1;---------------------------------------------------------------------------------------------------?T变换:[M,mn,dfy]=fftseq(m,ts,df);%对序列m进行DFT,fftseq()为自定义函数,代码在下面。

M=M/fs;%频率缩放f=[0:dfy:dfy*length(mn)-dfy]-fs/2;%定义频率轴,将频谱搬移到0频附近。----------------------------------------------------------------------------------------------------%绘图:pause;subplot(2,1,1);plot(t,m);xlabel('时间');axis([-0。

15,0。15,-0。5,2]);subplot(2,1,2);plot(f,abs(fftshift(M)));?tshift见说明4xlabel('频率');axis([-50,50,0,0。02]);-------------------------------------------------------------------------------------------%序列的DFT函数function[M,m,dfy]=fftseq(m,tz,df)%m:时域序列%tz:采样周期?:变换所要求达到的最低频谱分辨率%M:变换后的频域序列?y:实际的频谱分辨率%fz=1/tz;ifnargin==2%nargin函数表示函数原参数的个数,即看有没有要求频谱分辨率n1=0;elsen1=fz/df;%n1表示满足频谱分辨率的最小采样点数endn2=length(m);%n2表示满足频域采样定理(见说明2)的最小采样点数。

n=2^(max(nextpow2(n1),nextpow2(n2)));%n表示实际采样点数,取n1和n2二者中的大值,而且进行DFT变换时采用Matlab自带的FFT变换函数,因此需要n为2的幂次。Nextpow2()见说明3M=fft(m,n);dfy=fz/length(M);%实际的频谱分辨率=采样频率fz/实际采样点数length从图中可以看出,在频率函数的拐角处有细微的波动,这是因为我们一开始说的,截取(-5≤t≤5)时间段做DFT产生的原因。

说明1:频谱分辨力----谱分析中能够分辨的两个频谱分量的最小间隔。N点DFT就是对信号的频谱在[0-fs](fs指采样频率)上的N点等间隔采样,那么频谱分辨率df=fs/N。说明2:频域采样定理----如果序列时域x(n)的长度为M,则只有当频域采样点数N≥M时,才可由频域采样X(k)恢复原序列x(n),否则产生时域混叠现象。

说明3:nextpow2(x)----取大于并最接近x的2次幂。说明4:matlab中的fftshift的功能是零频移到频谱中心,其实就是将一个数组的前一半和后一半对调。具体点说,做n(n为偶数)点FFT不用FFTSHIFT时,第1点对应的模拟频率是零频,第2点是Fs/n,第n/2+1点是Fs/2,第n点是Fs(n-1)/n。

用FFTSHIFT后,将Fs/2到Fs(n-1)/n的频点,也就是第n/2+1点到第n点搬移到第1到第n/2点,将第1点到第n/2点搬移到第n/2+1到第n点。所以原来的第1点(模拟频率是零频)搬移到第n/2+1点。说晕了吧,看下面两幅图就明白了,前一个是没有进行fftshift变换的,后一个是进行fftshift变换之后的。

全部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值