关于fftshift引发的问题与思考
现象阐述
在看余弦函数做傅里叶变换的时候,发现假如不加fftshift,正轴上就会有两个频率:
close all; clear; clc;
fs = 300; %采样率大于200
t = 0:1/fs:1; %定义采样点
s = cos(2*pi*50*t); %采样后的信号序列subplot(211);
%%figure
plot(t,s);
xlabel('t');
ylabel('幅度');
title('余弦函数');%%figure
F1 = fft(s); %fft
f1 = linspace(0,fs,length(t)); %频谱横轴
subplot(212);
plot(f1,abs(F1));
xlabel('f');
ylabel('幅度');
title('余弦函数频谱');
结果如下
虽然实信号是双边带的,但是这里的频率都是正数。可能因为这样所以才会需要fftshift将另一半搬移到负频谱。
原因分析
之前看到一篇关于fftshift的文章 ,它里面的图用的很好,一下子启发到了我,在这里写一下我的理解
首先看(a)图的时域信号图,现实中根本不会有负时间,要想得到负时间上的频谱,可以通过时域采样,频域延拓的方式来得到。如(b)图的频谱图,负频率 -Fs/2 到 0 的频谱部分就正好被延拓到了正频率 Fs/2 到 Fs 的那部分了。
最后通过N点DFT,截取到的图,就是©中的频谱图。也就解释了一个正弦函数为什么在正轴上有2个正频率的原因。
一点自己的看法
针对上面的现象以及要用fftshift的原因,我看网上大都用混叠两字形容,我觉得这可能会难以理解,因为频率虽超过奈奎斯特采样频率,但是混频的现象却没发生。
参照论文 signal Processing for TDM MIMO FMCW Millimeter-Wave Radar Sensors中的一段原话:
我的理解是:中频信号fIF 在[ Fs /2 ,Fs ] 上的频谱 ,由于FIF高于奈奎斯特采样频率,所以要以别名(alias)的形式对应负频率fIF -FS 的频谱(或者是以别名的形式出现在负频率)
拓展:关于复信号
复信号是单边带的。复信号也会有负频率。
close all; clear; clc;
fs = 200; %采样率200
t = 0:1/fs:1; %定义采样点
s1 = exp(-1j*2*pi*50*t); %采样后的信号序列,信号频率为50
s2 = exp(1j*2*pi*50*t);%%figure
subplot(221);
plot(t,s1);
xlabel('t');
ylabel('幅度');
title('exp(-1j*2*pi*50*t)');%%figure
F1 = fft(s1); %fft
f1 = linspace(0,fs,length(t)); %频谱横轴
subplot(222);
plot(f1,abs(F1));
xlabel('f');
ylabel('幅度');
title('频谱');%%figure
subplot(223);
plot(t,s2);
xlabel('t');
ylabel('幅度');
title('exp(1j*2*pi*50*t)');%%figure
F2 = fft(s2); %fft
f2 = linspace(0,fs,length(t)); %频谱横轴
subplot(224);
plot(f2,abs(F2));
xlabel('f');
ylabel('幅度');
title('频谱');
当采样频率为200Hz,复指数信号频率为-50Hz时,其频谱却显示它频率为150Hz,原因可见上面原因分析部分。
关于fftshift引发的问题与思考相关推荐
- C/C++ 由int (*p)[5]与int *p[5]引发的学习与思考
由int (*p)[5]与int *p[5]引发的学习与思考 最近在大一上复习指针这部分时,有个C指针的特例一直困扰着我.我查阅了许多课本,也看了CSDN上许多大佬的理解.自我感觉受益匪浅,现记录下自 ...
- 一次洗脚引发的线程池思考
一次洗脚引发的线程池思考,文末有惊喜 上周末和好朋友大凯子约好周末去洗脚放松一下,毕竟忙了一周了,又加了几天班,身心疲惫,好的身体是革命的本钱,男人可得好好爱惜自己的身体,不能倒在革命的道路上,于是第 ...
- 故障分析 | 报错 ERROR 5270 -HY000-- object not in RECYCLE BIN 引发的几个思考
作者:姚嵩 不知道是地球人还是外星人,知道的可以留言告诉小编- 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源. 现象: 通过show recycle ...
- 实验室值日现象引发的一些管理思考
我们实验室值日,有一个基本要求,大家值日完之后需要使用签字笔进行签字确认(签字笔提前放置在实验室了).看似很简单的事情,今天在查看实验室值日的过程中,却发现一个现象:值日同学签字使用的是白板笔(很粗) ...
- 一个JDK线程池BUG引发的GC机制思考
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:空无 来源:https://urlify.cn/63QrYv ...
- sscanf函数中类型不匹配警告引发的BUG和思考
2019独角兽企业重金招聘Python工程师标准>>> BUG产生背景 项目开发中的在对网络的IP等地址进行协议封装的处理过程中,我使用了如下的一段代码: buff[0] = con ...
- zookeeper安装启动报错引发的版本取用思考
今天在学习Gitee上clone的项目,其中一个需要按照zookeeper,然后从博客园.CSDN.百度等搜索到一些教程,并按此安装,因为是Windows环境,步骤到挺简单,大致如下: 1.从zook ...
- C++11中的时间库std::chrono(引发关于时间的思考)
文章目录 前言 chrono 的概况 chrono 的核心内容 duration clock system_clock steady_clock time point 关于时间的思考 时间函数思考 总 ...
- 由细节引发的企业文化思考
文/于敦德 一些公司往往过于关注战略,很少去关心细节问题.创业这些年,我对于细节深有体会,尤其是员工越来越多,细节就越显重要.我们内部办公都是用邮件来沟通,有一个细节是一封邮件发出去后,大家收到后总会 ...
- 幽灵代码删库跑路引发的分支模式思考
Photo @ Akshar Dave 文 | 故知 背景--讲个真实的"鬼"故事 菜鸟 CTO 线研发效能团队开发了一个大促协同平台,来提高大家在处理大促相关工作时的协同效 ...
最新文章
- cocos2d+lua实现帧动画播放
- Spark系列-初体验(数据准备篇)
- C语言实现哈密尔顿hamiltonian算法(附完整源码)
- 从Flash到Silverlight进阶教程-用代码来创建动画
- python返回菜单_返回上一菜单
- 【英语学习】【WOTD】largesse 释义/词源/示例
- Service Started!!!-end In Service while
- STM32+SIM800C采用MQTT协议登录OneNet上传温湿度、MQ2烟雾浓度、GPS数据
- android内部dex解析,DEX文件解析---1、dex文件头解析
- 阿里云免费SSL证书续费步骤 TOMCAT
- 函数极限和无穷大 函数各种情况极限的定义
- 将exe和dll文件打包成单一的启动文件
- 雷塞DMC1380的使用
- IOS使用照相机的功能
- 重入锁-ReentrantLock
- PX4 1.12版本后启用lpe导致飞控启动失败的问题的解决办法
- Oculus Rift 渲染
- Overview PPT 类型 PPT 制作流程
- 四川大学计算机网络课件,四川大学计算机网络课件3
- 黑盒测试用例设计--因果图法