- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在努力将我的代码从 python 转换为 objective c。在 matplotlib.mlab.specgram 函数中,我在 fft 之前看到了 3 个重要函数:
result = stride_windows(x, NFFT, noverlap, axis=0)
result = detrend(result, detrend_func, axis=0)
result, windowVals = apply_window(result, window, axis=0,
return_window=True)
result = np.fft.fft(result, n=pad_to, axis=0)[:numFreqs, :]
我尝试调试以了解每个的目的。例如我有输入数组:
x = [1,2,3,4,5,6,7,8,9,10,11,12]
在第一个函数 stride_windows(这个是为了防止泄漏?)之后,如果 NFFT = 4,noverlap = 2 那么:
x = [ [1,3,5,7,9],
[2,4,6,8,10],
[3,5,7,9,11],
[4,6,8,10,12]
]
去趋势后没有任何变化(我理解在 fft 之前去趋势)
apply_window里面(这一步没看懂):
xshape = list(x.shape)
xshapetarg = xshape.pop(axis) // =4
windowVals = window(np.ones(xshapetarg, dtype=x.dtype))
//result of 4 elements [0.0, 0.75, 0.75, 0.0]
xshapeother = xshape.pop() // =5
otheraxis = (axis+1) % 2 // =1
windowValsRep = stride_repeat(windowVals, xshapeother, axis=otheraxis)
// result windowValsRep = [
[ 0. ,0. ,0. ,0. ,0. ,],
[0.75, 0.75, 0.75, 0.75,
[0.75, 0.75, 0.75, 0.75,
[ 0. ,0. ,0. ,0. ,0. ,]
]
然后乘以x
windowValsRep * x
现在
x = [
[ 0. , 0. , 0. , 0. , 0. ],
[ 1.5 , 3 , 4.5 , 6. , 7.5 ],
[ 2.25, 3.75 , 5.25 , 6.75 , 8.25 ],
[ 0. , 0. , 0. , 0. , 0. ]
]
最后是 fft,据我所知,fft 只需要一个数组,但这里它处理二维数组。为什么?
result = np.fft.fft(x, n=pad_to, axis=0)[:numFreqs, :]
谁能一步一步地为我解释为什么在 fft 之前需要这样处理数据?
谢谢,
最佳答案
频谱图和 FFT 不是一回事。 spectogram的目的是对小的、大小相等的时间 block 进行 FFT。这会产生二维傅立叶变换,其中 X 轴是时间 block 的开始时间,Y 轴是该时间 block 中每个频率的能量(或功率等)。这使您可以查看频率分量如何随时间变化。
specgram 的文档对此进行了解释功能:
Data are split into NFFT length segments and the spectrum of each section is computed. The windowing function window is applied to each segment, and the amount of overlap of each segment is specified with noverlap.
至于个别功能,您所问的很多内容在 reach 功能的文档中都有描述,但我会尝试更详细地解释。
stride_windows
的用途,如 documentation 中所述, 是将数据的一维数组转换为连续时间 block 的二维数组。这些是将在最终频谱图中计算其 FFT 的时间 block 。在您的情况下,它们是长度为 4 (NFFT=4
) 的时间 block (注意每列 4 个元素)。因为您设置了 noverlap=2
,每列的最后 2 个元素与下一列的前 2 个元素相同(这就是重叠的意思)。之所以称为“步幅”,是因为它使用了一个关于 numpy 数组内部存储的技巧,允许它在不占用任何额外内存的情况下创建具有重叠窗口的数组。
去趋势函数,顾名思义,如其 documentation 中所述。 , 从信号中删除趋势。默认情况下,它使用平均值,即 detrend_mean
documentation描述,删除信号的 mean
( DC offset )。
apply_window
函数的作用正如它的名字所暗示的那样,它的 documentation 也是如此。说:它适用于 window function到每个时间 block 。这是必需的,因为在时间 block 的开始和结束时突然切断信号会导致称为 transients 的大量宽带能量爆发。那会弄乱频谱图。对信号加窗可减少这些瞬变。默认情况下,频谱图函数使用 hanning window .这会衰减每个时间 block 的开始和结束。
FFT 并不是真正的 2D。 numpy FFT function允许您指定一个轴来接管 FFT。所以在这种情况下,我们有一个二维数组,我们对该数组的每一列进行 FFT。在一个步骤中执行此操作比手动遍历每一列要干净得多,速度也快一点。
关于python - 需要解释 specgram 函数如何在 python 中工作(matplotlib - MATLAB 兼容函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43685753/
在 Matlab 中,您可以选择创建新的“示例”脚本文件以及脚本、函数、类等。创建它们时,它们会获得一个脚本图标。 它们与其他标准脚本文件的处理方式有何不同? 是否有关于这些示例脚本类型的预期用途的文
我正在运行一个不是我自己编写的大 m 文件,它依赖于某些子函数。我想知道是否在所有嵌套函数的任何地方都使用了特定函数(在我的例子中是函数 eig.m(计算特征值))。有没有快速的方法来做到这一点? 亲
Matlab中有一个函数叫 copulafit .我怎样才能看到这个函数背后的代码?许多 Python 的 numpy 和 scipy 函数在 Github 上很容易开源,但由于某种原因我在 Gith
我定义了一个抽象基类measurementHandler < handle它定义了所有继承类的接口(interface)。这个类的两个子类是a < measurementHandler和 b < me
假设有一个矩阵 A = 1 3 2 4 4 2 5 8 6 1 4 9 例如,我有一个 Vector 包含该矩阵每一列的“类”
我有一个在后台运行的 Matlab 脚本。随着计算的进行,它会不断弹出进度栏窗口。这很烦人。 问题是我没有自己写 Matlab 脚本,这是一段很长很复杂的代码,我不想搞砸。那么如何在不修改 Matla
有没有办法从一个 matlab 程序中检测计算机上正在运行多少个 matlab 进程? 我想要恰好有 n 个 matlab 进程在运行。如果我的数量太少,我想创建它们,如果数量太多,我想杀死一些。您当
我正在测试我们在 Matlab 中开发的一个独立应用程序,当时我注意到它的内存使用量(根据 Windows 任务管理器)达到了 16gb 以上的数倍峰值。我决定在编译版本后面的脚本上使用 profil
我面临着一个相当棘手的问题。在 Matlab 中,命令 S = char(1044) 将俄语字母 д 放入变量 S。但是 disp(S) 返回空白符号,尽管内容实际上是正确的: >> S = char
我在这行 MATLAB 代码中遇到内存不足错误: result = (A(1:xmax,1:ymax,1:zmax) .* B(2:xmax+1,2:ymax+1,2:zmax+1) +
我正在寻找一种在 MATLAB 中比较有限顺序数据与非确定性顺序的方法。基本上,我想要的是一个数组,但不对包含的元素强加顺序。如果我有对象 a = [x y z]; 和 b = [x z y]; 我希
我有一个由 1 和 0 组成的二维矩阵。 mat = [0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 1 0 0 0 1 0 1 1 0 0 1]; 我需
我可以在 Matlab 中用一组 x,y 点绘制回归线。但是,如果我有一组点(如下图),假设我有四组点,我想为它们绘制四条回归线……我该怎么做?所有的点都保存在 x,y 中。没有办法将它们分开并将它们
我正在尝试使用以下代码在 MATLAB 中绘制圆锥体。但是,当 MATLAB 生成绘图时,曲面中有一个间隙,如下图所示。谁能建议关闭它的方法? clearvars; close all; clc; [
我有一个 map称为 res_Map,包含一组不同大小的数组。我想找到用于存储 res_Map 的总内存。 正如您在下面看到的,看起来 res_Map 几乎不占用内存,而 res_Map 中的各个元素
有没有办法在 MATLAB 中组合 2 个向量,这样: mat = zeros(length(C),length(S)); for j=1:length(C) mat(j,:)=C(j)*S;
已结束。此问题不符合 Stack Overflow guidelines 。它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答它。 关闭 5 年前
我正在尝试将MatLab中的t copula适配到我的数据,并且我的功能是: u = ksdensity(range_1, range_1,'function','cdf'); v = ksdens
大家好,我目前正在尝试使用论文“多尺度形态学图像简化”中的 SMMT 运算符 Dorini .由于没有订阅无法访问该页面,因此我将相关详细信息发布在这里: 请注意,我将相关文章的部分内容作为图片发布。
我在MATLAB中编写代码,需要使用一个名为modwt的函数,该函数同时存在于两个我同时使用的工具箱(Wavelet和WMTSA)中。问题在于,一个版本仅返回一个输出,而另一个版本则返回三个输出。我应
我是一名优秀的程序员,十分优秀!