离散傅里叶变换和快速傅里叶变换.docx

上传人:b****5 文档编号:7340871 上传时间:2023-05-11 格式:DOCX 页数:33 大小:254.10KB
下载 相关 举报
离散傅里叶变换和快速傅里叶变换.docx_第1页
第1页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第2页
第2页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第3页
第3页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第4页
第4页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第5页
第5页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第6页
第6页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第7页
第7页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第8页
第8页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第9页
第9页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第10页
第10页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第11页
第11页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第12页
第12页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第13页
第13页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第14页
第14页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第15页
第15页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第16页
第16页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第17页
第17页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第18页
第18页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第19页
第19页 / 共33页
离散傅里叶变换和快速傅里叶变换.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

离散傅里叶变换和快速傅里叶变换.docx

《离散傅里叶变换和快速傅里叶变换.docx》由会员分享,可在线阅读,更多相关《离散傅里叶变换和快速傅里叶变换.docx(33页珍藏版)》请在冰点文库上搜索。

离散傅里叶变换和快速傅里叶变换.docx

离散傅里叶变换和快速傅里叶变换

实验报告

课程名称:

信号分析与处理指导老师:

成绩:

__________________

实验名称:

离散傅里叶变换和快速傅里叶变换实验类型:

基础实验同组学生姓名:

第二次实验离散傅里叶变换和快速傅里叶变换

装订线

一、实验目的

1.1掌握离散傅里叶变换(DFT)的原理和实现;

1.2掌握快速傅里叶变换(FFT)的原理和实现,掌握用FFT对连续信号和离散信号进行谱分析的方法。

1.3会用Matlab软件进行以上练习。

二、实验原理

2.1关于DFT的相关知识

序列x(n)的离散事件傅里叶变换(DTFT)表示为

如果x(n)为因果有限长序列,n=0,1,...,N-1,则x(n)的DTFT表示为

x(n)的离散傅里叶变换(DFT)表达式为

序列的N点DFT是序列DTFT在频率区间[0,2π]上的N点灯间隔采样,采样间隔为2π/N。

通过DFT,可以完成由一组有限个信号采样值x(n)直接计算得到一组有限个频谱采样值X(k)。

X(k)的幅度谱为

,其中下标R和I分别表示取实部、虚部的运算。

X(k)的相位谱为

离散傅里叶反变换(IDFT)定义为

2.2关于FFT的相关知识

快速傅里叶变换(FFT)是DFT的快速算法,并不是一个新的映射。

FFT利用了

函数的周期性和对称性以及一些特殊值来减少DFT的运算量,可使DFT的运算量下降几个数量级,从而使数字信号处理的速度大大提高。

若信号是连续信号,用FFT进行谱分析时,首先必须对信号进行采样,使之变成离散信号,然后就可以用FFT来对连续信号进行谱分析。

为了满足采样定理,一般在采样之前要设置一个抗混叠低通滤波器,且抗混叠滤波器的截止频率不得高于与采样频率的一半。

比较DFT和IDFT的定义,两者的区别仅在于指数因子的指数部分的符号差异和幅度尺度变换,因此可用FFT算法来计算IDFT。

3、实验内容与相关分析(共6道)

说明:

为了便于老师查看,现将各题的内容写在这里——

题目按照3.1、3.2、...、3.6排列。

每道题包含如下内容:

题干、解答(思路、M文件源代码、命令窗口中的运行及其结果)、分析。

其中“命令窗口中的运行及其结果”按照小题顺序排列,各小题包含命令与结果(图形或者序列)。

3.1求有限长离散时间信号x(n)的离散时间傅里叶变换(DTFT)X(ejΩ)并绘图。

(1)已知

(2)已知

【解答】

思路:

这是DTFT的变换,按照定义编写DTFT的M文件即可。

考虑到自变量Ω是连续的,为了方便计算机计算,计算时只取三个周期[-2π,4π]中均匀的1000个点用于绘图。

理论计算的各序列DTFT表达式,请见本题的分析。

M文件源代码(我的Matlab源文件不支持中文注释,抱歉):

functionDTFT(n1,n2,x)

