簡體   English   中英

Python振幅譜圖

[英]Python amplitude spectrum plot

我有兩個浮點值列表,一個用於時間,另一個用於從示波器獲取的電壓值(我假設)。 我必須繪制幅度譜圖,但我不確定我需要使用什么函數以及我需要給它什么參數,我嘗試了 fft(u),但它沒有用。

任何幫助表示贊賞,如果您需要更多信息,請告訴我。

使用numpy

例如,讓我展示我如何分析立體聲 WAV 文件中的頻率;

首先我讀取數據並在左右聲道中進行分離;

import wave
import numpy as np

wr = wave.open('input.wav', 'r')
sz = 44100 # Read and process 1 second at a time.
da = np.fromstring(wr.readframes(sz), dtype=np.int16)
left, right = da[0::2], da[1::2]

接下來我對其進行離散傅立葉變換;

lf, rf = abs(np.fft.rfft(left)), abs(np.fft.rfft(right))

我們用 mathplotlib 繪制左聲道;

import matplotlib.pyplot as plt

plt.figure(1)
a = plt.subplot(211)
r = 2**16/2
a.set_ylim([-r, r])
a.set_xlabel('time [s]')
a.set_ylabel('sample value [-]')
x = np.arange(44100)/44100
plt.plot(x, left)
b = plt.subplot(212)
b.set_xscale('log')
b.set_xlabel('frequency [Hz]')
b.set_ylabel('|amplitude|')
plt.plot(lf)
plt.savefig('sample-graph.png')

該圖看起來像這樣;

這是信號的頻率 - 時間頻譜,存儲在波形文件中

import wave
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt

signal_wave = wave.open('voice.wav', 'r')
sample_frequency = 16000

data = np.fromstring(signal_wave.readframes(sample_frequency), dtype=np.int16)
sig = signal_wave.readframes(-1)

sig = np.fromstring(sig, 'Int16')

對於波形文件

sig = sig[:]

對於波形文件的某些片段

sig = sig[25000:32000]

繪制信號波形文件的頻譜

plt.figure(1)
c = plt.subplot(211)
Pxx, freqs, bins, im = c.specgram(sig, NFFT=1024, Fs=16000, noverlap=900)
c.set_xlabel('Time')
c.set_ylabel('Frequency')
plt.show()

圖例

暫無
暫無

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

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