【问题标题】:finding simple sine wave's frequency (matlab)找到简单的正弦波的频率(matlab)
【发布时间】:2013-10-26 20:24:31
【问题描述】:

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

谢谢!

【问题讨论】:

标签: matlab frequency trigonometry


【解决方案1】:

首先你需要在你的信号中使用一个窗口(汉明,汉恩),现在你所需要的就是从前半部分幅度平方数据中获取最大值,以找到频率计算“采样率 * 最大值索引/长度数据:

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)

【讨论】:

  • 注意,这将显示\pm Fs/length(data) 的准确频率,如果Fs 不是很大,这可能会很糟糕
  • 多大的窗口用FFT处理比较好,大家都知道这个方法不准确,问题没说算法需要多准确
  • 您是否知道结果中是否需要从b 中减去1? IE。结果实际上是Fs*(b-1)/length(data)?我会认为不是这样,因为您找到了最大索引 after 您删除了第一点,但我自己的测试显示 -1 是必需的。 (见这里:codeshare.io/q9wDH
  • 是的,matlab 索引从 1 开始,而不是 0,因此 matlab 中 FFT 的正确 bin 可以是 max index-1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2023-04-06
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多