如何对傅立叶复数值降采样? [英] How to downsample Fourier complex values?

查看:146
本文介绍了如何对傅立叶复数值降采样?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

免责声明:我不是信号处理专家.

我正在编写一个函数,该函数采用一维数组并对其执行快速傅立叶变换.运作方式如下:

I'm writing a function that takes a 1D array and performs Fast Fourier Transform on it. Here's how it works:

  1. 如果数组的大小不是2的幂,则在末尾加0,以使其大小成为2的幂.
  2. 对填充数组执行FFT并将结果存储在数组x中.
  3. 对复杂数组x进行下采样以匹配原始非填充数组的长度.
  4. 返回x.
  1. If the array's size is not a power of two, pad it with 0s at the end so that its size becomes a power of two.
  2. Perform FFT on the padded array and store the results in an array x.
  3. Downsample the complex array x to match the length of the original non-padded array.
  4. Return x.

我在执行第3步时遇到问题.如果我省略第3步,并对函数调用的结果执行逆FFT,则会得到初始填充数组,这意味着该函数成功执行了第1步和第2步.

I'm having trouble with step 3. If I omit step 3 and perform inverse FFT on the result of the function call, I get the initial padded array which means the function successfully performs steps 1 and 2.

我尝试通过使用线性插值进行下采样来实现第3步,但是当我使用MatLab对最终结果执行傅立叶逆变换时,得到的结果不等于原始数组.我需要使用的编程语言不是 MatLab,我仅使用MatLab来验证结果的正确性.

I tried implementing step 3 by downsampling using linear interpolation, but when I perform inverse fourier transform on the final result using MatLab, the results I got were not equivalent to the original array. The programming language I need to use is not MatLab, I'm only using MatLab to verify correctness of the results.

我可以使用哪些技术执行第3步,同时在进行逆FFT后仍然能够取回原始的未填充数组?

推荐答案

使用循环Sinc核插值计算向下采样的点.对于新的较低的下采样采样率,Sinc宽度将为低通滤波器的截止宽度,该截止值适合于抗混叠.

Use circular Sinc kernel interpolation to compute the down sampled points. The Sinc width will that of a low-pass filter with a cut-off appropriate to anti-alias for the new lower down-sampled sample rate.

这篇关于如何对傅立叶复数值降采样?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