FFT的分析以及matlab实验
FFT(Fast Fourier Transformation),即为快速傅氏变换,是离散傅氏变换(DFT)的快速算法。
采样得到的数字信号,做FFT变换,N个采样点,经过FFT之后,就可以得到N个点的FFT结果。为了方便进行FFT运算,通常N取2的整数次方。
假设信号:
S=2+3*cos(2*pi*50*t-pi*30/180)+1.5*cos(2*pi*75*t+pi*90/180)
它含有:2V的直流分量
频率为50Hz、相位为-30度、幅度为3V的交流信号
频率为75Hz、相位为90度、幅度为1.5V的交流信号
假设以采样频率为Fs(200HZ)对信号进行采样,信号频率F(0HZ,50HZ,75HZ),共采样点数为N(256),那么FFT之后结果就是一个为N(256)点的复数。每一个点就对应着一个频率点。即有N(256)个频率点,第一个点表示直流分量(0HZ),第N+1个点(不存在,事实最后一个点为第256点)表示采样频率Fs(200HZ),N个间隔平分采样频率Fs,每个点的频率依次增加。某点n所表示的频率为:Fn=(n-1)*Fs/N。
点n为(1,2,3,4,········256)对应的频率分别为
(0,200/256,2*200/256,3*200/256,..........127*200/256)HZ.
由上面的公式可以看出,Fn所能分辨到频率为为Fs/N(200/256),即两点的间隔位200/256.
如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。
继续回到例子,有三个频率点,0HZ,50HZ,75HZ,应该在点n(1,65,97)其所代表的频率为(0,64*200/256,96*200/256)即(0,50,75)上出现峰值。结合matlab实验拿到这些值综合分析峰值与原始信号的关系。
clf;
fs=200;N=256; %采样频率和数据点数
n=(0:N-1);
t=n/fs; %时间序列
S=2+3*cos(2*pi*50*t-pi*30/180)+1.5*cos(2*pi*75*t+pi*90/180); %信号
y=fft(S,N); %对信号进行快速Fourier变换
mag=abs(y); %求得Fourier变换后的振幅
f=n*fs/N; %频率序列
subplot(2,1,1),plot(f,mag); %绘出随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('200的采样频率');grid on;
subplot(2,1,2),plot(n,mag); %绘出随频率变化的振幅
xlabel('频率点');
ylabel('振幅');title('256个数据点');grid on;

