david1983 发表于 2009-4-25 00:31

菜鸟请教一个很简单的关于FFT的问题!怎样用FFT求频率!

大家好,我是菜鸟,我是学计算机的,但是最近在做一个关于通信的项目,遇到一个很简单的问题,但是我没有多少时间来学习,所以请大家帮帮我吧。非常感谢!

我现在要用FSK做一个数据传输。我现在已经用c 模拟出了一个采样率为44100的sin波,假设我用两个频率对数据编码,f1 and f2, f1 表示 0 and f2 表示 1,得到一组采样数据。 现在我不知道怎样才能解码,因为我完全不懂FFT。我想知道在我用FFT对信号进行 处理以后,怎样才能得到原来的f1和f2。因为我在程序中测试了一下,得到的数据好像没有规则。

这个应该不难,但是我怎样也搞不出来,我在论坛里面搜索了一下,可是还是没有明白……所以希望大家能指点我一下。非常感谢!!!

shaochongjie 发表于 2009-4-25 10:56

假设信号存在变量X中,共有N个值,采样频率fs
X=abs(fft(x));
plot((1:N/2)*fs/N,X(1:N/)*2/N);
图上有幅值处的x的坐标即你要求的频率了,纵坐标为幅值。

david1983 发表于 2009-4-27 15:29

本帖最后由 wdhd 于 2016-9-18 13:22 编辑

原帖由 shaochongjie 于 2009-4-25 10:56 发表
假设信号存在变量X中,共有N个值,采样频率fs
X=abs(fft(x));
plot((1:N/2)*fs/N,X(1:N/)*2/N);
图上有幅值处的x的坐标即你要求的频率了,纵坐标为幅值。
谢谢回复,这个是在matlab中的计算吧?对不起我不懂matlab, 我想知道如何在c语言中实现你上面说的功能。所以我想知道在信号做完FFT以后的值的物理意义。在一个信号里我有N个采样,每个采样对应一个值,是这个采样的振幅(我想应该就是论坛里说的峰值?),我还知道采样频率是44100HZ,我怎样能根据这些数据计算出这个信号的频率呢?应该是有一个公式吧?对于这一个有N个采样的信号,做完FFT以后我得到的应该是N个值吧?这些值代表的是什么呢?

我比较菜鸟,所以请讲的清楚点!
非常感谢!!

david1983 发表于 2009-4-27 23:29

解决了。
频率应该是 x*fs/N, x是FFT以后的最大值的index。
再次感谢!
页: [1]
查看完整版本: 菜鸟请教一个很简单的关于FFT的问题!怎样用FFT求频率!