2017-11-18 213 views
1

我是Matlab和信號處理新手。我在定義頻譜圖處理的頻率範圍時遇到了問題。當我繪製.wav音頻數據的聲譜圖時,y軸的頻率從0到23 kHz左右。我正在尋找的有用數據是在200-400赫茲的範圍內。我的代碼片段是:在Matlab頻譜圖函數中定義頻率極限的建議?

[samFa, fs] = audioread('samFa.wav'); %convert audio to numerical data 
samFa = samFa(:,1); %take only one channel of numerical output 
spectrogram(samFA,2205,1200,12800, fs,'yaxis','MinThreshold',-80); 

我不希望是運行到一個問題,並立即放棄和崗位重複的問題StackOverflow的一些noobie,所以我可以我做了儘可能多的挖掘,但我在智慧的結尾。

  • 我搜索了參數或方法的文檔,讓Matlab只分析數據的一個子集或範圍,但什麼都沒發現。此外,在所有示例中,頻率範圍似乎都自動適應數據集。
  • 我知道有可能只是計算的頻譜對頻率的整個範圍內,然後除去所有的不必要的數據通過截取或手動更改在圖中本身的限制,但改變繪圖範圍不與所述數值幫助數據。
  • 我去了很多類似的問題尋找,並從2012年的所有方式找到了答案:Can I adjust spectogram frequency axes? 其中建議的答案是導入頻譜圖的特定頻率矢量進行分析。我試圖通過200和400,以及其他一些測試範圍之間的整數值的載體,但得到的錯誤:

    Error using welchparse>welch_options (line 297) 
    The sampling frequency must be a scalar. 
    

    我試圖傳遞參數在功能不同的地方,有沒有用,並且在文檔中沒有看到關於此參數的任何信息,這讓我相信這個功能有可能在2012年和現在之間的某個時候被刪除。

  • 當繪製頻譜圖而不提供信號頻率時,Matlab提供了一個歸一化頻譜圖,它只提供一個更小的數據窗口,我可以通過視覺來評估覆蓋0:5kHz(音頻中泛音的僞像)的數據,所以我知道MATLAB是沒有找到高於此範圍,使頻率的任何數據範圍到20kHz的
  • 我一直在努力學習一些信號處理這個項目,所以我相信奈奎斯特頻率應該是最高頻率傅立葉變換能夠分析爲採樣頻率的一半。我的記錄頻率採樣在44,100赫茲,頻譜範圍是圍繞22或23千赫,導致我相信,它的Matlab的是注意到我的採樣頻率,並假設它需要分析了這麼高的範圍。

對於我的工作,我做我需要製作數千譜圖到再通過更進一步的分析處理,所以它是非常耗時的Matlab來進行處理這麼多不必要的數據,我希望有在Matlab中以某種方式來解決這個問題。

對不起,很長的帖子,但我想充分說明我的問題,並表明我已經做了力所能及的工作,我可以轉向尋求幫助之前解決問題。非常感謝你。

回答

2

獲取軸手柄,並設置可視範圍有:

spectrogram(samFA,2205,1200,12800, fs,'yaxis','MinThreshold',-80); 
ax=gca; 
ylim(ax, [0.2,0.4]); %kHz 

如果你想計算特定頻率範圍,以節省時間,你最好使用goertzel

f = 200:10:400; 
freq_indices = round(f/fs*N) + 1; 
dft_data = goertzel(data,freq_indices); 
+0

請注意,如果你需要比數多(N),格策爾過濾器爲您的頻率分辨率的要求,採用大小爲N的FFT和扔掉所有不需要的頻譜通常更快。 – hotpaw2