- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将 python 代码转换为 MATLAB,其中一个代码使用 numpy rfft。在 numpy 的文档中,它说的是真实输入。
Compute the one-dimensional discrete Fourier Transform for real input.
ffta = np.fft.rfft(a)
ffta = abs(fft(a));
最佳答案
numpy 中的真实 FFT 使用这样一个事实,即实值函数的傅立叶变换可以说是“偏斜对称”,即频率 k
处的值。是频率 N-k
处的值的复共轭为 k=1..N-1
(正确的术语是 Hermitian)。因此rfft
只返回结果中对应于非正频率的部分。
对于大小为 N
的输入rfft
函数返回对应于等于或低于 N/2
的频率的 FFT 输出部分.因此 rfft
的输出尺寸为 N/2+1
如果 N
是偶数(从 0
到 N/2
的所有频率),或 (N+1)/2
如果 N
是奇数(从 0 到 (N-1)/2
的所有频率)。观察函数floor(n/2+1)
为偶数和奇数输入大小返回正确的输出大小。
所以要重现rfft
在matlab中
function rfft = rfft(a)
ffta = fft(a);
rfft = ffta(1:(floor(length(ffta)/2)+1));
end
a = [1,1,1,1,-1,-1,-1,-1];
rffta = rfft(a)
rffta =
Columns 1 through 3:
0.00000 + 0.00000i 2.00000 - 4.82843i 0.00000 + 0.00000i
Columns 4 through 5:
2.00000 - 0.82843i 0.00000 + 0.00000i
>>> np.fft.rfft(a)
array([ 0.+0.j , 2.-4.82842712j, 0.-0.j ,
2.-0.82842712j, 0.+0.j ])
irfft
的基本功能您需要从
rfft
恢复丢失的频率输出。如果所需的输出长度为偶数,则可以从输入长度计算输出长度为
2 (m - 1)
.否则应该是
2 (m - 1) + 1
.
function irfft = irfft(x,even=true)
n = 0; % the output length
s = 0; % the variable that will hold the index of the highest
% frequency below N/2, s = floor((n+1)/2)
if (even)
n = 2 * (length(x) - 1 );
s = length(x) - 1;
else
n = 2 * (length(x) - 1 )+1;
s = length(x);
endif
xn = zeros(1,n);
xn(1:length(x)) = x;
xn(length(x)+1:n) = conj(x(s:-1:2));
irfft = ifft(xn);
end
>> irfft(rfft(a))
ans =
1.00000 1.00000 1.00000 1.00000 -1.00000 -1.00000 -1.00000 -1.00000
abs( irfft(rfft(a)) - a ) < 1e-15
>> irfft(rfft(a(1:7)),even=false)
ans =
1.0000 1.0000 1.0000 1.0000 -1.0000 -1.0000 -1.0000
关于python - 什么是 numpy.fft.rfft 和 numpy.fft.irfft 及其在 MATLAB 中的等效代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45778504/
我正在尝试将最初使用 numpy 编写的算法转换为 JavaScript,但我无法通过反向 FFT 重现结果。 原始算法使用numpy.fft.rfft和numpy.fft.irfft: # Get
据我所知,大多数 FFT/IFFT 例程都有错误层。我原以为 NumPy 的 FFT 与 FFTW 的顺序相同(例如 1e-15),但下面的实验显示错误的顺序为 1e-5 . 考虑计算一个盒子的 ID
所以我试图对一组实值点执行频移。为了实现频移,必须将数据乘以复指数,从而使所得数据变得复杂。如果我只乘以一个余弦,我就会得到和频率和差频率的结果。我只想要总和或差值。 我所做的是将数据乘以复指数,使用
我正在将 python 代码转换为 MATLAB,其中一个代码使用 numpy rfft。在 numpy 的文档中,它说的是真实输入。 Compute the one-dimensional disc
我是一名优秀的程序员,十分优秀!