FFT理解
*连续时间-周期性信号频谱
clc;clear;close all
N = input('N= ');
T = 0.05;
n = 1:N;
%原始数据输入
D = 2*pi/(N*T);
%计算分辨率
xa=cos(10*n*T);
%有限长余弦序列
Xa=T*fftshift(fft(xa,N)); %Xa(1)
%求x(n)的DFT,移动到对称位置
k=floor(-(N-1)/2:(N-1)/2);
%对于w=0对称的奈奎斯特频率下标向量
TITLE=sprintf('N=%i,L=%i',N,N*T);
%变数值为格式控制下的字符串
plot(k*D,abs(Xa));
axis([-20,20,0,max(abs(Xa))+2]);
xlabel('\Omega');ylabel('|X(j\Omega)|')
title(TITLE);
grid;
关于 fftshift函数:用于将数组进行循环移位,以达到对fft结果的负分量进行移位,方便结果的绘制;
https://ww2.mathworks.cn/help/matlab/ref/fftshift.html
*连续时间-非周期信号的频谱
综上: 抽样间隔T要选择足够小,以避免频谱的混叠失真,而截断长度L=NT要选择足够大,以减少截断效应,提高频率分辨率。建议采用以下步骤:
1:先选定L不变,T逐步减少,直到频谱混叠的影响逐步减少到可以容忍的程度(研究-π/T或π/T处的频谱值),得到此时的T值;
2:增加L值(实质上就是增加有效数据长度),使得截断效应减少,这时采用上面已求的最小T值。直到频谱的差别很小时,得到此时的L值。
所以只需赋L/T两个变量值,N=L/T就能随之改变,总之要赋值N/L/T中两个变量即可。
编程下例:
clear;clc
T0=[0.05,0.02,0.01,0.01]; %四种抽样间隔
L0=[10,10,10,20]; %四种信号记录长度,N=L0(i)/T0(i)
for i=1:4
T=T0(i); N=L0(i)/T0(i); %按顺序选用T和L
D=2*pi/(N*T); %频率分辨率
n=0:N-1;
x=exp(-0.02*n*T).*cos(6*pi*n*T)+2*cos(14*pi*n*T); %序列
k=floor(-(N-1)/2 : (N-1)/2);
X=T*fftshift(fft(x));
[i,X(i)] %检测四次循环在奈奎斯特频率处的幅度
subplot(2,2,i),plot(k*D,abs(X));
xlabel('模拟角频率(rad/s)');ylabel('幅度');grid
axis([min(k*D),max(k*D),0,inf]); %坐标范围
str=['T=',num2str(T),'N=',num2str(N)];title(str); %标题显示抽样间隔和FFT点数N
end
FFT理解的更多相关文章
- FWT(快速沃尔什变换)小结
在多项式卷积的处理中,我们实际上实现的是下面的一个式子 \[ C_k=\sum_{i+j=k}A_iB_j \] 然而事实上有些和(sang)蔼(xin)可(bing)亲(kuang)的出题人,并不会 ...
- UR#34. 多项式乘法
#34. 多项式乘法 统计 描述 提交 自定义测试 这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入格式 第一行两个整数 nn 和 mm,分别表示两个多项式的次数. 第二行 n+1n+ ...
- 2019 HL SC day10
10天都过去了 4天都在全程懵逼.. 怎么可以这么难啊 我服了 现在想起依稀只记得一些结论 什么 反演? 什么后缀自动机?什么组合数的应用?什么神仙东西 ,不过讲课人的确都是神仙.(实名羡慕. mzx ...
- 一个蒟蒻对FFT的理解(蒟蒻也能看懂的FFT)
建议同学们先自学一下"复数(虚数)"的性质.运算等知识,不然看这篇文章有很大概率看不懂. 前言 作为一个典型的蒟蒻,别人的博客都看不懂,只好自己写一篇了. 膜拜机房大佬 HY 一. ...
- 卷积、矩阵乘积、高斯模糊滤波(降噪)、空域计算(2D卷积计算)、频域计算(FFT)的理解
矩阵乘积:对应行列对应元素相乘的和组成新的矩阵 两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义.如A是m×n矩阵和B是n×p矩阵,它们的乘积C是一个m×p矩阵 并将此乘积记为: ...
- Matlab 之 FFT的理解和应用
网上看了一些大牛的关于FFT的见解,加上自己的一点儿理解,针对以下这几个问题来加深对FFT的理解. 不知道大家有没有类似以下几点的困惑: 问题的提出 对于1秒钟输出的连续信号,使用采样率Fs不同,就会 ...
- DFT到FFT的理解
DFT简化计算理解(FFT) DFT: WN=e^(-j*2*pi/N) DFT复杂度o(N^2) 降低与N^2的依赖 使N = LM (L^2+m^2 <= N^2) N点DFT分解为M ...
- FFT算法理解与c语言的实现
完整内容迁移至 http://www.face2ai.com/DIP-2-3-FFT算法理解与c语言的实现/ http://www.tony4ai.com/DIP-2-3-FFT算法理解与c语言的实现 ...
- 关于FFT的一些理解,以及如何手工计算FFT加深理解和验证正确性
总结缺少逻辑性和系统性,主要便于自己理解和记忆 关于一维FFT的 于是复系数Cn是图像傅里叶变换的yn列向量 于是我们看到最后引入,Cn这个复系数的模来表征频率波的振幅记为Sn(即简谐波叠加的数量 然 ...
随机推荐
- 一个使用Jmeter做接口性能测试的实战案例
1 安装并配置Jmeter Jmeter的安装不在这里阐述,安装步骤非常简单. 直接进入主题 1.1 数据库连接配置 由于测试过程需要调用数据库获取响应部署数据,因此需要先建立与数据库的连接. 如果不 ...
- AngularJS参数绑定 --AngularJS
AngularJS参数绑定有三种方式.第一种插值表达式“{{}}”表示,第二种在标签中使用ng-bind属性表示,第三种针对input框(标签)的ng-module属性表示.针对三种参数绑定方式,设定 ...
- Vue.js示例:GitHub提交(watch数据,created钩子,filters过滤); 网格组件(功能:1.检索,2排序);
GitHub提交 codePen: https://codepen.io/chentianwei411/pen/wEVPZo 注意:频繁看案例,可能会被限制. 重点: 表单输入绑定, 单选按钮的使 ...
- ASP.NET发送电子邮件(转)
原始地址:http://www.cnblogs.com/ForEvErNoME/archive/2012/06/05/2529259.html(有代码下载,博主真是有操守) 1.补充知识 (1)POP ...
- Spring Batch @EnableBatchIntegration 注解
设置一个远程分块任务需要定义一系列的 beans: 一个连接工程来从消息中间件中获得连接,消息中间件包括有(JMS,AMQP 和其他) 一个 MessagingTemplate 来从主向从发送消息, ...
- python记录_day018 md5加密
MD5 用法: import hashlib obj = hashlib.md5(加盐) obj.update(明文的bytes) obj.hexdigest() 获取密文 示例: import ha ...
- php导出大数据scv
1.我系统要导出30w的数据,刚开始我使用的是: ini_set('memory_limit', '1024M');set_time_limit(0); header("Content-ty ...
- c++ shared_ptr的使用
shared_ptr.是c++为了提高指针安全性而添加的智能指针,方便了内存管理.功能非常强大,非常强大,非常强大(不单单是shared_ptr,配合week_ptr以及enable_share_fr ...
- MSMQ 概述
MSMQ 概述 1) MSMQ概述 MSMQ 表示微软消息队列服务.MSMQ 可以工作在在线或者离线场景,并提供异步编程功能.如果客户端离线,MSMQ将会是最合适的方法,这是因为服务端不需要等待客户端 ...
- Node.js的环境搭建
Node.js 可以理解为服务端的JavaScript.是基于Chrome JavaScript 运行时的一个平台. 是一个事件驱动I/O,基于Google V8 引擎,执行起来速度特别快,性能非常好 ...