求简单正弦波频率(matlab)

求简单正弦波频率(matlab),matlab,frequency,trigonometry,Matlab,Frequency,Trigonometry,我有一个来自薄膜干涉的相对干净的正弦信号-两个数据向量:光程长度的X轴差和Y轴照明。 我想用matlab中的傅里叶变换求正弦频率。我该怎么做 谢谢 首先,您需要在信号中使用一个窗口hamming,hann,现在您需要的是从前半个幅值平方数据中获得最大值,以找到频率计算采样率*最大指数/长度数据: t = [ 0 : 1 : 100000]; f = 200; % F0 here Fs = 44100;

我有一个来自薄膜干涉的相对干净的正弦信号-两个数据向量:光程长度的X轴差和Y轴照明。 我想用matlab中的傅里叶变换求正弦频率。我该怎么做


谢谢

首先,您需要在信号中使用一个窗口hamming,hann,现在您需要的是从前半个幅值平方数据中获得最大值,以找到频率计算采样率*最大指数/长度数据:

t  = [ 0 : 1 : 100000];          
f  = 200;        % F0 here           
Fs = 44100;                    
data = sin(2*pi*f/Fs*t)';  
data = data .* hanning(length(data));    
Y = fft(data);    
Mag=abs(Y(1:length(data)/2)).^2;    
[a,b]=max(Mag);    
% Result    
Fs*b/length(data)

我建议您阅读和查看MathWorks以及的文档。然后您可能会看到这个StackOverflow问题:。注意,这将显示一个精确的频率\pm Fs/lengthdata,如果Fs不是很大,这可能会很糟糕FFT处理的窗口有多大更好,每个人都知道这种方法不精确,问题并不是说算法需要有多精确,你对结果中是否需要从b中减去1有什么见解吗?也就是说,结果实际上是Fs*b-1/长度数据?我本以为不是这样的,因为你在切掉第一个点后找到了最大索引,但我自己的测试显示需要-1。请看这里:是的,matlab索引从1开始,而不是0,因此matlab中FFT的正确bin可以是max index-1