我是靠谱客的博主 酷炫灰狼,最近开发中收集的这篇文章主要介绍关于矩形窗函数DFT和FFT的笔记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一直想写这个程序,今日终于如尝所愿,非常开心!
矩形窗函数的FT是个什么样子呢?
1、先从理论上分析一下,如图所示(贼简单):在这里插入图片描述
我们在二维坐标系里只能画出信号的幅度谱 |F(w)| ,那么矩形窗的幅度谱是啥形状呢?(本科的时候快把Sa函数的图画烂了):
在这里插入图片描述
这时,我想啊,如果是它的时移信号呢?根据FT的时移性质很容易得到:在这里插入图片描述
但是在画幅度谱时,是要对信号的FT求模滴!所以,幅度谱不会包含时移信息,而是时移信息包含在信号的相位谱中。因此无论时域信号怎么平移,频域的幅度谱时不变的。
到这里就清楚了,只要是矩形窗函数形状的信号,它的FT都是长一样的,都是Sa函数的形状。
2、从实际中分析一下
于是乎,我就写了第一个程序,计算 x(n)=1 (n=0,1,……,N-1),的DFT:

N=16;           % 窗函数长度
x=rectwin(N);   % 产生0到(N-1)的矩形窗函数
n=0:N-1;        % 离散时间变量
X=zeros(1,N);   % 用于储存FT值
subplot(311);stem(n,x,'.'),grid on
xlabel('n'),ylabel('x(n)'),title('原始信号');

for k=0:N-1 % 计算DFT
   for n=0:N-1	 % MATLAB的下表索引从1开始,所以为了得到正确的结果要进行处理
      X(k+1)=X(k+1)+x(n+1)*exp(-1i*2*pi*n*k/N);
   end
end
k=0:N-1;
subplot(312),stem(k,abs(X),'.');grid on
xlabel('k'),ylabel('X(k)'),title('DFT');

y=fft(x,N); % 计算FFT,验证上面的DFT算法
subplot(313);stem(k,abs(y),'.');grid on
xlabel('k');ylabel('X(k)');title('FFT');

结果如下:在这里插入图片描述
我在这里遇到了一个很大的,为什么只有在零点的值是对的,说好的Sa函数呢?FFT和DFT计算结果是一样的,说明我的程序没错啊,但是结果为什么不对?我又手算了一下,结果是一样的,通过欧拉公式很容易证明下面的结论:在这里插入图片描述
这时,我想到了一个问题,FFT或者DFT认为,在没有信号的位置是信号的周期延拓,这样频域的信号才能被离散化,才能用计算机表示。所以在上述程序中,是信号 x(n) 的定义出现了问题。不光需要定义值为1的位置,还需要定义值为0的位置,不然经过周期延拓后,上述程序实际求的是常数1的DFT,当然是一个只有在零点有值的频谱。
3、正确的程序
于是我又写了第二个程序:

fs=1;   	  % Sampling Frequency
ts=1/fs;   	 % Sampling Time
N=16;    	  % Sampling points
L=N*ts;    	 % Length of Signal
t=(0:N-1)*ts;   % Time Vector
t0=0; t1=10;    % t1-t0 为脉宽
X=zeros(1,N);   % 用于储存FT值

ut1=stepfun(t,t0);		% 产生阶跃函数
ut2=stepfun(t,t1);
x=ut1-ut2; 		% 产生0-9的窗函数
subplot(311);
stem(t,x);grid on
xlabel('n'),ylabel('x(n)'),title('原始信号');

for k=0:N-1 		% 计算DFT
   for n=0:N-1  		% MATLAB的下表索引从1开始,所以为了得到正确的结果要进行处理
      X(k+1)=X(k+1)+x(n+1)*exp(-1i*2*pi*n*k/N);
   end
end
k=0:N-1;
subplot(312),stem(k,abs(X),'.');grid on
xlabel('k'),ylabel('X(k)'),title('DFT');

Uw=fft(x,N);
subplot(313);
stem(k,abs(Uw));grid on
xlabel('k');ylabel('X(k)');title('FFT');

结果如下:在这里插入图片描述
可能画成连续的更好看一些:在这里插入图片描述
终于写完了,结果与想象中的差不多,但是这波长得也忒难看了,为此我增加了采样点数,这样就好看多了。
在这里插入图片描述
4、顺便瞧一瞧脉宽对频谱的影响
a、采样点数N=256,脉宽为10,结果如下:
在这里插入图片描述
b、脉宽为50,结果如下:
在这里插入图片描述
c、脉宽为1,其实就成了冲激函数的DFT,结果如下:在这里插入图片描述
可见,脉宽影响频谱能量的集中程度,脉宽越大,频谱越集中,极限是常函数的频谱,是在零点的一个冲激;脉宽越小,频谱越分散,极限是冲激函数的频谱,是一个白色频谱。
至此,理论与实际结果全部吻合,高兴高兴!

最后

以上就是酷炫灰狼为你收集整理的关于矩形窗函数DFT和FFT的笔记的全部内容,希望文章能够帮你解决关于矩形窗函数DFT和FFT的笔记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部