我在Matlab中有2个800x1数组,其中包含我的幅度与频率数据,一个数组包含幅度,另一个包含相应的频率值。我想找到振幅减小到其最大值一半的频率。
最好的方法是什么?我想我的两个主要问题是:如果“半幅值”值位于两个数据点之间,我该如何找到它? (例如,如果我正在寻找的值是5,如果它位于两个数据点(例如4和6)之间,我怎么能“在我的数据中找到它?”
如果我找到'半幅值'值,我该如何找到相应的频率值?
提前感谢您的帮助!
答案 0 :(得分:2)
您可以通过
找到您感兴趣的点附近的索引idx = magnitudes >= (max(magnitude)/2);
然后你可以通过
查看所有相应的频率,包括峰值disp(frequencies(idx))
如果您希望查看更少的无关内容,可以为idx
计算添加更多条件。
但是,您对查找确切频率的担忧更难回答。它将在很大程度上取决于信号的性质以及lineshape of your window function。一般来说,你可能最好用几个点来表征你的峰值,然后做一些曲线拟合。您是否试图通过任何机会计算谐振滤波器的Q值?
答案 1 :(得分:0)
如果没问题,可以进行简单的线性插值。查找发生丢弃的段并计算中间值。如果您希望信号中存在噪声,那将是不行的。
idx = find(magnitudes(2:end) <= (max(magnitudes)/2) & ...
magnitudes(1:end-1) >= (max(magnitudes)/2));
mag1 = magnitudes(idx); % magnitudes of points before drop
mag2 = magnitudes(idx+1); % magnitudes of points after drop below max/2
fr1 = frequencies(idx); % frequencies just before drop
fr2 = frequencies(idx+1); % frequencies after drop below max/2
magx = max(magnitudes)/2; % max/2
frx = (magx-mag2).*(fr1-fr2)./(mag1-mag2) + fr2; % estimated frequencies
您也可以使用INTERP1功能。