%ThisisaDTFTfunctionformyexperimentofSignalProcessing&Analysis.

w=0:

2*pi/1000:

2*pi;%Definethebracketofomegaforplotting.

X=zeros(size(w));%DefinetheinitialvaluesofX.

fori=n1:

n2

X=X+x(i-n1+1)*exp((-1)*j*w*i);%ItisthedefinitionofDTFT.

end

Amp=abs(X);%Acquiretheamplification.

Phs=angle(X);%Acquirethephaseangle(radian).

subplot(1,2,1);

plot(w,Amp,'r');xlabel('\Omega');ylabel('Amplification');holdon;

%Plotamplificationontheleft.

subplot(1,2,2);

plot(w,Phs,'b');xlabel('\Omega');ylabel('PhaseAngle(radian)');holdoff;

%Plotphaseangleontheright.

end

命令窗口中的运行及其结果(理论计算的各序列DTFT表达式,请见本题的分析):

(1)小题

>>n=(-2:

2);

>>x=1.^n;

>>DTFT(-2,2,x);

图3.1.1在[-2π,4π]范围内3个周期的幅度谱和相位谱(弧度制)

(2)小题

>>n=(0:

10);

>>x=2.^n;

>>DTFT(0,10,x);

图3.1.2在[-2π,4π]范围内3个周期的幅度谱和相位谱(弧度制)

【分析】

对于第

(1)小题,由于序列x(n)只在有限区间(-2,-1,-,1,2)上为1,所以是离散非周期的信号。

它的幅度频谱相应地应该是周期连续信号。

事实上,我们可计算出它的表达式:

,可见幅度频谱拥有主极大和次极大,两个主极大间有|5-1|=4个极小,即有3个次级大。

而对于它的相位频谱,则是周期性地在-π、0、π之间震荡。

对于第

(2)小题,由于是离散非周期的信号。

它的幅度频谱相应地应该是周期连续信号。

而它的表达式:

,因此主极大之间只有|0-1|=1个极小,不存在次级大。

而对于它的相位频谱,则是在一个长为2π的周期内有|11-1|=10次振荡。

而由DTFT的定义可知,频谱都是以2π为周期向两边无限延伸的。

由于DTFT是连续谱,对于计算机处理来说特别困难,因此我们才需要离散信号的频谱也离散,由此构造出DFT(以及为加速计算DFT的FFT)。

3.2已知有限长序列x(n)={8,7,9,5,1,7,9,5},试分别采用DFT和FFT求其离散傅里叶变换X(k)的幅度、相位图。

【解答】

思路:

按照定义编写M文件即可。

M文件源代码:

i)DFT函数:

functionDFT(N,x)

%ThisisaDFTfunctionformyexperimentofSignalProcessing&Analysis.

k=(0:

N-1);%DefinevariablekforDFT.

X=zeros(size(k));%DefinetheinitialvalvesofX.

fori=0:

N-1

X=X+x(i+1)*exp((-1)*j*2*k*pi/N*i);%ItisthedefinitionofDFT.

end

Amp=abs(X);%Acquiretheamplification.

Phs=angle(X);%Acquirethephaseangle(radian).

subplot(1,2,1);

stem(k,Amp,'.',’MarkerSize’,18);xlabel('k');ylabel('Amplification');holdon;

%Plotamplificationontheleft.

subplot(1,2,2);

stem(k,Phs,'*');xlabel('k');ylabel('PhaseAngle(radian)');holdoff;

%Plotphaseangleontheright.

end

ii)基2-FFT函数

functionmyFFT(N,x)

%Thisisabase-2FFTfunction.

lov=(0:

N-1);

j1=0;

fori=1:

N%indexedaddressing

ifi

temp=x(j1+1);

x(j1+1)=x(i);

x(i)=temp;

end

k=N/2;

whilek<=j1

j1=j1-k;

k=k/2;

end

j1=j1+k;

end

digit=0;

k=N;

whilek>1

digit=digit+1;

k=k/2;

end

n=N/2;%Nowwestartthe"butterfly-shaped"process.

formu=1:

digit

dif=2^(mu-1);%Differncebetweentheindexesofthetargetvariables.

idx=1;

fori=1:

n

