按位取反加一的新理解——在FFT频分析后如何获得其频率分量

news/2024/7/6 1:36:31 标签: fft, matlab, 存储

 

一、“取反加一”的新理解

在前面的两篇博文中分别讨论的“取反加一”的两个作用。(取反加一应该是按位取反加一,下同)

第一个应用:在博文《如何计算一个有符号数的补码表示?》 (链接http://blog.csdn.net/jbb0523/article/details/6668237)

提到了:若想求一个负数的补码,则对其绝对值进行“取反加一”即可;

第二个应用:在博文《知道某负数补码后如何计算其绝对值?》(链接http://blog.csdn.net/jbb0523/article/details/6692747)

提到了:基想求一个负数的绝对值,则对其“取反加一”即可;

什么叫补码?补码就是负数在计算机中的表示。

在第一个应用中,对负数的绝对值取反加一得到其在计算机中的存储格式,实际上即对正数“取反加一”即可得到与其对应的负数;

在第二个应用中,对负数取反加一得到其绝对值,实际是即对负数“取反加一”即可得到与其对应的正数;

综合以上两点,在计算机中,对一个数进行“取反加一”操作,即对其乘“-1”,即得到相反数。

 

二、在FFT频谱分析后如何获得其频率分量值?

在博文《有关在matlab中对信号采样及频谱的一些解释;复数的频谱,高分辨率谱,高密度谱的一些理解 》(链接http://blog.csdn.net/jbb0523/article/details/7283847)

提到了一个性质,现重述如下:

对于信号s(t)=cos(2*pi*f*t)-j*sin(2*pi*f*t),对其进行符合奈奎斯特采样定理的采样,设采样率为fs,采样点数为N,得到数字信号s(n),n=[0,…,N-1],则对s(n)做DFT变换进行谱分析后得到S(k),k=[0,…,N-1]。观察S(k)的幅度谱,若k=0~N/2-1之间有峰值,则s(t)的频率f在-fs/2~0之间;若k=N/2~N-1之间有峰值,则s(t)的频率f在0~fs/2之间;并且有且只有一个峰值。

计算公式如下:设幅度谱峰值当k=k1时出现,则s(t)的频率为:

 

现在我们假设场景如下:我们得到了信号s(t),我们要知道它的频率f,我们可以对其进行fft运算,然后按照如上公式进行计算得到f,但是上面的公式是一个分段函数,这会给我们的计算带来一定的复杂性,下面阐述一种较为简单的方法。

我们假设N=128,用7bit表示;

那么k1的范围是0~127,如果将k1看成是有符号数,则其范围是0~63和-64~-1;

若对公式变形如下:

说到这儿,有一个性质要明白:对于一组使用n bit进行存储数据来说,如果将其当成无符号数来看,那么它的范围是0~2^n-1;但如果将其当成有符号数来看,那么它的范围是-2^(n-1)~2^(n-1)-1,其中0~2^(n-1)-1仍对应0~2^(n-1)-1,但2^(n-1)~2^n-1则对应-2^(n-1)~-1;其实转换关系也可是这样理解,对前一半的数它是不变的,因为它的最高位是0,因此是正数,这个大家都明白,但对于后一半的数,由于最高位是1,则它们是负数,转换关系是signed=unsigned-2^n;

因此对于N=7来说,它的无符号范围是0~127,而它的有符号范围是-64~63,其中-64~-1对应64~127,即64~127对应64-128~127-128;

 

如果我们将k1视为一个有符号数,则上面的公式可以变形为:

因此,实际上f=fs/N*(-k1),这就好办多了,将一个分段函数变成了一个函数表式。

 

我们若要求频率f,则对信号s(t)进行FFT后,找到峰值对应的位置,将其值视为有符号数,取其相反数,然后乘以fs/N即可,这样做是不是简便了很多了?

 

今天先分析到这儿,啥时候有了新的体会再继续……


http://www.niftyadmin.cn/n/716927.html

相关文章

python做一些好用的小工具_有哪些你不知道的Python小工具

ython作为越来越流行的一种编程语言,不仅仅是因为它语言简单,有许多现成的包可以直接调用。 python中还有大量的小工具,让你的python工作更有效率。 1. 快速共享 HTTP服务器 SimpleHTTPServer是python内置的web服务器,使用8000端口…

域名, 云服务器。

域名商云服务商 以上两个均支持 支付宝 支付。转载于:https://www.cnblogs.com/zhourongcode/p/8532488.html

node.js学习笔记(11) os

Node.js提供了一些基本的底层操作系统的信息,可通过os模块获取。 eg: os-info.js var os require(os);console.log(arch:os.arch()); console.log(cpus:JSON.stringify(os.cpus())); console.log(endianness:os.endianness()); console.log(freememory…

毕业后拉开大家差距的原因

有 人工作, 有人继续上学,大家千万不要错过这篇文章,能看到这篇文章也是一种幸运,真的受益匪浅,对我有很大启迪,这篇文章将会改变我的一生,真的太好了,希望与有 缘人分享&#xff0c…

通过文件读写方式实现Matlab和Modelsim的联合仿真

虽然Modelsim的功能非常强大,仿真的波形可以以多种形式进行显示,但是当涉及到数字信号处理的算法的仿真验证的时候,则显得有点不足。而进行数字信号处理是Matlab的强项,不但有大量的关于数字信号处理的函数,而且图形显…

Python的html和xml解析库Beautiful Soup

网址: http://www.crummy.com/software/BeautifulSoup/

python源程序执行的方式有哪些_python源程序执行的方式有哪几种

执行python程序有如下三种方式: 一、解释器 例如在命令行输入:python D:/Code/Python/Hello.py python的解释器:Cpython,pypy等。 二、交互式 所谓交互式是指直接在终端命令中运行解释器,而不需要输入执行的文件名。 方…

JAVA按位逻辑运算基本教程(2)

2019独角兽企业重金招聘Python工程师标准>>> 在本例中,变量a与b对应位的组合代表了二进制数所有的 4 种组合模式:0-0,0-1,1-0 ,和1-1 。“|”运算符和“&”运算符分别对变量a与b各个对应位的运算得到了…