相关疑难解决方法(0)

Python中的可逆STFT和ISTFT

是否有任何通用形式的短时傅里叶变换,其中相应的逆变换内置于SciPy或NumPy或其他任何东西?

specgram在matplotlib中有pyplot 函数,它调用ax.specgram()哪些调用mlab.specgram()调用_spectral_helper():

#The checks for if y is x are so that we can use the same function to
#implement the core of psd(), csd(), and spectrogram() without doing
#extra calculations.  We return the unaveraged Pxy, freqs, and t.
Run Code Online (Sandbox Code Playgroud)

这是一个辅助函数,它实现了204#psd,csd和谱图之间的通用性.它 并不意味着在mlab之外使用

不过,我不确定这是否可以用来做STFT和ISTFT.还有什么,或者我应该翻译这些MATLAB函数吗?

我知道如何编写自己的临时实现; 我只是在寻找功能齐全的东西,它可以处理不同的窗口函数(但是有一个合理的默认值),完全可以与COLA windows(istft(stft(x))==x)完全颠倒,由多人测试,没有一个一个错误,处理结束和零填充,实际输入的快速RFFT实现等.

python signal-processing fft scipy

49
推荐指数
3
解决办法
3万
查看次数

有效地计算50Hz的信号含量

问题陈述

我有一个很长的信号(454912个样本),我想计算出50Hz的估计量.速度比精度更重要.预计50Hz的量随时间波动.该值必须代表整个记录,例如平均值.

上下文

从EEG电极记录信号.当EEG电极与头皮接触不良时,信号中会有大量50Hz的电力线噪声.我想丢弃EEG电极的所有数据,这些数据的噪声比其他电极高50Hz.

解决了尝试

解决问题并不难.从FFT到Welch方法的任何方法都可用于估算功率谱:

import numpy as np
from scipy.signal import welch

# generate an example signal
sfreq = 128.
nsamples = 454912
time = np.arange(nsamples) / sfreq
x = np.sin(2 * np.pi * 50 * time) + np.random.randn(nsamples)

# apply Welch' method to the problem
fs, ps = welch(x, sfreq)
print 'Amount of 50Hz:', ps[np.searchsorted(fs, 50)]
Run Code Online (Sandbox Code Playgroud)

然而,在这里计算所有频率的功率似乎是不必要的,我觉得有一个更有效的解决方案.计算单个DFFT步骤的东西是什么?用一些sinoid小波卷积?

python signal-processing numpy scipy

4
推荐指数
1
解决办法
1326
查看次数

标签 统计

python ×2

scipy ×2

signal-processing ×2

fft ×1

numpy ×1