numpy中的实际FFT使用这样的事实:实值函数的傅立叶变换就是说“偏斜对称”,即频率k处的值是频率Nk处k = 1的值的复共轭. N-1(正确的术语是Hermitian).因此,rfft仅返回与非正频率相对应的结果部分.

对于大小为N的输入,rfft函数返回对应于N / 2或低于N / 2的频率的FFT输出部分.因此,如果N是偶数(所有频率从0到N / 2),则rfft的输出大小为N / 2 1,如果N为奇数,则输出(N 1)/ 2(所有频率从0到(N-1)/ 2).观察功能层(n / 2 1)为偶数和奇数输入大小返回正确的输出大小.

所以要在matlab中重现rfft

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

现在将它与python进行比较

>>> np.fft.rfft(a)

array([ 0.+0.j , 2.-4.82842712j, 0.-0.j ,

2.-0.82842712j, 0.+0.j ])

再现irfft

要重现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

php 做fft,什么是numpy.fft.rfft和numpy.fft.irfft及其在MATLA...相关推荐

  1. C语言使用CUDA中cufft函数做GPU加速FFT运算,与调用fftw函数的FFT做运算速度对比

    目录 任务介绍 环境所需相关软件下载与安装 C语言:不调用库的GPU加速FFT代码 C语言:调用fftw库的未使用GPU的FFT代码 C语言:调用cufft库的GPU加速FFT gnuplot安装画图 ...

  2. matlab函数fftshift,matlab中fft算法_matlab中fftshift函数_matlab中fft函数的用法(2)

    plot([0 : PointNum/2 - 1], x1(1:PointNum/2)); grid on subplot(3,1,2); % [REX IMX] am = sqrt(abs(REX. ...

  3. 离散傅里叶变换DFT与FFT,MATLAB的FFT函数使用(原创)——如何使用fft()绘制出真正的频谱图像

    以前一直对MATLAB中fft()函数的使用一直存在疑惑,为什么要加一 些参数,并且如何确定这些参数,也查了许多资料,但很多都感觉只是 表面一说根本没有讲清其本质.但随着学习的推进,慢慢有所领悟,所 ...

  4. 数据分析之numpy基础/matplotlib绘图/numpy常用函数/杂项功能

    文章目录 数据分析 numpy概述 numpy`历史` numpy的核心:多维数组 numpy基础 ndarray数组 内存中的ndarray对象 ndarray数组对象的特点 ndarray数组对象 ...

  5. python之numpy之伪逆numpy.linalg.pinv

    文章目录 解释及实现 笔记 伪逆在最简单的线性回归中的应用 解释及实现 记XXX的伪逆为pinv(X)pinv(X)pinv(X),则有 pinv(X)=(XTX)−1XTpinv(X)=(X^TX) ...

  6. numpy 随机数_数据分析numpy基础看着一篇就够了

    1,Numpy基础数据结构 2,Numpy通用函数 3,Numpy索引及切片 4,Numpy随机数 5,Numpy数据的输入输出 1,Numpy基础数据结构 NumPy数组是一个多维数组对象,称为nd ...

  7. python numpy常用操作、Numpy 多维数组、矩阵相乘、矩阵乘以向量

    python numpy常用操作 Numpy基本操作 # 导入numpy import numpy as np # 生成numpy数组 x = np.array([1.0, 2.0, 3.0]) pr ...

  8. numpy中求解范数(numpy.linalg.norm)以及各阶范数详解

    numpy.linalg.norm 语法 numpy.linalg.norm(x,ord=None,axis=None,keepdims=False) Parameters x: array_like ...

  9. [转载] python numpy.random.randn()与numpy.random.rand()的区别 (正态分布公式)(标准正态分布 standard normal distribution

    参考链接: Python中的numpy.random.randn 引用文章: numpy.random.randn()与numpy.random.rand()的区别 https://www.cnblo ...

最新文章

  1. OpenCV后投影,利用阈值函数分割指定区域生成掩膜,通过直方图分布查找其他图像相同区域。
  2. 解决cisco路由器cpu占用率100%问题
  3. code iban 是有什么组成_「面试」new String(abc)和abc有什么区别?反编译看看原理吧...
  4. 如何快速学会嵌入式?
  5. Mysql的两种“排名第几且有可能为空的记录”写法(力扣176)
  6. 认识Java异步编程
  7. 软银准备以超400亿美元向英伟达出售Arm,交易最快下周达成
  8. JAVA 第1课 开始前的准备
  9. PTA 2-1 列出连通集【DFS+BFS基础】
  10. 2017级C语言大作业 - 奇怪的大冒险
  11. 微信小游戏源码及H5开源小程序游戏源码1000套
  12. 抽奖活动软件 html,webAPP最常用的活动促销案例:大转盘H5抽奖特效
  13. 两种MBR分区表恢复方法
  14. 外星人 AW3423DWF 评测
  15. HDOJ 6045-Is Derek lying?
  16. 80后年轻老板创业心经
  17. java大马后门_【猥琐流】制作一个隐藏在黑页下的大马并且添加后门
  18. Scrapy--CrawlSpider
  19. 思维模型 DISC色彩性格
  20. CA6140机床法兰盘(代号831004)课程设计——说明书 CAD图纸 工艺卡 过程卡……

热门文章

  1. 06 / LiveVideoStack主编观察:六岁的Frame.io被收购
  2. ​手把手教你如何进行 Golang 单元测试
  3. Python pip更换升级源
  4. go基础库之环境变量的获取与设置以及如何使用默认值
  5. 【PAT甲级 最长公共子串】1007 Maximum Subsequence Sum (25 分) C++ 全部AC
  6. 听说版本会说话,你相信吗?
  7. 分布式数据库产品总结
  8. Windows Azure Storage论文解读
  9. wpf加载上千张图片部分图片不显示_开源WPF控件库MaterialDesignInXAML推荐
  10. charles 手机证书下载安装