idx1=idx;

idx2=1;

forj1=1:

N/(2*n)

r=(idx2-1)*2^(digit-mu);

wn=exp(j*(-2)*pi*r/N);%Itisthe"circulatingcoefficients".

temp=x(idx);

x(idx)=temp+x(idx+dif)*wn;

x(idx+dif)=temp-x(idx+dif)*wn;

idx=idx+1;

idx2=idx2+1;

end

idx=idx1+2*dif;

end

n=n/2;

end

Amp=abs(x);%Acquiretheamplification.

Phs=angle(x);%Acquirethephaseangle(radian).

subplot(1,2,1);

stem(lov,Amp,'.',’MarkerSize’,18);

xlabel('FFTk');ylabel('FFTAmplification');holdon;

%Plottheamplification.

subplot(1,2,2);

stem(lov,Phs,'*');xlabel('FFTk');ylabel('FFTPhaseAngle(radian)');holdoff;

end

命令窗口中的运行及其结果:

DFT:

>>x=[8,7,9,5,1,7,9,5];

>>DFT(8,x);

图3.2.1DFT的幅度谱和相位谱(弧度制)

FFT:

>>x=[8,7,9,5,1,7,9,5];

>>myFFT(8,x);

图3.2.2FFT算法的幅度谱和相位谱(弧度制)

图3.2.1DFT的幅度谱和相位谱(相位是弧度制的)

【分析】

DFT是离散信号、离散频谱之间的映射。

在这里我们可以看到序列的频谱也被离散化。

事实上,我们可以循着DFT构造的方法验证这个频谱:

首先,将序列做N=8周期延拓,成为离散周期信号。

然后利用DFS计算得到延拓后的频谱:

,从而取DFS的主值区间得到DFT,与图一致。

因此计算正确。

而对于FFT,我们可以看到它给出和DFT一样的结果,说明了FFT算法就是DFT的一个等价形式。

不过,由于序列不够长,FFT在计算速度上的优越性尚未凸显。

3.3已知连续时间信号x(t)=3cos8πt,X(ω)=

,该信号从t=0开始以采样周期Ts=0.1s进行采样得到序列x(n),试选择合适的采样点数,分别采用DFT和FFT求其离散傅里叶变换X(k)的幅度、相位图,并将结果与X(k)的幅度、相位图,并将结果与X(ω)相比较。

【解答】

思路:

此题与下一题都是一样的操作,可以在编程时统一用变量g(0或1)来控制是否有白噪声。

这里取g=0(无白噪声)。

另外,分别取12点、20点、28点采样,以考察采样长度的选择与频谱是否泄漏的关系。

M文件源代码:

i)采样函数:

functionxs=sampJune3(N,Ts,g)

%ThisisafunctionappliedtoProblem3&4.

%N:

numberofsamplingpoints;Ts:

samplingperiod;g=0:

Nogaussiannoise;g=1:

gussiannoiseexists.

n=1:

N;

fori=1:

N%Notethatimuststartat0inanalysis.ThusImadeaadaptation.

sample(i)=3*cos(8*pi*Ts*(i-1))+g*randn;

%InMatlab,indexstartsat1,whichisnotconsistentwithourhabit.ThusImadeaadaptationincodes.

%Itisasamplingprocesswith(g=1)/without(g=0)noise.

end

xs=sample;

plot(n-1,sample,'.',’MarkerSize’,18);xlabel('n');ylabel('value');holdoff;

%Mustuse(n-1),becauseinMatlab,indexstartsat1.

end

ii)DFT和基2-FFT函数的代码,请见第3.2节。

不需再新编一个。

命令窗口中的运行及其结果:

12点采样:

>>xs=sampJune3(12,0.1,0);%末尾的0表示无噪声。

>>DFT(12,xs);

>>myFFT(12,xs);

图3.3.1进行12点采样得到的序列

图3.3.2DFT的幅度谱和相位谱(弧度制),出现了泄漏

图3.3.3FFT的幅度谱和相位谱(弧度制)。

出现了频谱泄漏。

20点采样:

>>xs=sampJune3(20,0.1,0);%末尾的0表示无噪声。

>>DFT(20,xs);

