FFT程序设计.docx

上传人:b****7 文档编号:10213950 上传时间:2023-02-09 格式:DOCX 页数:12 大小:140.73KB
下载 相关 举报
FFT程序设计.docx_第1页
第1页 / 共12页
FFT程序设计.docx_第2页
第2页 / 共12页
FFT程序设计.docx_第3页
第3页 / 共12页
FFT程序设计.docx_第4页
第4页 / 共12页
FFT程序设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

FFT程序设计.docx

《FFT程序设计.docx》由会员分享,可在线阅读,更多相关《FFT程序设计.docx(12页珍藏版)》请在冰豆网上搜索。

FFT程序设计.docx

FFT程序设计

课程设计任务书

学生班级:

通信0802学生姓名:

学号:

设计名称:

FFT程序设计

起止日期:

2011.6.29-2011.7.4指导教师:

设计要求:

基本要求:

用C语言或MATLAB作为工具完成以下设计:

1.构建一个无限长时域序列x(n)

1)截取序列x(n)的长度M=15,得新序列x’(n),又将x’(n)后添加10个零得到序列x’’(n),用DFT公式计算x’(n),x’’(n)的变换值,并用FFT计算x’(n)频谱,对比结果,观察栅栏效应。

2)截取序列x(n)的长度M=30,得新序列y’(n),用FFT计算y’(n)频谱,对比x’(n),

y’(n)的频谱,观察频谱泄露现象。

2.构筑一个信号,由100HZ,200HZ,1000HZ三种频率的正弦波组成,用FFT计算信号的频谱,设计滤波器,保留100HZ,200HZ频率的信号,从时域和频域两个角度,比较滤波器输入、输出信号。

扩展要求:

对已知载波频率的调制信号,用FFT分析其频谱并实现信号解调,得到原基带信号。

课程设计学生日志

时间

设计内容

2011-6-29

查阅资料,确定方案

2011-6-30

设计总体方案

2011-7-1

具体设计及运行调试

2011-7-2

书写报告

2011-7-4

答辩

课程设计考勤表

星期一

星期二

星期三

星期四

星期五

课程设计评语表

指导教师评语:

 

 

成绩:

指导教师:

年月日

FFT程序设计

一、设计目的和意义

设计目的:

用C语言或MATLAB作为工具完成以下设计:

1.构建一个无限长时域序列x(n)

1)截取序列x(n)的长度M=15,得新序列x’(n),又将x’(n)后添加10个零得到序列x’’(n),用DFT公式计算x’(n),x’’(n)的变换值,并用FFT计算x’(n)频谱,对比结果,观察栅栏效应。

2)截取序列x(n)的长度M=30,得新序列y’(n),用FFT计算y’(n)频谱,对比x’(n),

y’(n)的频谱,观察频谱泄露现象。

2.构筑一个信号,由100HZ,200HZ,1000HZ三种频率的正弦波组成,用FFT计算信号的频谱,设计滤波器,保留100HZ,200HZ频率的信号,从时域和频域两个角度,比较滤波器输入、输出信号。

扩展要求:

对已知载波频率的调制信号,用FFT分析其频谱并实现信号解调,得到原基带信号。

意义:

FFT是离散傅立叶变换的快速算法,可以将一个信号变换,到频域。

有些信

号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。

这就是很多信号分析采用FFT变换的原因。

另外,FFT可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。

二、设计原理

FFT即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。

FFT算法基本思想:

不断地把长序列的DFT分解成几个段序列的DFT,并利用旋转因子的周期性和对称性来减少DFT的运算次数。

randn(x,y):

构建一个无限长时域序列x(n)

DFT函数:

定义相应的参数,然后利用公式WN=exp(-j*2*pi/N)来求得WN因子的具体数值,然后求出DFT运算矩阵,同时应该注意向量乘应该为点乘。

最后利用X=x*WNnk矩阵运算计算公式计算DFT,然后主程序中就可直接调用dft函数进行运算了。

FFT变换:

由于matlab软件的数据库里面有FFT函数,所以在函数中就可以直接进行调用。

滤波:

利用调用FIR函数得出所构建信号的图形,然后利用FFT计算信号的频谱,设计滤波器保留100HZ,200HZ频率的信号

三、详细设计步骤

1.用函数randn()构建一个无限长时域序列。

然后截取无限长序列的长度M=15,subplot(2,2,2),plot(n2,yw1)得到新的序列之后再把得到的新的序列添加10个零,subplot(2,2,3),plot(n1,yw2)再得到一个序列

2.编写dft函数,供函数调用。

定义相应的参数,然后利用公WN=exp(-j*2*pi/N)来求得WN因子的具

体数值,然后求出DFT运算矩阵,同时应该注意向量乘应该为点乘。

最后利用X=x*WNnk矩阵运算计算公式计算DFT,然后主程序中就可直接调用dft函数进行运算了。

3.数据库内部fft函数直接调用。

对指定序列通过调用函数进行频谱分析。

4.构建一个信号。

s=sin(2*pi*100*t)+sin(2*pi*200*t)+sin(2*pi*1000*t)

5.滤波。

构建信号由100HZ,200HZ,1000HZ三种频率的正弦波组成在一起,分别

