概述
一直想写这个程序,今日终于如尝所愿,非常开心!
矩形窗函数的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的笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复