数字信号处理课程设计Word文件下载.docx
- 文档编号:18460886
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:18
- 大小:144.42KB
数字信号处理课程设计Word文件下载.docx
《数字信号处理课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《数字信号处理课程设计Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
DFT使计算机在频域处理信号成为可能,但是当N很大时,直接计算N点DFT的计算量非常大。
快速傅里叶变换(FFT,FastFourierTransform)可使实现DFT的运算量下降几个数量级,从而使数字信号处理的速度大大提高,工程应用成为可能。
人们已经研究出多种FFT算法,它们的复杂度和运算效率各不相同。
快速傅里叶变换就是不断地将长序列的DFT分解为短序列的DFT,并利用的周期性和对称性及其一些特殊值来减少DFT运算量的快速算法。
FFT算法分类:
1.时间抽选法DIT:
Decimation-In-Time
2.频率抽选法DIF:
Decimation-In-Frequency
时间域抽取:
基2时间抽取(Decimationintime)DIT-FFT算法
频率域抽取:
基2频率抽取(Decimationinfrequency)DIF-FFT算法
第二章基2DIT-FFT算法
2.1按时间抽取的基2DIT-FFT算法:
1、按时间抽取的基2DIT-FFT算法原理
先设序列点数为N=2M,M为整数。
如果不满足这个条件,可以人为地加上若干零值点,使之达到这一要求。
这种N为2的整数幂的FFT称基-2FFT。
设输入序列长度为N=2M(M为正整数),将该序列按时间顺序的奇偶分解为越来越短的子序列,称为按时间抽取(DIT)的FFT算法。
序列x(n)的N点DFT为
将上面的和式按n的奇偶性分解为
令x1(l)=x(2l),x2(l)=x(2l+1),因为,所以上式可写成
上式说明,按n的奇偶性将x(n)分解为两个N/2长的序列x1(l)和x2(l),则N点DFT可分解为两个N/2点DFT来计算。
用X1(k)和X2(k)分别表示x1(l)和x2(l)的N/2点DFT,即
有上述公式,及X1(k)、X2(k)的隐含周期性得到:
这样,就将N点DFT的计算分解为计算两个N/2点离散傅里叶变换X1(k)和X2(k),再计算上式。
蝶形图:
2、按时间抽选的FFT算法的特点:
(1)
原位运算
由图4.2.4可以看出,DIT-FFT的运算过程很有规律。
N=2M点的FFT共进行M级运算,每级由N/2个蝶形运算组成。
同一级中,每个蝶形的两个输入数据只对计算本蝶形有用,而且每个蝶形的输入、输出数据结点又同在一条水平线上,这就意味着计算完一个蝶形后,所得输出数据可立即存入原输入数据所占用的存储单元。
这样,经过M级运算后,原来存放输入序列数据的N个存储单元中便依次存放的N个值。
这种利用同一存储单元存储蝶形计算输入、输出数据的方法称为原位计算。
原位计算可节省大量内存,从而使设备成本降低。
(2)倒序规律
按原位计算时,FFT的输出是按正常顺序排列在存储单元中,但是这时输入x(n)却不是、按自然顺序存储的,而是按x(0),x(4),…,x(7)的顺序存入存储单元,看起来好象是“混乱无序”的,实际上是有规律的,我们称之为倒序。
第三章基于C语言设计16点基2DFT-FFT程序及运行结果
设计参数及要求:
本次试验要求利用C语言设计16点基2DIT-FFT程序,并对如下程序进行分析,给出输出结果并画出信号的幅值图和相位谱。
n
1
2
3
4
5
6
7
8
9
10
X(n)
1.22
2.23
2.85
2.98
2.60
1.76
0.62
-0.62
-1.76
-2.60
11
12
13
14
15
-2.98
-2.85
-2.23
-1.22
3.1按时间抽取的基2DFT-FFT程序:
/*时间抽选基2FFT算法C语言实现*/
#include<
stdio.h>
math.h>
stdlib.h>
conio.h>
#defineN1000
#include<
graphics.h>
/*定义复数类型*/
typedefstruct
{
doublereal;
doubleimg;
}complex;
complexx[N],*W;
/*输入序列,变换核*/
intsize_x=0;
/*输入序列的大小,在本程序中仅限2的次幂*/
doublePI;
/*圆周率*/
intz;
floatw[N],p[N];
charstr[N];
/*初始化变换核*/
voidinitW()
inti;
W=(complex*)malloc(sizeof(complex)*size_x);
for(i=0;
i<
size_x;
i++)
{
W[i].real=cos(2*PI/size_x*i);
W[i].img=-1*sin(2*PI/size_x*i);
}
}
/*加法*/
voidadd(complexa,complexb,complex*c)
c->
real=a.real+b.real;
img=a.img+b.img;
/*乘法*/
voidmul(complexa,complexb,complex*c)
real=a.real*b.real-a.img*b.img;
img=a.real*b.img+a.img*b.real;
/*减法*/
voidsub(complexa,complexb,complex*c)
real=a.real-b.real;
img=a.img-b.img;
/*除法*/
voiddivi(complexa,complexb,complex*c)
real=(a.real*b.real+a.img*b.img)/(b.real*b.real+b.img*b.img);
img=(a.img*b.real-a.real*b.img)/(b.real*b.real+b.img*b.img);
/*变址计算,将x(n)码位倒置*/
voidchange()
complextemp;
unsignedshorti=0,j=0,k=0;
doublet;
k=i;
j=0;
t=(log(size_x)/log
(2));
while((t--)>
0)
j=j<
<
1;
j|=(k&
1);
k=k>
>
if(j>
i)
temp=x[i];
x[i]=x[j];
x[j]=temp;
/*快速傅里叶变换*/
voidfft()
inti=0,j=0,k=0,l=0;
complexup,down,product;
change();
log(size_x)/log
(2);
{/*一级蝶形运算*/
l=1<
i;
for(j=0;
j<
j+=2*l)
{/*一组蝶形运算*/
for(k=0;
k<
l;
k++)
{/*一个蝶形运算*/
mul(x[j+k+l],W[size_x*k/2/l],&
product);
add(x[j+k],product,&
up);
sub(x[j+k],product,&
down);
x[j+k]=up;
x[j+k+l]=down;
/*快速傅里叶逆变换*/
voidifft()
inti=0,j=0,k=0,l=size_x;
complexup,down;
(int)(log(size_x)/log
(2));
l/=2;
add(x[j+k],x[j+k+l],&
up.real/=2;
up.img/=2;
sub(x[j+k],x[j+k+l],&
down.real/=2;
down.img/=2;
divi(down,W[size_x*k/2/l],&
/*输出傅里叶变换的结果和幅值结果*/
voidoutput()
clrscr();
printf("
Theresultareasfollows\n\n"
);
%.4f"
x[i].real);
if(x[i].img>
=0.0001)printf("
+%.4fj\n"
x[i].img);
elseif(fabs(x[i].img)<
0.0001)printf("
\n"
elseprintf("
%.4fj\n"
for(z=0;
z<
16;
z++)
{
w[z]=sqrt((x[z].real)*(x[z].real)+(x[z].img)*(x[z].img));
\n\nTheAmplitudesareasfollows\n\n"
for(z=0;
%.4f\n"
w[z]);
/*输出傅里叶变换相位的结果*/
voidoutput2()
setbkcolor(0);
p[z]=atan((x[z].img)/(x[z].real));
\n\n\nThePhaseareasfollows\n\n"
setcolor
(1);
p[z]);
voiddraw(intn)/*作幅值图*/
intk,driver,mode,step,x,y;
inti,j,xstep=512/n,ystep=55;
charbuffer[10],buffera[N];
step=512/n;
driver=VGA;
mode=VGAHI;
x=64;
y=400;
initgraph(&
driver,&
mode,"
"
setbkcolor(15);
/*绘制坐标及刻度*/
moveto(200,30);
outtext("
TheFigureofAmplitudeisasfollow!
line(x,80,x,400);
/*画纵坐标*/
line(x-4,100,x,80);
line(x,80,x+4,100);
line(40,y,600,y);
/*画横坐标*/
line(600,y,580,y+4);
line(600,y,580,y-4);
j=400;
settextjustify(CENTER_TEXT,CENTER_TEXT);
/*纵坐标刻度*/
=25;
i+=5)
line(64,j,54,j);
itoa(i,buffer,10);
outtextxy(30,j,buffer);
j-=ystep;
outtextxy(x,70,"
Amplitude"
/*纵坐标标注*/
j=64;
settextjustify(CENTER_TEXT,TOP_TEXT);
/*画横坐标刻度*/
=15;
line(j,400,j,410);
outtextxy(j,415,buffer);
j+=xstep;
}
outtextxy(600,y+10,"
x[n]"
/*横坐标标注*/
/*绘制频谱图*/
n;
setcolor(4);
setlinestyle(0,0,3);
line(x,y,x,(y-(w[k])*11));
x+=step;
sprintf(buffera,"
w[k]);
if(w[k]>
=0)
outtextxy(x-step+2,(y-(w[k])*12)-10,buffera);
else
outtextxy(x-step+2,(y-(w[k])*12)+10,buffera);
getch();
cleardevice();
voiddraw2(intn)/*作相位图*/
floatkd;
inti,j,xstep=512/n,ystep=30;
charbuffer[10],bufferp[N],bufferkd[N];
y=250;
TheFigureofphaseisasfollow!
line(x,50,x,450);
line(x-4,70,x,50);
line(x,50,x+4,70);
j=250;
outtextxy(15,j,"
0"
for(kd=0.5;
kd<
=3.0;
kd+=0.5)
line(64,j-ystep,54,j-ystep);
sprintf(bufferkd,"
kd);
outtextxy(30,j-ystep,bufferkd);
line(64,j+ystep,54,j+ystep);
-kd);
outtextxy(30,j+ystep,bufferkd);
j+=ystep;
outtextxy(x,40,"
Phase"
line(j,240,j,250);
outtextxy(j+10,265,buffer);
/*绘制相位图*/
line(x,y,x,(y-(p[k])*60));
sprintf(bufferp,"
p[k]);
if(p[k]>
outtextxy(x-step+2,(y-(p[k])*60)-10,bufferp);
outtextxy(x-step+2,(y-(p[k])*60)+5,bufferp);
intmain()
inti,method;
voidfft();
/*快速傅里叶变换*/
voidifft();
voidinitW();
/*初始化变换核*/
voidchange();
/*变址*/
voidadd(complex,complex,complex*);
/*复数加法*/
voidmul(complex,complex,complex*);
/*复数乘法*/
voidsub(complex,complex,complex*);
/*复数减法*/
voiddivi(complex,complex,complex*);
/*复数除法*/
voidoutput();
voidoutput2();
/*输出结果*/
system("
cls"
PI=atan
(1)*4;
Pleaseinputthesizeofx:
scanf("
%d"
&
size_x);
Pleaseinputthedatainx[N]:
%lf%lf"
x[i].real,&
x[i].img);
initW();
UseFFT(0)orIFFT
(1)?
method);
if(method==0)
fft();
ifft();
output();
/*画频谱图*/
draw(size_x);
output2();
draw2(size_x);
closegraph();
3.2程序运行结果:
PleaseinputthesizeofX:
16
PleaseinputthedatainX[N]:
xn=
01.22002.23002.85002.98002.60001.76000.6200-0.6200-1.7600-2.6000-2.9800-2.8500-2.2300-1.22000
4.49118667428684-22.5787201341516i
-0.863137084989848+2.08379725676967i
-0.708894177324789+1.06093511090429i
-0.660000000000000+0.660000000000000i
-0.667400913065437+0.445943033038161i
-0.636862915010152+0.263797256769669i
-0.634891583896613+0.126287787982296i
-0.640000000000000
-0.634891583896613-0.126287787982296i
-0.636862915010152-0.263797256769669i
-0.667400913065437-0.445943033038161i
-0.660000000000000-0.660000000000000i
-0.708894177324789-1.060
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字信号 处理 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)