设置好三个参数,然后利用调用FIR函数得出所构建信号的图形,然后利用FFT计算信号的频谱,设计滤波器保留100HZ,200HZ频率的信号。

四、设计结果及分析

观察栅栏效应:

图1、1000个采样点信号时域图、15点以及15点加10个0后的dft频谱图、15点fft频谱图

栅栏效应:

对采样信号的频谱,为提高计算效率,通常采用FFT算法进行计算,设数据点数为

  N=T/dt=T.fs

  则计算得到的离散频率点为

  Xs(fi),fi=i.fs/N,i=0,1,2,…,N/2

这就相当于透过栅栏观赏风景,只能看到频谱的一部分,而其它频率点看不见,因此很可能使一部分有用的频率成分被漏掉,此种现象被称为栅栏效应.

由图可以观察到有一些频谱点确实被漏掉了。

观察频谱泄露现象:

图2、抽样点数分别为15、30时fft频谱图

频谱泄露:

对于频率为fs的正弦序列,它的频谱应该只是在fs处有离散谱。

但是,在利用DFT求它的频谱做了截短,结果使信号的频谱不只是在fs处有离散谱,而是在以fs为中心的频带范围内都有谱线出现,它们可以理解为是从fs频率上“泄露”出去的,这种现象称为频谱“泄露”。

由100HZ,200HZ,1000HZ三种频率组成的正弦波:

图4、正弦信号的时域图和频谱图

滤波器:

图5、滤波器频谱图

滤波后的信号:

图6、滤波后的时域图和频谱图

附录:

函数一:

FFT主函数

functionfft()

x0=randn(1,1000);%产生一个随机长度为1000的序列

x1=x0(1:

15);%x1取序列的15点

z=zeros(1,10);%长度为10的0序列

n1=1/25:

1/25:

1;

n2=1/15:

1/15:

1;

x2=[x1,z];

y1=dft(x1,15);

y2=dft(x2,25);

y11=fft(x1,15);

yw1=abs(y1);

yw2=abs(y2);

yw11=abs(y11);

figure

(1);

subplot(2,2,1);

stem(x0);

title('标准正态分布随机信号1000个点');

ylabel('信号值'),xlabel('t');

 

subplot(2,2,2);

stem(yw1);

title('15点x1的dft图');

 

subplot(2,2,3);

stem(yw2);

title('15加10个0的x2的dft图');

 

subplot(2,2,4);

stem(yw11);

title('15点x1的fft图');

 

yt=x0(1:

30);%取30个点

nt=1/30:

1/30:

1;

ytfft=abs(fft(yt));

figure

(2);

subplot(2,1,1);

stem(ytfft);

title('30点yt的fft图');

subplot(2,1,2);

stem(yw11);

title('15点x1的fft图');

fs=3000;

t=0:

1/fs:

1;

s=sin(2*pi*100*t)+sin(2*pi*200*t)+sin(2*pi*1000*t);

figure(3);

subplot(2,1,1)

plot(t,s);

sfft=abs(fft(s,512));

f=(0:

255)*fs/512;

subplot(2,1,2)

plot(f,sfft(1:

256));

b=FIR(fs);

sf=filter(b,1,s);

figure(5);

subplot(2,1,1)

plot(t,sf);

sffft=abs(fft(sf,512));

f=(0:

255)*fs/512;

subplot(2,1,2);

plot(f,sffft(1:

256));

函数二:

FIR数字滤波器设计函数:

functionb=FIR(fs)

m=(0.3*200)/(fs/2);%通带频率为200Hz,m为过渡带,阻带为200+m.

M=round(8/m);

N=M-1;

b=fir1(N,30*12/(fs/2));

[h,f]=freqz(b,1,512);%求频率响应

figure(4);

plot(f*fs/(2*pi),20*log10(abs(h)))%画频谱图

函数三:

DFT函数:

functionX=dft(x,N)

N=length(x);

n=0:

N-1;

k=0:

N-1;

WN=exp(-j*2*pi/N);%求得WN因子%

nk=n'*k;

WNnk=WN.^nk;%求得DFT运算矩阵,注意向量乘为点乘%

X=x*WNnk;%利用矩阵运算计算DFT%

五、体会

通过本次程序设计,让我更深入的了解了基本算法及其在工程上运算的优越性,以及在实践过程中,是我对数字信号处理这门课程有了更深一步的认识,

在学习FFT算法时有许多地方不是很明白,通过重新复习相关知识,编写程序对以前一些模糊的知识理解的更透彻。

在又一次的接触到了MATLAB仿真软件后,更是认识了它的强大功能,在我们通信专业中更是有着举足轻重的地位,相信我以后还有更多的机会与此软件近距离接触,从而从中获悉更多的宝贵知识财富,当然,在这次课程设计中,更重要的是让我学会了理论与实践相结合的方

法。

 

六、参考文献

1、曹志刚,钱亚生《现代通信原理》清华大学出版社,1994

2、程佩青《数字信号处理》(第三版),清华大学出版社。

2007

3、刘树棠译《信号与系统》第二版,西安交通大学出版社,1998

4、张威《MATLAB基础与编程入门》第二版,西安电子科技大学出版社,2008

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

当前位置:首页 > 小学教育 > 小学作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1