程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 信號-python:對一個波形做傅裡葉變換,能得到整個頻譜,怎麼提取其中的頻率分量呢?

信號-python:對一個波形做傅裡葉變換,能得到整個頻譜,怎麼提取其中的頻率分量呢?

編輯:編程綜合問答
python:對一個波形做傅裡葉變換,能得到整個頻譜,怎麼提取其中的頻率分量呢?

import wave
import struct
import numpy as np

if name == '__main__':
data_size = 40000
fname = "test.wav"
frate = 11025.0
wav_file = wave.open(fname, 'r')
data = wav_file.readframes(data_size)
wav_file.close()
data = struct.unpack('{n}h'.format(n=data_size), data)
data = np.array(data)

w = np.fft.fft(data)
freqs = np.fft.fftfreq(len(w))
print(freqs.min(), freqs.max())
# (-0.5, 0.499975)

# Find the peak in the coefficients
idx = np.argmax(np.abs(w))
freq = freqs[idx]
freq_in_hertz = abs(freq * frate)
print(freq_in_hertz)
# 439.8975

這個是對於單個data_size,frate已知的情況,真實情況是未知,且有多個頻率的信號。求解。。。

最佳回答:


對於單個頻率的波形,取頻譜的峰值,np.argmax()可以取到下標值,根據freq=下標*N/fs,獲得頻率值, 對於含有多個頻率的波形,我是做一個區分,判斷頻譜中
振幅大於某個數,就為信號,小於某個數就為噪聲。這樣不准確,最好用信噪比判斷,然後同樣獲取下標,獲得頻率值,相應還能得到幅度。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved