b**********l 发帖数: 116 | 1 假如我simulate一个w=1的正弦信号:
x=linspace(-10,10,200);
y=sin(x);
我想用Matlab看一下在频率谱图里面,w=1那正好有个1的值,其他的频率是0.这个怎么
搞啊?
stem(fftshift(fft(y)))
可以吗?
目的:我有一段音频,比如是64kHz和130kHz混合的,但这两个频率我事先不知道。我
想用Maltab里面的傅立叶变换函数画个图看一下这两个峰值在哪。请问这个怎么搞?
多谢。。。 |
e***y 发帖数: 4307 | 2 你的音频fft后的spectrum找峰值就好了。需要自动找峰值的话写个peak finder吧
【在 b**********l 的大作中提到】 : 假如我simulate一个w=1的正弦信号: : x=linspace(-10,10,200); : y=sin(x); : 我想用Matlab看一下在频率谱图里面,w=1那正好有个1的值,其他的频率是0.这个怎么 : 搞啊? : stem(fftshift(fft(y))) : 可以吗? : 目的:我有一段音频,比如是64kHz和130kHz混合的,但这两个频率我事先不知道。我 : 想用Maltab里面的傅立叶变换函数画个图看一下这两个峰值在哪。请问这个怎么搞? : 多谢。。。
|
z*****n 发帖数: 7639 | 3 你这个采样周期可以出现\omega=1的频谱么?
如果要得到你想要的结果,x必须是以1/2pi为周期吧。我觉得是
没法实现的。。。
【在 b**********l 的大作中提到】 : 假如我simulate一个w=1的正弦信号: : x=linspace(-10,10,200); : y=sin(x); : 我想用Matlab看一下在频率谱图里面,w=1那正好有个1的值,其他的频率是0.这个怎么 : 搞啊? : stem(fftshift(fft(y))) : 可以吗? : 目的:我有一段音频,比如是64kHz和130kHz混合的,但这两个频率我事先不知道。我 : 想用Maltab里面的傅立叶变换函数画个图看一下这两个峰值在哪。请问这个怎么搞? : 多谢。。。
|
b**********l 发帖数: 116 | 4 多谢。。。我就想知道fft画出的图,那些峰值是就是对应的频率值么?还是这些频率
值的函数什么的(然后还得自己估算实际频率值)?
(比如就是y=sin(x)的fft画出来之后,是就是w=1那正好有个峰,别的地方几乎都是0
么?我试了一下fftshift(fft(y))貌似不是,不过当然很有可能我编错了。。。)
【在 e***y 的大作中提到】 : 你的音频fft后的spectrum找峰值就好了。需要自动找峰值的话写个peak finder吧
|
b**********l 发帖数: 116 | 5 这个还和采样周期有关么?(我觉得只是越多越好,所以就取了个n=200)
当然我面临的具体问题信号已经给定了,不用自己simulate了,所以其实就直接关注怎
么把所含的频率找出来就行了。。
【具体问题是:手机上的1-9按键是由(697,770,853)Hz和(1209,1336,1477)Hz这两个向
量里面的频率各取一个组成的。所以每个数字对应两个频率。
现在我有一个按电话号码的音频文件,想看一下按的是哪几个号码(按的时候比如按0.
5秒,等1秒之类的间隔)。
所以我是不是就应该把音频分成10份(美国的电话号码有10位),按照上面的方法fft
一下,看看峰值在哪两个频率上,就对应是按的几?】
多谢! |
e***y 发帖数: 4307 | 6 哦,我知道你的问题所在了。fft出来的spectrum横轴是normalized frequency也就是
没有单位的。你要用采样频率把它转换为analog frequency。fft是dft而dft出来的
spectrum从-fs/2到fs/2,中间隔了n点,n是fft长度。例如你fft的第i点对应的频率是
i*fs/n.
这些你看看matlab fft文档就明白了。
0.
fft
【在 b**********l 的大作中提到】 : 这个还和采样周期有关么?(我觉得只是越多越好,所以就取了个n=200) : 当然我面临的具体问题信号已经给定了,不用自己simulate了,所以其实就直接关注怎 : 么把所含的频率找出来就行了。。 : 【具体问题是:手机上的1-9按键是由(697,770,853)Hz和(1209,1336,1477)Hz这两个向 : 量里面的频率各取一个组成的。所以每个数字对应两个频率。 : 现在我有一个按电话号码的音频文件,想看一下按的是哪几个号码(按的时候比如按0. : 5秒,等1秒之类的间隔)。 : 所以我是不是就应该把音频分成10份(美国的电话号码有10位),按照上面的方法fft : 一下,看看峰值在哪两个频率上,就对应是按的几?】 : 多谢!
|
b**********l 发帖数: 116 | 7 太给力了。。。貌似您说的和那帮助文档上写的就是我想要的例子。。。我仔细学习一
下。。。尤其是为啥它非要搞2的幂次当长度。。。
非常感谢。。。
【在 e***y 的大作中提到】 : 哦,我知道你的问题所在了。fft出来的spectrum横轴是normalized frequency也就是 : 没有单位的。你要用采样频率把它转换为analog frequency。fft是dft而dft出来的 : spectrum从-fs/2到fs/2,中间隔了n点,n是fft长度。例如你fft的第i点对应的频率是 : i*fs/n. : 这些你看看matlab fft文档就明白了。 : : 0. : fft
|
e***y 发帖数: 4307 | 8 用2的power是因为fft是radix 2算法。如果n不是2的power会有zero padding
【在 b**********l 的大作中提到】 : 太给力了。。。貌似您说的和那帮助文档上写的就是我想要的例子。。。我仔细学习一 : 下。。。尤其是为啥它非要搞2的幂次当长度。。。 : 非常感谢。。。
|