簡體   English   中英

在不使用FFT的情況下檢測頻譜中的峰值MATLAB

[英]Detection of peaks in the frequency spectrum without using FFTs MATLAB

假設我有一個信號x(t),是否可以在不使用FFT的情況下檢測頻譜的峰值(即能量含量最高的頻率)?

* PS-我在小波分解中看到了一個叫做scale2freq()的東西。 我在MATLAB幫助頁面上查看了一下,結果最終使我感到困惑。 該功能與頻率表示有關嗎? 如果是,我如何使用它找到峰值頻率?

您可能想要的是一種音高檢測算法,並且在時域或頻域(或兩者都有)中有多種選擇。 請在Google上搜索“音高檢測算法”以獲取更多參考,或查看所選鏈接以進行快速概述:

在時域中,一些簡單的方法是定位自相關函數的峰值。 實際上,自相關在t = 0時最大,然后下一個峰值可以估算出主要周期:

ncount = 10000;
Ts = 0.0001; % Sampling period
t = (1:ncount) * Ts; % Sampling times
f = sin(2*pi*60*t) + 0.1*sin(2*pi*200*t) + 0.01 * randn(1, length(t)); % Signal

R = xcorr(f);
[~, locs] = findpeaks(R);
meanLag = Ts * mean(diff(locs));       
pitch = 1 / meanLag; ===> Will be around 60 Hz

這種方法適用於非常基本的信號,您可能必須根據情況(噪聲水平,周期性,多音等)對其進行優化。 有關更完善的算法,請參見以上參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM