matlab怎么利用dft对连续信号逼近

 我来答
xiangjuan314
2016-04-14 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.9万
采纳率:0%
帮助的人:2878万
展开全部
所谓信号的谱分析,就是时频域转换,变成数学知识,就是对信号进行傅立叶变换(FT),连续信号与系统的傅立叶变换不便于用计算机进行计算。而在Matlab中的绘图操作,是通过将一些离散的点连接而成。求连续信号的频谱,应用的是离散傅立叶变换(DFT)。

下面这段程序是绘制简单的Sa函数时域和频域图像。
Sa(t)=sin(200t)/200t

对于这个函数我们要说明一点。由傅立叶变换理论知道,若信号持续时间有限长,则其频谱无限宽;若信号频谱有限宽,则其持续时间无限长。因此要对其进行谱分析就必须在时域采样无穷多个点,这又显然不满足DFT变换的要求。从工程实际角度来看,滤除幅度很小的高频成分和截去幅度很小的部分时间信号是允许的,因此这里我们截取(-5≤t≤5)时间段的Sa(t)。下面是程序代码:

Sa.m
Clear
t0=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见说明4
xlabel('频率');
axis([-50,50,0,0.02]);
-------------------------------------------------------------------------------------------
%序列的DFT函数

function[M,m,dfy]=fftseq(m,tz,df)
%m:时域序列
%tz:采样周期
�:变换所要求达到的最低频谱分辨率
%M:变换后的频域序列
�y:实际的频谱分辨率
%fz=1/tz;
if nargin==2 %nargin函数表示函数原参数的个
数,即看有没有要求频谱分辨率

n1=0;
else n1=fz/df; %n1表示满足频谱分辨率的最小采样点数
end
n2=length(m); %n2表示满足频域采样定理(见说明2)的最小采样点数。
n=2^(max(nextpow2(n1),nextpow2(n2)));
%n表示实际采样点数,取n1和n2二者中的大值,而且进行DFT变换时采用Matlab自带的FFT变换函数,因此需要n为2的幂次。Nextpow2()见说明3
M=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变换之后的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式