基于matlab的fft算法程序设计.docx
《基于matlab的fft算法程序设计.docx》由会员分享,可在线阅读,更多相关《基于matlab的fft算法程序设计.docx(11页珍藏版)》请在冰点文库上搜索。
基于matlab的fft算法程序设计
课题名称
基于matlab的FFT算法程序设计
姓名
学号
学院
专业
指导教师
一、设计任务及要求:
设计任务:
设计利用FFT的算法程序画出对正弦信号进行频谱分析。
要求:
1.选择合适的抽样频率以及频率抽样点。
2.将原始信号的幅频曲线与加噪声后的信号幅频曲线进行对比,最后将恢复信号。
指导教师签名:
2011年12月30日
二、指导教师评语:
指导教师签名:
年月日
三、成绩
验收盖章
年月日
基于matlab的FFT算法程序设计
1设计目的
(1)掌握FFT算法程序的matlab的实现。
(2)了解matlab中对信号做频谱分析时如何设置参数。
(3)了解FFT算法的原理。
(4)熟悉信号的各种频谱分析图。
2设计思路
利用matlab编程实现
(1)利用原理分析出该信号的取样频率以及取样点数大概为多少才合适。
(2)对未进行加噪声的信号进行幅频分析,然后恢复信号。
(3)将原始信号加进噪声并进行幅频分析,然后恢复信号。
(4)比对加噪声前后信号的幅频图,看有何区别再进行总结。
3设计过程
3.1设计原理
(1)FFT变换原理
N点序列的DFT和IDFT变换定义式如下:
(1)
(2)
利用旋转因子
(3)
具有周期性,可以得到快速算法(FFT)。
在MATLAB中,可以用函数
(4)
和
(5)
计算N点序列的DFT正、反变换。
(2)FFT中选择频率以及采样点的标准
一个模拟信号,经过ADC采样之后,就变成了数字信号。
采样定理告诉我们,采样频率要大于信号频率的两倍,采样得到的数字信号,就可以做FFT(快速傅里叶变换)了。
N个采样点,经过FFT之后,就可以得到N个点的FFT结果。
为了方便进行FFT运算,通常N取2的整数次方。
假设采样频率为Fs,信号频率F,采样点数为N。
那么FFT之后结果就是一个为N点的复数。
每一个点就对应着一个频率点。
这个点的模值,就是该频率值下的幅度特性。
具体跟原始信号的幅度有什么关系呢?
假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。
而第一个点就是直流分量,它的模值就是直流分量的N倍。
而每个点的相位呢,就是在该频率下的信号的相位。
第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。
例如某点n所表示的频率为:
(6)
由公式(2-6)可以看出,Fn所能分辨到频率为为Fs/N,如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。
1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。
如果要提高频率分辨力,则必须增加采样点数,也即采样时间。
频率分辨率和采样时间是倒数关系。
假设FFT之后某点n用复数a+b*i表示,那么这个复数的模就是An=根号a*a+b*b,相位就是:
(7)
根据以上的结果,就可以计算出n点(n≠1,且n<=N/2)对应的信号的表达式为:
(8)
对于n=1点的信号,是直流分量,幅度即为A1/N。
由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。
(3)设计程序利用分析出的取样频率以及频率取样点来画出该信号在加噪声与不加噪声的情况下的幅频图,并进行比对。
3.2设计流程图
图1程序总流程图
4仿真实现过程
4.1源程序代码
fs=100;%设定采样频率
N=128;
n=0:
N-1;
t=n/fs;
f0=10;%设定正弦信号频率
%生成正弦信号
x=sin(2*pi*f0*t);
figure
(1);
subplot(121);
plot(t,x);%作正弦信号的时域波形
xlabel('t');
ylabel('y');
title('正弦信号时域波形');
grid;
%进行FFT变换并做频谱图
y=fft(x,N);%进行fft变换
mag=abs(y);%求幅值
f=(0:
length(y)-1)'*fs/length(y);%进行对应的频率转换
figure
(2);
subplot(121);
plot(f,mag);%做频谱图
axis([0,100,0,80]);
xlabel('频率(Hz)');
ylabel('幅值');
title('正弦信号幅频谱图N=128');
grid;
%用IFFT恢复原始信号
xifft=ifft(y);
magx=real(xifft);
ti=[0:
length(xifft)-1]/fs;
figure(3);
subplot(121);
plot(ti,magx);
xlabel('t');
ylabel('y');
title('通过IFFT转换的正弦信号波形');
grid;
%对信号加信噪比为16的高斯白噪声
SNR=16;%设定信噪比
y=awgn(x,SNR);
figure
(1);
subplot(122);
plot(t,y);%画出加噪声后的信号时域波形图
xlabel('t');
ylabel('y');
title('正弦信号加噪声后的时域波形');
grid;
%进行FFT变换并做频谱图
g=fft(y,N);%进行fft变换
mag=abs(g);%求幅值
f=(0:
length(g)-1)'*fs/length(g);%进行对应的频率转换
figure
(2);
subplot(122);
plot(f,mag);%做频谱图
axis([0,100,0,80]);
xlabel('频率(Hz)');
ylabel('幅值');
title('正弦信号加噪声后的幅频谱图N=128');
grid;
%用IFFT恢复加噪声后的信号
xifft1=ifft(g);
magx=real(xifft1);
ti=[0:
length(xifft1)-1]/fs;
figure(3);
subplot(122);
plot(ti,magx);
xlabel('t');
ylabel('y');
title('通过IFFT转换加噪声后的信号波形');
grid;
4.2程序运行结果
图2原始信号波形图3加噪声后信号波形图
由图2和图3可得,加噪声后,信号的幅度有所改变,不能直接看出频率的变化,信号变为非周期性信号。
图4原始信号幅频图图5加噪声后信号幅频图
通过幅频曲线分析,图4中可看出只含有一种频率的信号,f=10Hz;而从图5中可看到除了原始信号的频率外还有许多的位置频率在干扰着信号。
幅频分析在现代通信技术中占有重要的地位,信号在信道中传输是不可能避免噪声的,从而使通信变得随机性比较强,而幅频分析能分析出信号的频率组成,若是再加上滤波器则可将我们不需要的频率范围滤掉,保留我们需要传送的信号频率范围,从而保证传送的信息的准确性。
图6恢复原始信号波形图图7恢复加噪声信号波形图
由图6和图7可看出进行了IFFT转化后,能将FFT变换的信号无误
差的还原,该项技术一般用于接收端。
5主要仪器与设备
安装了matlabR2009a程序的电脑。
6设计体会与建议
6.1设计体会
通过此次课程设计,让我对快速傅里叶变换即FFT有了更深刻的了解,不再局限于书上所学的傅里叶变化的公式,它不仅仅是一种计算方法,更是在通信系统中起到很大的作用,通过傅里叶变换我们可以画出幅频图,从中得到信号的频率组成。
此次课程设计也让我更加了解matlab软件在通信系统仿真中的重要性让我更加熟练地运用matlab软件,虽然遇到了许多难题,通过同学和老师的交流学习,让我学会了许多在课堂上没有理解的难点。
6.2对设计的建议
对于课程设计我已经不陌生了,从第一次到现在多多少少觉得课程设计是一个让我们能将一学期学到的知识应用起来,使我们学的科目不再是一门一门,而是一个系统,但是我觉得课程设计更应该注重于实际的做出一样东西,而不仅仅局限于程序以及仿真,希望老师以后可以让我们更多的接触到一些关于硬件方面的设计。
参考文献
[1]樊昌信,曹丽娜.通信原理[s].北京:
国防工业出版社,2006年.
[2]吴大正.信号与系统线性系统分析[s].北京:
高等教育出版社,2004年.
[3]别志松,别红霞.信息与通信系统仿真[s].北京:
北京邮电大学出版社,2010年.
[4]张志勇,杨祖撄.MATLAB教程[s].北京:
北京航空航天大学出版社,2006年.
[5]齐国清,贾新乐.插值FFT估计正弦信号频率的精度分析[N].电子学报,2004年.
[6]刘进明,应怀樵.FFT谱连续细化分析的富里叶变换法[N].振动工程学报,1995年.文档来源网络,版权归原作者。
如有侵权,请告知,我看到会立刻处理。
忽略此处..