2016-05-08 35 views
1

下面是數據文件:噪聲較小的圖形和額外的駝峯在Python

https://jsfiddle.net/83ygso6u/

對不起,我在的jsfiddle張貼......不知道還有什麼地方來承載它。

無論如何,第二列應該被忽略。

下面是代碼和圖形:

import pylab as plb 
import math 
from pylab import * 
import matplotlib.pyplot as plt 

data = plb.loadtxt('title_of_datafile.txt') 
x = data[:,0]*1000 
y= data[:,2] 

plt.figure() 

plt.title('Some_Title',fontsize=35, y=1.05) 
plt.xlabel('Frequency (Hz)',fontsize=30) 
plt.ylabel('dBu',fontsize=30) 

plt.plot(x,y,'k-', label='Data') 

plt.xticks(fontsize = 25, y=-0.008) 
plt.yticks(fontsize = 25, x=-0.008) 
plt.show() 

enter image description here

所以你可以看到這個信號是相當嘈雜,但它在4500左右赫茲和5500赫茲有兩個不同的峯。

我一直在尋找網絡,並沒有遇到任何可以幫助我的東西。

如何提取這些峯值和/或清除python中的信號?

回答

0

嗯,我設法找到一個解決方案。這是帶有結果圖的腳本。

腳本:

import pylab as plb 
import math 
from pylab import * 
import numpy as np 
import scipy as sp 
import matplotlib.pyplot as plt 
from scipy import signal 
import peakutils 
from peakutils.plot import plot as pplot 

data = plb.loadtxt('data_file_name') 
x = data[:,0]*1000 
y= data[:,2] 

y1 = sp.signal.medfilt(y,431) # remove noise to the signal 

indexes = peakutils.indexes(y1, thres=0.00005, min_dist=1400) #determine peaks 
x_new = x[indexes] 

plt.figure() 
plt.subplot(1,2,1) 

plt.title('some_title_1',fontsize=35, y=1.05) 
plt.xlabel('Frequency (Hz)',fontsize=30) 
plt.ylabel('Signal (dBu)',fontsize=30) 
plt.plot(x,y,'r-', label='Raw Data') 
plt.plot(x,y1,'b-', label='Cleaned up Signal') 
plt.plot(x_new[3:6],y1[indexes][3:6],'k^',markersize=10, label='Peaks') 
plt.xticks(fontsize = 25, y=-0.008) 
plt.yticks(fontsize = 25, x=-0.008) 
plt.legend(loc=1,prop={'size':30}) 

plt.subplot(1,2,2) 
for i,j in zip(x_new[3:6], y1[indexes][3:6]): 
    plt.annotate(str(i)+ " Hz",xy=(i,j+0.5),fontsize=15) 
plt.title('some_title_2',fontsize=35, y=1.05) 
plt.xlabel('Frequency (Hz)',fontsize=30) 
plt.ylabel('Signal (dBu)',fontsize=30) 
plt.plot(x,y,'r-', label='Data') 
plt.plot(x,y1,'b-') 
plt.plot(x_new[3:6],y1[indexes][3:6],'k^',markersize=10) 
plt.xticks(fontsize = 25, y=-0.008) 
plt.yticks(fontsize = 25, x=-0.008) 
plt.xlim([3000, 6000]) 
plt.ylim([-90, -75]) 
plt.subplots_adjust(hspace = 0.6) 
plt.show() 

enter image description here