>>myFFT(20,xs);

图3.3.4进行20点采样得到的序列

图3.3.5DFT的幅度谱和相位谱(弧度制)。

频谱无泄漏。

图3.3.6FFT的幅度谱和相位谱(弧度制)。

频谱无泄漏。

28点采样:

>>xs=sampJune3(28,0.1,0);%末尾的0表示无噪声。

>>DFT(28,xs);

>>myFFT(28,xs);

图3.3.7进行28点采样得到的序列

图3.3.8DFT的幅度谱和相位谱(弧度制)。

再次出现频谱泄漏。

图3.3.9FFT的幅度谱和相位谱(弧度制)。

再次出现频谱泄漏。

【分析】

分别取12点、20点、28点采样,以考察采样长度的选择与频谱是否泄漏之间的关系。

现在与原信号频谱

比较后可以得出如下结论:

图3.3.10原信号的频谱(由两个冲激函数组成)

原信号的频谱是

,在±8π上各有一强度为3π的谱线,在其余频率上为0。

可见原信号被0.1s采样周期的采样信号离散化之后,谱线以20π为周期重复,并且只在(20k±8)π(k为整数)处非0。

那么,在20点DFT(采样时间原信号周期的整数倍)中,只有第8根、第12根谱线非0。

而在12点、28点DFT中,由于采样时间不是原信号周期的整数倍,谱线将向两边泄漏。

不过,对比12点采样和28点采样,我们还可以发现,28点采样频谱的主谱线高度是次谱线高度的4倍,儿12点采样频谱的主谱线高度是次谱线高度的3倍。

可见,在无法保证采样时间是信号周期整数倍的情况下,增加采样时间有助于减轻频谱泄漏的程度。

3.4对第3步中所述连续时间信号叠加高斯白噪声信号,重复第3步过程。

【解答】

思路:

此题与上一题都是一样的操作,可以在编程时统一用变量g(0或1)来控制是否有白噪声。

这里取g=1(有白噪声)。

另外,仍然分别取12点、20点、28点采样,以考察采样长度的选择与频谱是否泄漏的关系。

M文件源代码:

不需要再新编程序。

可以直接引用上面的函数:

sampJune3(N,Ts,g),取g=1,以体现存在白噪声

DFT(N,x)

myFFT(N,x)

命令窗口中的运行及其结果:

12点采样:

>>xs=sampJune3(12,0.1,1);%末尾的1表示有噪声。

>>DFT(12,xs);

>>myFFT(12,xs);

图3.4.1进行12点采样得到的含噪声的序列

图3.4.2含噪声序列DFT的幅度谱和相位谱(弧度制)。

图3.4.3含噪声FFT的幅度谱和相位谱(弧度制)。

20点采样:

>>xs=sampJune3(20,0.1,1);%末尾的1表示有噪声。

>>DFT(20,xs);

>>myFFT(20,xs);

图3.4.4进行20点采样得到的含噪声序列

图3.4.5含噪声DFT的幅度谱和相位谱(弧度制)。

图3.4.6含噪声FFT的幅度谱和相位谱(弧度制)。

28点采样:

>>xs=sampJune3(28,0.1,0);%末尾的1表示有噪声。

>>DFT(28,xs);

>>myFFT(28,xs);

图3.4.7进行28点采样得到的含噪声序列

 

图3.4.8含噪声DFT的幅度谱和相位谱(弧度制)。

图3.4.9含噪声FFT的幅度谱和相位谱(弧度制)。

【分析】

依然分别取12点、20点、28点采样。

仍然与原信号的频谱

(图3.3.10)比较,可以得到结论:

由于叠加了噪声,所以频谱都受到了一定的干扰。

由于白噪声在各个频率的功率相等,因此频谱上各处的干扰也是均匀随机的。

不过,通过对比我们可以发现,20点采样(无噪声时不发生泄漏的采样方法)在存在噪声时,仍然可以明显区分出原信号的谱线。

第二好的是28点采样,因为采样时间较长,即使存在频谱泄漏也能较好地区分原信号的谱线。

而最差的是12点采样,由于噪声的存在和严重的频谱泄漏,它的次谱线与主谱线的高度相差不大,使原信号不明显。