拿到第1,65,97点的数据。 no.1: 512.000000000001
no.65: 332.553755053224 - 192.000000000001i
no.97: 2.40097106720006e-12 + 192.000000000000i
结合数据可得:计算三个点的幅值:1点 512 65点 384 97点 192
分析数据可得:直流分量为512/N=512/256=2;
50Hz信号的幅度为:384/(N/2)=384/(256/2)=3;
75Hz信号的幅度为192/(N/2)=192/(256/2)=1.5。可见,从频谱分析出来的幅度是正确的。
计算三点相位信息:直流信号没有相位信息; 65点 :arctan(-192, 332.55)=-0.5236 ;97点: arctan(192, 2.4e-12)=1.5708
单位为弧度转换为角度:65点: 180*(-0.5236)/pi=-30.0001 ;97点:180*1.5708/pi=90.0002
总结:假设FFT之后某点n用复数a+bi表示,那么这个复数的模就是An=sqrt(a*a+b*b),相位就是Pn=arctan(b,a)。根据以上的结果,就可以计算出n点(n≠1,且n<=N/2)对应的信号的表达式为:An/(N/2)*cos(2*pi*Fn*t+Pn),即2*An/N*cos(2*pi*Fn*t+Pn)。对于n=1点的信号,是直流分量,幅度即为A1/N。
FFT的分析以及matlab实验的更多相关文章
- 视频分析(MATLAB)——MV分镜头图像分类
引言:一个MV视频是有很多帧图像组合而成的,而一支MV是有多少个分镜头场景组合而成的呢?由MATLAB如何自动实现? 以<Love You Like A Love Song>的MV为例(这 ...
- 超精讲-逐例分析 CSAPP:实验2-Bomb!(下)
好了话不多说我们书接上文继续来做第二个实验下面是前半部分实验的连接 5. 第五关 首先感觉应该是个递归问题 /* Round and 'round in memory we go, where we ...
- stm32F103RCT6使用FFT运算分析波形详解(非常新手)
最近学校电赛院队招新,出的招新题就是低频示波器的.之前一直没有弄懂FFT,借着这次机会实现了一下. FFT原理详解 FFT,就是快速傅里叶变换,这个操作能够将时域信号转化成频域信号,然后对信号进行分析 ...
- stroop效应matlab实验
1 打开matlab,打开test1.m 点击运行,若出现选择 更改文件夹 2 引导界面 (在这个界面,只许用户鼠标点击开始,其余的别乱按按键. 记得将打字法关掉,切换到小写) 3 做题界面 根据颜 ...
- 20179209《Linux内核原理与分析》安全类实验答疑
实验一 题目 Nmap 配合 Metasploit 进行端口扫描 问题 Nmap怎么配合Metasploit进行端口扫描? 回答 这里的Nmap配合Metasploit进行端口扫描是指在Metaspl ...
- 利用Gabor变换法分析纹理图像 matlab代码实现
Gabor变化属于加窗傅里叶变换,Gabor函数可以在频域不同尺度.不同方向上提取相关的特征.Gabor函数与人眼的生物作用相仿,所以经常用于纹理识别上,并取得了较好的效果. 二维Gobor滤波函数: ...
- 《0day安全-软件漏洞分析技术》实验笔记2
实验 3.4 通用shellcode 工具 Windows XP SP3 Visual C++ 6.0 OD IDA 源代码 见随书代码,参考:https://github.com/jas502n/0 ...
- 《0day安全-软件漏洞分析技术》实验笔记1
Crack 小实验 工具 Dev C++(书上使用的VS) IDA_Pro_v7.0 Ollydbg LordPE 010 editor 使用IDA打开文件 找到程序分支点 空格跳转到汇编界面 得到V ...
- linux内核分析第二次实验
http://blog.sina.com.cn/s/blog_78e559950102wnqp.html
随机推荐
- AES加密算法C++实现
我从网上下载了一套AES加密算法的C++实现,代码如下: (1)aes.h #ifndef SRC_UTILS_AES_H #define SRC_UTILS_AES_H class AES { pu ...
- html5之history对象 控制浏览器前进或后退事件
一.摘要: 总结用history对象操作浏览器的历史记录的方法,在项目中使用的是mui框架,总结中包括我在实际项目中遇到的问题. 二.总结: 实现效果: 实现代码: 上面的编辑页面加载的时候就要先调用 ...
- Python的第三天
一.字典 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示: ...
- 转贴:让Windows 2008 R2 64bit支持ASP.NET 1.1应用程序
随着 Windows Server 2003 的支持期限到期, 最近有很多企业将目前很多的 Windows Server 2003 升级到 Windows 2008 R2. 之前有许多 Web App ...
- js对话框5秒自动消失
使用了easyui的对话框控件 <html> <head> <title>5秒后关闭对话框</title> <meta http-equiv=&q ...
- Thread.join简单介绍
百度了一下,终于明白了.这个解释最简单: 前提:join()方法肯定是被某个线程调用的. A线程正在执行,突然执行的时候碰到了B.join(), 那么,A线程就必须要等到B线程执行完之后才能执行. ...
- Random
/* * Random:产生随机数的类 * * 构造方法: * public Random():没有给种子,用的是默认种子,是当前时间的毫秒值 * public Random(long seed):给 ...
- 关于32位windows与4GB内存的那些事儿
参考:1 Physical Address Extensionzh.wikipedia.org/wiki/PAEen.wikipedia.org/wiki/Physical_Address_Exten ...
- Oracle Merge备忘示例
Oracle的merge语法非常实用,用于Insert.Update判断情况.以下是自己书写的一个示例,以免时间长了语法形式忘记了. MERGE INTO T_FR_GUOSZX T USING (S ...
- 配置grunt进行css、js的检查、合并和压缩
现在会进行代码的合并和压缩已成为前端人员的必备知识,那么现在来介绍一个grunt的工具.grunt是个风靡世界的工具,它的首页是 http://www.gruntjs.net 这是个中文网站,有文档 ...