离散傅里叶变换和快速傅里叶变换Word格式文档下载.docx
《离散傅里叶变换和快速傅里叶变换Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《离散傅里叶变换和快速傅里叶变换Word格式文档下载.docx(36页珍藏版)》请在冰点文库上搜索。
【解答】
思路:
这是的变换,按照定义编写的M文件即可。
考虑到自变量Ω是连续的,为了方便计算机计算,计算时只取三个周期[-2π,4π]中均匀的1000个点用于绘图。
理论计算的各序列表达式,请见本题的分析。
M文件源代码(我的源文件不支持中文注释,抱歉):
(n12)
a&
.
0:
2*1000:
2*.
((w))X.
12
(1+1)*((-1)*j*w*i).
(X).
(X)().
(1,2,1);
(,'
r'
);
('
\'
)('
'
);
(1,2,2);
b'
()'
命令窗口中的运行及其结果(理论计算的各序列表达式,请见本题的分析):
第
(1)小题
>
(-2:
2);
1.^n;
(-2,2);
图3.1.1在[-2π,4π]范围内3个周期的幅度谱和相位谱(弧度制)
第
(2)小题
(0:
10);
2.^n;
(0,10);
图3.1.2在[-2π,4π]范围内3个周期的幅度谱和相位谱(弧度制)
【分析】
对于第
(1)小题,由于序列x(n)只在有限区间(-2,-1,-,1,2)上为1,所以是离散非周期的信号。
它的幅度频谱相应地应该是周期连续信号。
事实上,我们可计算出它的表达式:
,可见幅度频谱拥有主极大和次极大,两个主极大间有|5-14个极小,即有3个次级大。
而对于它的相位频谱,则是周期性地在-π、0、π之间震荡。
对于第
(2)小题,由于是离散非周期的信号。
而它的表达式:
,因此主极大之间只有|0-11个极小,不存在次级大。
而对于它的相位频谱,则是在一个长为2π的周期内有|11-110次振荡。
而由的定义可知,频谱都是以2π为周期向两边无限延伸的。
由于是连续谱,对于计算机处理来说特别困难,因此我们才需要离散信号的频谱也离散,由此构造出(以及为加速计算的)。
3.2已知有限长序列x(n)={8,7,9,5,1,7,9,5},试分别采用和求其离散傅里叶变换X(k)的幅度、相位图。
按照定义编写M文件即可。
M文件源代码:
i)函数:
()
a&
(01)k.
((k))X.
01
(1)*((-1)*j*2*k**i).
.'
’’,18);
k'
*'
)基2函数
a2.
(01);
j1=0;
1
i<
j1+1
(j1+1);
x(j1+1)(i);
x(i);
2;
k<
1
j11;
0;
;
k>
1;
2"
"
1
2^
(1).
2=1;
j1=1(2*n)
(2-1)*2^();
(j*(-2)**)"
"
.
();
x()()*;
22+1;
1+2*;
(x).
(x)().
('
命令窗口中的运行及其结果:
:
[8,7,9,5,1,7,9,5];
(8);
图3.2.1的幅度谱和相位谱(弧度制)
图3.2.2算法的幅度谱和相位谱(弧度制)
图3.2.1的幅度谱和相位谱(相位是弧度制的)
是离散信号、离散频谱之间的映射。
在这里我们可以看到序列的频谱也被离散化。
事实上,我们可以循着构造的方法验证这个频谱:
首先,将序列做8周期延拓,成为离散周期信号。
然后利用计算得到延拓后的频谱:
,从而取的主值区间得到,与图一致。
因此计算正确。
而对于,我们可以看到它给出和一样的结果,说明了算法就是的一个等价形式。
不过,由于序列不够长,在计算速度上的优越性尚未凸显。
3.3已知连续时间信号x(t)=38πt,X(ω)=
,该信号从0开始以采样周期0.1s进行采样得到序列x(n),试选择合适的采样点数,分别采用和求其离散傅里叶变换X(k)的幅度、相位图,并将结果与X(k)的幅度、相位图,并将结果与X(ω)相比较。
此题与下一题都是一样的操作,可以在编程时统一用变量g(0或1)来控制是否有白噪声。
这里取0(无白噪声)。
另外,分别取12点、20点、28点采样,以考察采样长度的选择与频谱是否泄漏的关系。
i)采样函数:
3()
a3&
4.
:
;
1:
1;
1i0.Ia.
(i)=3*(8***
(1))*;
1,.Ia.
a
(1)(0).
(1,'
’’,18)('
n'
%
(1),,1.
)和基2函数的代码,请见第3.2节。
不需再新编一个。
12点采样:
3(12,0.1,0)末尾的0表示无噪声。
(12);
图3.3.1进行12点采样得到的序列
图3.3.2的幅度谱和相位谱(弧度制),出现了泄漏
图3.3.3的幅度谱和相位谱(弧度制)。
出现了频谱泄漏。
20点采样:
3(20,0.1,0)末尾的0表示无噪声。
(20);
图3.3.4进行20点采样得到的序列
图3.3.5的幅度谱和相位谱(弧度制)。
频谱无泄漏。
图3.3.6的幅度谱和相位谱(弧度制)。
28点采样:
3(28,0.1,0)末尾的0表示无噪声。
(28);
图3.3.7进行28点采样得到的序列
图3.3.8的幅度谱和相位谱(弧度制)。
再次出现频谱泄漏。
图3.3.9的幅度谱和相位谱(弧度制)。
分别取12点、20点、28点采样,以考察采样长度的选择与频谱是否泄漏之间的关系。
现在与原信号频谱
比较后可以得出如下结论:
图3.3.10原信号的频谱(由两个冲激函数组成)
原信号的频谱是
,在±
8π上各有一强度为3π的谱线,在其余频率上为0。
可见原信号被0.1s采样周期的采样信号离散化之后,谱线以20π为周期重复,并且只在(20k±
8)π(k为整数)处非0。
那么,在20点(采样时间原信号周期的整数倍)中,只有第8根、第12根谱线非0。
而在12点、28点中,由于采样时间不是原信号周期的整数倍,谱线将向两边泄漏。
不过,对比12点采样和28点采样,我们还可以发现,28点采样频谱的主谱线高度是次谱线高度的4倍,儿12点采样频谱的主谱线高度是次谱线高度的3倍。
可见,在无法保证采样时间是信号周期整数倍的情况下,增加采样时间有助于减轻频谱泄漏的程度。
3.4对第3步中所述连续时间信号叠加高斯白噪声信号,重复第3步过程。
此题与上一题都是一样的操作,可以在编程时统一用变量g(0或1)来控制是否有白噪声。
这里取1(有白噪声)。
另外,仍然分别取12点、20点、28点采样,以考察采样长度的选择与频谱是否泄漏的关系。
不需要再新编程序。
可以直接引用上面的函数:
3(),取1,以体现存在白噪声
()
3(12,0.1,1)末尾的1表示有噪声。
图3.4.1进行12点采样得到的含噪声的序列
图3.4.2含噪声序列的幅度谱和相位谱(弧度制)。
图3.4.3含噪声的幅度谱和相位谱(弧度制)。
3(20,0.1,1)末尾的1表示有噪声。
图3.4.4进行20点采样得到的含噪声序列
图3.4.5含噪声的幅度谱和相位谱(弧度制)。
图3.4.6含噪声的幅度谱和相位谱(弧度制)。
3(28,0.1,0)末尾的1表示有噪声。
图3.4.7进行28点采样得到的含噪声序列
图3.4.8含噪声的幅度谱和相位谱(弧度制)。
图3.4.9含噪声的幅度谱和相位谱(弧度制)。
依然分别取12点、20点、28点采样。
仍然与原信号的频谱
(图3.3.10)比较,可以得到结论:
由于叠加了噪声,所以频谱都受到了一定的干扰。
由于白噪声在各个频率的功率相等,因此频谱上各处的干扰也是均匀随机的。
不过,通过对比我们可以发现,20点采样(无噪声时不发生泄漏的采样方法)在存在噪声时,仍然可以明显区分出原信号的谱线。
第二好的是28点采样,因为采样时间较长,即使存在频谱泄漏也能较好地区分原信号的谱线。
而最差的是12点采样,由于噪声的存在和严重的频谱泄漏,它的次谱线与主谱线的高度相差不大,使原信号不明显。
3.5已知序列
,X(k)是x(n)的6点,设
(1)若有限长序列y(n)的6点是
,求y(n)。
(2)若有限长序列w(n)的6点W(k)是
的实部,求w(n)。
(3)若有限长序列q(n)的3点是
,0,1,2,求q(n)。
这是对进行变换后求。
考虑到和定义的对称性,可以在的基础上略加调整既可用于计算。
首先,∵
∴它的6点采样是序列是
值得指出的是,在中,数组的序号是从1开始的(而在信号分析中习惯从0开始),不过我在上面编程时已考虑到这一情况,具体可见实验报告最后的“附录”。
首先生成x(n)的6点,再按照各小题分别转换,最后求相应的。
i)输出x(n)的6点的函数:
X=()
aX.
k.
((k));
X.
(1)*((-1)*j*2*k**i);
.
)算第
(1)小题的Y(k)的函数:
Y=1(X)
a
(1).
1:
6
Y(k)(()*2**(-4*
(1))/6)*X(k);
(1)1.
)算第
(2)小题的W(k)的函数:
W=2(X)
a
(2).
(X)X.
)算第(3)小题的Q(k)的函数:
Q=3(X)
a(3).
(3)
3
Q()(2*);
v)输出的函数:
x=()
(01)n.
((n))x.
(1)*(j*2*k**n);
(x)(x),x.
s().
'
18)('
[4,3,2,1,0,0];
(6);
1(X);
(6)
y=
14
0.0000+0.0000i0.0000+0.0000i4.0000+0.0000i3.0000+0.0000i
%虚部都是0,说明是实数
56
2.0000+0.0000i1.0000-0.0000i%虚部都是0,说明是实数
%事实上,在中,由于数值计算的截断误差,对原复数做乘法后,答案的虚部可能有一极小的量。
答案:
y(n)={0,0,4,3,2,1}
图3.5.1输出的y(n),这是对x(n)的圆周移位。
2(X);
w=
4.0000+0.0000i1.5000+0.0000i1.0000+0.0000i1.0000+0.0000i
1.0000+0.0000i1.5000+0.0000i%虚部都是0,说明是实数;
w(n)={0,0,4,3,2,1}
图3.5.2输出的w(n)。
第(3)小题
3(X);
q=
1.5000-0.0000i-0.1667-0.2887i0.7500-1.2990i0.8333-0.0000i
-0.5000-0.8660i1.0833-1.8764i
这里的答案都是幅值、相位均非0的复数,而教材(实验指导第109页)并未要求作图,这里略去。
答案:
q(n)={1.5,-0.1667-0.2887i,0.7500-1.2990i,0.8333,-0.5000-0.8660i,1.0833-1.8764i}
对原序列进行运算后,可以得到X(k)={10,3.5-4.33i,2.5-0.866i,2,2.5+0.866i,3.5+4.330i}。
第
(1)小题,根据的性质可以判断,对原频谱乘上旋转因子
之后进行得到的y(n),就是对原序列做圆周移位:
第
(2)小题,由于对原频谱取了实部,那么根据的奇偶虚实性知,得到的w(n)也是实数的。
第(3)小题,对原信号进行了尺度变换(“抽取”),导致丢失了一些谱线,使得无法通过得到原来的序列x(n)。
说明频谱记录了原有信号的信息,若频谱发生变化,则对应的时域信号也随之改变。
3.6已知信号
,其中f1=4、f2=4.02、f3=5,采用采样频率为20进行采样,求
(1)当采样长度N分别为512和2048情况下x(t)的幅度频谱;
(2)当采样长度N为32,且增补N个零点、4N个零点、8N个零点、16N个零点情况下x(t)的幅度频谱。
采样是有限且离散的,用(算法)计算频谱,以便得到离散的频谱,并且具有较高速度。
20对应的采样周期0.05s。
i)采样函数(其中表示采样后补零的个数)
6()
a6
1/20;
w1=2**42=2**4.023=2**5;
(1);
(w1**
(1))(w2**
(1))(w3**
(1));
(1):
(p)=0.
)由于只要求显示幅度频谱,所以删去函数中绘制相位频谱的命令,使它的最后部分修改如下:
原来的:
...
k'
'
修改后的:
x5126(512,0);
x20486(2048,0);
(512512);
(20482048);
图3.6.1进行512点采样得到的频谱
图3.6.2进行2048点采样得到的频谱
x32p16(32,32*1);
%32点采样,补零32个,共64个数据点
x32p46(32,32*4);
%32点采样,补零4128个,共160个数据点
x32p86(32,32*8);
%32点采样,补零8256个,共288个数据点
x32p166(32,32*16);
%32点采样,补零16128个,共544个数据点
(32+32*132p1N);
(32+32*432p4N);
(32+32*832p8N);
(32+32*1632p16N);
图3.6.3采样32点,补零32点,共64点的频谱
图3.6.4采样32点,补零4128点,共160点的频谱
图3.6.5采样32点,补零832点,共288点的频谱
图3.6.6采样32点,补零1632点,共544点的频谱
【分析】请注意,题目只要求绘制幅度频谱。
第
(1)小题:
首先,由于采样时间都不是原有信号周期的整数倍,两个采样方式对应的频谱均发生了泄漏。
不过由于2048点采样对应的采样时间较长,它频谱泄漏的程度比512点采样轻。
其次,由于20的2048点采样的频率分辨率为20/2048=0.0098<
0.2,因此放大频谱图之后我们可以看到4、4.02和5对应的谱线,而512点采样的频率分辨率为20/512=0.039>
0.2,因此4和4.02对应的谱线无法区分。
第
(2)小题:
首先,由于采样时间都不是原有信号周期的整数倍,频谱均发生了泄漏。
而且由于采样时间较短,频谱泄漏比第
(1)小题的两个频谱更加严重。
其次,由于都是32点采样,因此实际的频率分辨率较低,无法区分4和4.02对应的谱线。
最后,虽然都是32点采样,但由于补0个数的不同,各频谱谱线间距各不相同。
例如,补零最多的序列一共有544个数据点,因此谱线间距小。
由此还可以得出结论:
数据点个数越多,则频谱越倾向于连续。
可见,当采样时间不是原信号周期整数倍而且采样时间较短时,频谱泄漏相当严重的,所有的频率上都有了幅值即能量,可见当取样信号的样点数取得不够时,原信号所携带的信息就不能被完全取得。
而若将取样信号补零,由图可见信号的能量相应的泄漏到了几乎所有频率上了,这样所得的信号仍然严重失真,因此不能靠将信号补零这样的方法来取得更精确的采样信号。
要想获得不泄漏的频谱,在采样频率不变的前提下,必须使采样时间等于原信号周期的整数倍,或者尽量延长采样时间以减少泄漏。
四、实验体会
4.1关于各个实验的分析,请见第3部分每道题的末尾。
4.2在中,数组的序号是从1开始的,这与信号处理时通常的序号起点(0)不一致。
我在编程充分注意到了这个问题。
4.3由于进行数值计算的过程中存在截断误差,所以最后算得的值并不是准确值。
例如,对一个复数z,即使f(z)的虚部为零,但由于截断误差的存在(特别是z的虚部为无穷小数时),最终f(z)值的虚部可能是一个极小的非零值,从而在显示时出现“零虚部”(例如,2+0.0000i)。
4.4通过利用软件对离散信号的各种变换、以及其快速算法进行计算,使得在实验中比较难以实现的信号分析过程(离散信号的采集和显示都是比较困难的)在计算机计算中实现,证明了理论的正确性,说明仿真计算是一种十分有效的辅助手段。
4.5通过这次实验和上次实验《信号的采集与恢复》我知道了,要想尽量不失真地取得一个信号的频谱(低混叠、低泄漏),应该尽量满足以下条件:
(1)使用的开关函数要尽量接近理想冲激串;
(2)采样频率要高于原始信号的奈奎斯特频率。
对于频谱不受限的信号,为了避免频谱混叠,应该使用低通滤波器进行滤波;
(3)对于频带不受限的信号,抗混叠滤波器要尽量接近理想滤波器。
(4)采样的持续时间最好能够是原信号周期的整数倍,一避免频谱泄漏。
而当不知道原信号的周期(或者周期不稳定)时,就要通过延长采样时间来尽量减少泄漏,从而突出原信号的谱线。
(5)当信号混有白噪声时,就更应注意减少频谱的泄漏和混叠,否则信号分析更加困难,甚至可能会使原信号被误差“淹没”。
(6)若原信号有多个频率成分,应该尽量提高采样的频率分辨率,以区分出更细微的频率差异。
4.6在实验中,在计算2048点采样时,初步体会到了算法的优越性。
在我的计算机上,算法的确比原始的更快。
不过由于采样点数较少,这一差别仅限于几秒钟。
在采样点更多时,在速度上的优越性应该能进一步突出。
4.7实验中遇到的问题及其解决:
实验中有些M文件代码总是出错。
解决方法:
重新检查,在稿纸上演算,体会运算过程。
例如,数组序号起始位置(为1,而非C语言的0)的问题,就是这样发现的。
编程时对代码不熟悉,使得思路比较混乱。
画流程图,理清思路。
对比较复杂的程序尤其如此。
感到大一时C语言教学并未强调流程图,这是一个教学中值得改进的地方。
C语言中,比起掌握运算符优先级,对流程图思想的培养显得更为重要。
附录:
附录A值得指出的是,在中,数组的序号是从1开始的(而在信号分析中习惯从0开始),我在上面编程时已考虑到这一情况。
例如,下面可以验证函数的正确性(顺便也可以验证函数)。
8;
6*(*
(1)/4);
图附1验证函数
教材112页给出了这一序列的幅度谱。
根据和之间的关系,将上面的幅度谱的幅值缩小8倍并取主周期后,就是上图左侧的幅度谱。
可见我编写的函数正确。
附录B出于兴趣,我们还可以看看和的运行时间。
为了不计绘图,删去和的绘图命令。
通过命令窗口查看运行时间。
(1)16(24)点采样:
15)(0.1*2**n)((n))(16);
0.007936.
0.017714.
(2)2048(211)点采样:
2047)(0.1*2**n)((n))(20