问题标签 [spectral-density]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - 使用 IFFT 获取原始信号和 Parseval 定理
我有一个电流信号(在 csv 中提取),我从节奏模拟中获得了 30ns 的时间。我在 FFT 之前移除了 DC 偏移并应用了窗口函数。并将 FFT 归一化sqrt(N)
。我已经将零频率分量移动到我想要的频谱的中心fftshift(X)
。我得到了我想要的 FFT。我也想回到我原来的窗口信号,ifft
但它没有显示我的窗口信号,而是只显示我使用的窗口函数的一个版本。我的样本信号真实而不复杂。
我有另一个问题。我在 FFT 之前和 FFT 之后的能力是一样的。如何以智能的方式在图表中显示 Parseval 的定理?
我还添加了我的 MATLAB 代码,没有上传 csv 和制作向量。我的y
价值是Current_wo_dc
MATLAB 代码:
c++ - C++ - 复值错误,计算交叉谱密度 (CSD)
亲爱的社区,
我面临一个相当烦人的问题。我正在计算两个时间信号之间的交叉谱密度(CSD),这两个时间信号已经用 FFT 处理为两个复频率向量(Singal1 => freqvec,Signal2 => freqvec2)。
对于进一步的计算,我需要正确地得到这个计算的虚部。
计算确实有效,但不知何故,结果总是虚值为零。
r - 将 R 中的spectrum() 产生的光谱密度值转换为 SAS PROC SPECTRA 产生的值
我正在将演示时态数据分析的 SAS 程序转换为 R。我想使用 R 重现 SAS PROC SPECTRA 输出。
所以,我的问题是,R中的spectrum()函数产生的光谱密度值是否可以转换为SAS PROC SPECTRA产生的光谱密度值?
到目前为止,在 R 中使用 read.xlsx() 输入数据后,这就是我所得到的:
使用 ma 作为 2 阶移动平均平滑器。
变量 U 的白噪声测试
傅里叶分析的周期图。SAS 产生的周期图值看起来大约是 P(下)乘以 4。这并不奇怪,有人告诉我,某些软件会产生周期图值除以 4pi。
因此,R 的spectrum() 函数产生的频谱密度值$spec 值与SAS PROC SPECTRA 产生的那些不同。我可以将我的 R 值转换为 SAS 值吗?
就这样。感谢您的时间。
matlab - 如何从功率谱中检索原始信号
我已经计算power spectrum
了信号。步骤是:
- 时间信号的 FFT
- FFT绝对值的平方/信号长度即功率谱
现在我想把它转换成时域。我应该遵循哪些步骤。
spectral-density - 转换功率谱密度的维度
我想转换我的数据Vpp/sqrt(Hz)
以rad^2/sqrt(Hz)
与其他数据进行比较。这样我就可以继续我的研究工作。
我怎样才能做到这一点?
python - 使用 numpy.fft VS 计算信号 PSD 的预因子。scipy.signal.welch
信号的功率谱密度可以计算为St
信号的 FFT与其复共轭的乘积。在 Python 中,这将被写为:u
u_fft
u_fft_c
然而,Numpy 中的 FFT 定义需要将结果乘以因子1/N
,N=u.size
以便在 u 和它的 FFT 之间进行能量一致的变换。这导致使用 numpy 的 fft 对 PSD 进行更正定义:
另一方面,Scipy 的函数signal.welch
直接从输入计算 PSD u
:
得到的 PSDSt_welch
是通过在u
大小为 的阵列段中执行几个 FFT 获得的seg_size
。因此,我的问题是:
应该St_welch
乘以一个因子1/seg_size
来给出一个能量一致的PSD?是否应该乘以1/N
? 根本不应该倍增吗?
PD:通过对信号执行两种操作进行比较并不简单,因为 Welch 方法还引入了信号的平滑化并改变了频域中的显示。
有关使用时前置因子的必要性的信息numpy.fft
:
python - python中离散功率谱密度的正确归一化以解决实际问题
我正在努力正确归一化功率谱密度(及其倒数)。
我遇到了一个真正的问题,假设加速度计的读数以功率谱密度 (psd) 的形式显示,以振幅^2/Hz 为单位。我想把它翻译回一个随机的时间序列。但是,首先我想了解“前进”方向,时间序列到 PSD。
根据 [1],时间序列 x(t) 的 PSD 可以通过以下方式计算:
其中 T 是 x(t) 的采样时间,F(w) 是 x(t) 的傅立叶变换,df=1/T 是傅立叶空间中的频率分辨率。但是,我得到的结果不等于我使用 scipy Welch 方法得到的结果,请参见下面的代码。
第一段代码取自 scipy.welch 纪录片:
我注意到的第一件事是绘制的 psd 随变量 fs 变化,这对我来说似乎很奇怪。(也许我需要相应地调整 nperseg 参数?为什么 nperseg 没有自动设置为 fs 呢?)
我的代码如下:(请注意,我定义了自己的 fft_full 函数,该函数已经处理了正确的傅立叶变换归一化,我通过检查 Parsevals 定理进行了验证)。
不幸的是,我还不允许发布图片,但两个情节看起来不一样!
如果有人能向我解释我哪里出错并一劳永逸地解决这个问题,我将不胜感激:)
[1]:方程式。2.82。航天器结构设计理论与应用中的随机振动,作者:Wijker, J. Jaap, 2009
python - 从注释访问原始数据而不创建时期
我想在 REM 睡眠阶段计算 EEG 信号的 PSD。我有一个带有睡眠阶段注释的原始脑电图信号。我的注释的描述是'S0,S1,S2,S3,REM'。有没有办法直接从注释中访问原始信号而不创建时期?我的意思是,如果可以根据注释的描述,直接在原始信号上计算 psd,指定我想在原始信号的哪个部分计算 PSD 。像这样的东西:
但是上面的代码不起作用
python - 互幂谱密度函数从Matlab到Python的转换
我正在尝试将 MATLAB 程序转换为 python。我在设置交叉功率谱密度函数并使用 Matlab 获得匹配结果时遇到问题。
MATLAB代码中使用的函数编写如下:
[Pxy,f] = cpsd(x,y,M,round(M/2),M,fs);
在我的代码中可用的文档中,我读到:M = 128(FFT 点数)和 fs = 25.0(采样频率 [Hz])。x 和 y 是加速度数据的行向量 1x751。
使用的函数有六个参数,所以我假设这[pxy,f] = cpsd(x,y,window,noverlap,f,fs)
是程序员打算从 MATLAB 库中调用的函数,它是文档中唯一可用的具有六个参数的函数(请参见此处)
此函数返回 f 中指定的频率处的交叉功率谱密度估计值。 (令我烦恼的是 f 没有定义为频率,但变量 M 被传递到那里,它是 FFT 点的数量,但让我们假设这不是一个错误)。
现在,我想用scipy.signal.csd来转换这个函数,但是有两个问题:
- 窗口在 MatLab 中定义为整数,但 scipy 的 csd 只允许窗口作为元组、字符串或类似数组的对象;
- 在 scipy 的 csd 中,没有一个参数允许返回特定频率的交叉功率谱密度估计。
对于数字 1,我定义了一个窗口如下:
window = hamming(M, sym=False)
我选择汉明窗口,因为它是在 MATLAB 的 csd 中将窗口作为整数传递时指定的默认窗口(“如果窗口是整数,则 cpsd 将 x 和 y 分为长度窗口的片段和每个片段的窗口都具有该长度的汉明窗口。”)并且鉴于我正在进行光谱分析,因此并没有使其对称,因此使用周期性窗口是有意义的。
对于 2 号,我没有解决方案。
这是我在 python 代码中设置的函数:
结果在 Pxy(交叉功率谱密度)方面不匹配,但在频率方面是完美的。这些是 matlab 结果中的第一个元素:
虽然这是我从 Python 中得到的:
我尝试在 matlplotlib (在此处记录)中使用简单的交叉谱密度函数,如下所示:
fxx, f = mlab.csd(x,y,NFFT=M,Fs=fs,noverlap=noverlap)
而且我获得了更多的匹配结果,但仍然不完美。
目标不是消除转换中可能出现的数值误差,而是使用匹配输入来操作交叉功率谱密度
有人可以帮忙吗?非常感谢提前!!!
python - 用于频谱分析的 FFT
有人可以解释一下这些 python 代码行,以及每一行的作用吗?
先感谢您。