我正在尝试在python中创建一个图形频谱分析器.
我目前正在读取1024字节的16位双通道44,100 Hz采样率音频流,并将两个通道的幅度平均在一起.所以现在我有256个签名短裤阵列.我现在想要使用像numpy这样的模块在该阵列上预先形成一个fft,然后使用结果创建图形频谱分析器,开始时只需32个小节.
我已经阅读了关于快速傅里叶变换和离散傅里叶变换的维基百科文章,但我仍然不清楚结果数组代表什么.这是我使用numpy在我的数组上执行fft后数组的样子:
[ -3.37260500e+05 +0.00000000e+00j 7.11787022e+05 +1.70667403e+04j
4.10040193e+05 +3.28653370e+05j 9.90933073e+04 +1.60555003e+05j
2.28787050e+05 +3.24141951e+05j 2.09781047e+04 +2.31063376e+05j
-2.15941453e+05 +1.63773851e+05j -7.07833051e+04 +1.52467334e+05j
-1.37440802e+05 +6.28107674e+04j -7.07536614e+03 +5.55634993e+03j
-4.31009964e+04 -1.74891657e+05j 1.39384348e+05 +1.95956947e+04j
1.73613033e+05 +1.16883207e+05j 1.15610357e+05 -2.62619884e+04j
-2.05469722e+05 +1.71343186e+05j -1.56779748e+04 +1.51258101e+05j
-2.08639913e+05 +6.07372799e+04j -2.90623668e+05 -2.79550838e+05j
-1.68112214e+05 +4.47877871e+04j -1.21289916e+03 +1.18397979e+05j
-1.55779104e+05 +5.06852464e+04j 1.95309737e+05 +1.93876325e+04j
-2.80400414e+05 +6.90079265e+04j 1.25892113e+04 -1.39293422e+05j
3.10709174e+04 -1.35248953e+05j 1.31003438e+05 +1.90799303e+05j...
Run Code Online (Sandbox Code Playgroud)
我想知道这些数字究竟代表什么,以及我如何将这些数字转换为32个柱中每一个的高度百分比.另外,我应该将2个频道平均在一起吗?
我的问题与对信号进行频谱分析的结果的物理意义有关,或者将信号抛入FFT并使用合适的数字包解释出来的结果,
特别:
所以你现在在y轴上有实数 - 我应该称这些频谱系数?
我的理解是这个频谱显示了电压信号中存在多少不同的频率 - 它们是频谱系数,它们是重构原始信号所需的各种频率的正弦和余弦的系数.
所以第一个问题是,这些频谱系数的单位是多少?
这很重要的原因是频谱系数可能很小而且很大,所以我想用dB标度来表示它们.
但要做到这一点,我必须做出选择:
我使用哪种缩放取决于单位是什么.
任何关于此的光线都将非常感激!
我有一些数据由一系列视频帧组成,这些视频帧表示相对于移动基线的亮度随时间的变化.在这些视频中,可能会出现两种"事件" - "局部"事件,其中包括小组聚集像素中的亮度变化,以及影响帧中大多数像素的污染"漫反射"事件:

我希望能够从漫反射事件中隔离亮度的局部变化.我打算通过减去每帧的适当低通滤波版本来做到这一点.为了设计一个最佳滤波器,我想知道我的帧的哪些空间频率在漫射和局部事件期间被调制,即我想生成我的电影随时间变化的频谱图.
我可以找到很多关于生成一维数据(例如音频)光谱图的信息,但是我没有太多关于生成二维数据的光谱图.到目前为止我所尝试的是从帧的傅立叶变换生成2D功率谱,然后对DC分量执行极坐标变换,然后跨角度平均以获得1D功率谱:

然后我将它应用于我的电影中的每一帧,并生成随时间变化的光谱功率的光栅图:

这看起来像是一种明智的做法吗?是否有更"标准"的方法对2D数据进行光谱分析?
这是我的代码:
import numpy as np
# from pyfftw.interfaces.scipy_fftpack import fft2, fftshift, fftfreq
from scipy.fftpack import fft2, fftshift, fftfreq
from matplotlib import pyplot as pp
from matplotlib.colors import LogNorm
from scipy.signal import windows
from scipy.ndimage.interpolation import map_coordinates
def compute_2d_psd(img, doplot=True, winfun=windows.hamming, winfunargs={}):
nr, nc = img.shape
win = make2DWindow((nr, nc), winfun, **winfunargs)
f2 = fftshift(fft2(img*win))
psd = np.abs(f2*f2)
pol_psd = polar_transform(psd, centre=(nr//2, nc//2))
mpow = np.nanmean(pol_psd, 0)
stdpow = np.nanstd(pol_psd, 0)
freq_r = fftshift(fftfreq(nr)) …Run Code Online (Sandbox Code Playgroud) 对于我目前在C++/Qt中的项目,我需要一个库(LGPL是首选),它可以根据信号(基本上是双精度数组)计算频谱图.我已经使用Qwt作为GUI部分.
有什么建议?谢谢.
我希望有一个平滑的颜色过渡,遍及整个光谱(即红色,蓝色,绿色,黄色,橙色等)
还希望能够在特定光谱(即所有红色)中平滑过渡颜色.
是否有任何简单的算法/递归函数/公式可以帮助简化此过程?
但是......为什么我需要对样本应用窗口函数?这到底意味着什么?
功率谱怎么样,它是采样率范围内每个频率的功率?(例如:windows media player声音可视化器?)
我正在寻找一个可以接受一大块音频数据并在给定频段内返回平均幅度的库.
我已经在comp.dsp上问了这个问题,但我很清楚,使用基本的FFT库获取自己构建这个问题的技术诀窍将需要比现在更多的时间和精力.以下是我的原始问题以及更多详情:http://groups.google.com/group/comp.dsp/browse_thread/thread/e04f78d439e9e2bd
我发现了许多用于播放声音的漂亮库(过去我使用过JSyn),但似乎没有设置它们来返回有关声音样本的快速和脏的光谱信息.
任何指针都将非常感激.
我有一个RGB三元组列表,我想以这样的方式绘制它们,使它们形成像光谱一样的东西.
我把它们转换成了人们似乎推荐的HSV.
from PIL import Image, ImageDraw
import colorsys
def make_rainbow_rgb(colors, width, height):
"""colors is an array of RGB tuples, with values between 0 and 255"""
img = Image.new("RGBA", (width, height))
canvas = ImageDraw.Draw(img)
def hsl(x):
to_float = lambda x : x / 255.0
(r, g, b) = map(to_float, x)
h, s, l = colorsys.rgb_to_hsv(r,g,b)
h = h if 0 < h else 1 # 0 -> 1
return h, s, l
rainbow = sorted(colors, key=hsl)
dx = width / …Run Code Online (Sandbox Code Playgroud) HTML5中的createMediaElementSource(绘制YouTube视频的可视化).那可能吗?
你能告诉我一个例子吗?我只是想添加一个传统的youtube播放器,在它下面的频谱/可视化,我在互联网上找到了一个mp3版本.
这是它的音频/ mp3版本,我不知道这是否适用于youtube视频流.
<style type="text/css">
div#mp3_player{ width:500px; height:60px; background:#000; padding:5px; margin:50px auto; }
div#mp3_player > div > audio{ width:500px; background:#000; float:left; }
div#mp3_player > canvas{ width:500px; height:30px; background:#002D3C; float:left; }
</style>
<script>
// Create a new instance of an audio object and adjust some of its properties
var audio = new Audio();
audio.src = '613814.mp3';
audio.controls = true;
audio.loop = true;
audio.autoplay = false;
// Establish all variables that your Analyser will use
var canvas, ctx, source, context, analyser, …Run Code Online (Sandbox Code Playgroud) spectrum ×10
fft ×7
audio ×5
c++ ×2
python ×2
clojure ×1
color-space ×1
colors ×1
hsv ×1
html5 ×1
ios ×1
java ×1
javascript ×1
math ×1
measurement ×1
numpy ×1
physics ×1
scipy ×1
spectrogram ×1
transitions ×1
youtube ×1