3.5已知序列

,X(k)是x(n)的6点DFT,设

(1)若有限长序列y(n)的6点DFT是

,求y(n)。

(2)若有限长序列w(n)的6点DFTW(k)是

的实部,求w(n)。

(3)若有限长序列q(n)的3点DFT是

,k=0,1,2,求q(n)。

【解答】

思路:

这是对DFT进行变换后求IDFT。

考虑到IDFT和DFT定义的对称性,可以在DFT的基础上略加调整既可用于计算。

首先,∵

∴它的6点采样是序列是

值得指出的是,在Matlab中,数组的序号是从1开始的(而在信号分析中习惯从0开始),不过我在上面编程时已考虑到这一情况,具体可见实验报告最后的“附录”。

首先生成x(n)的6点DFT,再按照各小题分别转换,最后求相应的IDFT。

M文件源代码:

i)输出x(n)的6点DFT的函数:

functionX=ExportDFT(N,x)

%ThisisaDFTfunctionthatexportsthesolutiontovectorX.

k=(0:

N-1);%DefinevariablekforDFT.

X=zeros(size(k));%DefinetheinitialvalvesofX.

fori=0:

N-1

X=X+x(i+1)*exp((-1)*j*2*k*pi/N*i);%ItisthedefinitionofDFT.

end

end

ii)算第

(1)小题的Y(k)的函数:

functionY=Convertor1(X)

%Thisisamathematicalconvertorforthesubproblem

(1).

fork=1:

6

Y(k)=exp((-j)*2*pi*(-4*(k-1))/6)*X(k);

%Herewemustuse(k-1),becauseinMatlabindexstartsat1.

end

end

iii)算第

(2)小题的W(k)的函数:

functionW=Convertor2(X)

%Thisisamathematicalconvertorforthesubproblem

(2).

W=real(X);%AcquiretherealpartofX.

end

iv)算第(3)小题的Q(k)的函数:

functionQ=Convertor3(X)

%Thisisamathematicalconvertorforthesubproblem(3).

Q=zeros(3);%Detailedexplanationgoeshere

fortmp=1:

3

Q(tmp)=X(2*tmp);

end

end

v)输出IDFT的函数:

functionx=ExportIDFT(N,X)

%ThisistheIDFTfunctionformyexperiment.

n=(0:

N-1);%DefinevariablenforIDFT.

x=zeros(size(n));%Definetheinitialvalvesofx.

fork=0:

N-1

x=x+X(k+1)*exp(j*2*k*pi/N*n);

end

x=x/N;

a=real(x);%WeMUSTusereal(x),thoughwemayALREADYknowxisreal.

%It'scausedbynumericcalculation(notanalyticcalculation)inMatlab.

stem(n,a,'.','MarkerSize',18);xlabel('n');ylabel('Solution');

end

命令窗口中的运行及其结果:

>>x=[4,3,2,1,0,0];

>>X=ExportDFT(6,x);

(1)小题

>>Y=Convertor1(X);

>>y=ExportIDFT(6,Y)

y=

Columns1through4

0.0000+0.0000i0.0000+0.0000i4.0000+0.0000i3.0000+0.0000i

%虚部都是0,说明是实数

Columns5through6

2.0000+0.0000i1.0000-0.0000i%虚部都是0,说明是实数

%事实上,在Matlab中,由于数值计算的截断误差,对原复数做乘法后,答案的虚部可能有一极小的量。

答案:

y(n)={0,0,4,3,2,1}

图3.5.1输出的y(n),这是对x(n)的圆周移位。

(2)小题

>>W=Convertor2(X);

>>w=ExportIDFT(6,W)

w=

Columns1through4

4.0000+0.0000i1.5000+0.0000i1.0000+0.0000i1.0000+0.0000i

%虚部都是0,说明是实数

Columns5through6

1.0000+0.0000i1.5000+0.0000i%虚部都是0,说明是实数;

%事实上,在Matlab中,由于数值计算的截断误差,对原复数做乘法后,答案的虚部可能有一极小的量。

答案:

w(n)={0,0,4,3,2,1}

图3.5

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2