FFT程序设计.docx
- 文档编号:10213950
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:12
- 大小:140.73KB
FFT程序设计.docx
《FFT程序设计.docx》由会员分享,可在线阅读,更多相关《FFT程序设计.docx(12页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FFT 程序设计