- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一些信号,我将它们加起来形成一个更大的信号,其中每个信号都位于不同的频率区域。现在,我使用 FFTW 对大信号执行 FFT 运算,并切出具体的 FFT bin(信号所在的位置)。
例如:大信号用1024点进行FFT变换,信号的采样率为 fs=200000
。
我通过以下方式计算给定起始频率和终止频率的具体 bin 位置:
tIndex.iStartPos = (int64_t) ((tFreqs.i64fstart) / (mSampleRate / uFFTLen));
例如我得到的第一个信号被切掉了 16 个 bin。现在,我再次使用 FFTW 进行 IFFT 变换并取回 16 个复数值(因为我为 16 个 bin 保留了 vector )。
但是当我在 MATLAB 中将提取的信号与原始小信号进行比较时,我可以看到原始信号(是一个 wav 文件)有 xxxxx 数据,而我的信号(我保存为原始二进制文件)只有16 个复数值。
那么如何获取要正确变换的IFFT运算的长度呢?这里有什么问题?
编辑逻辑本身分为 3 个程序,每行都在多线程环境中。出于这个原因,我在这里发布了一些伪代码:
ReadWavFile(); //returns the signal data and the RIFF/FMT header information
CalculateFFT_using_CUFFTW(); //calculates FFT with user given parameters, like FFT length, polyphase factor, and applies polyphased window to reduce leakage effect
GetFFTData(); //copy/get FFT data from CUDA device
SendDataToSignalDetector(); //detects signals and returns center frequency and bandwith for each sigal
Freq2Index(); // calculates positions with the returned data from the signal detector
CutConcreteBins(position);
AddPaddingZeroToConcreteBins(); // adds zeros till next power of 2
ApplyPolyphaseAndWindow(); //appends the signal itself polyphase-factor times and applies polyphased window
PerformIFFT_using_FFTW();
NormalizeFFTData();
Save2BinaryFile();
-->然后在MATLAB中分析数据(目前正在工作中)。
最佳答案
如果您有一个由 1024 个样本组成的真实信号,则可以通过将频谱乘以矩形窗口然后进行 IFFT 来获得 16 个感兴趣的频率仓的贡献。这基本上相当于:
fftw_plan_dft_1d(..., FFTW_BACKWARD,...
进行逆变换),则计算上半部分频谱的厄米对称性(或者简单地使用半谱表示并通过 fftw_plan_dft_c2r_1d
执行逆变换)。也就是说,通过使用专门设计的滤波器而不是仅在频域中使用矩形窗口,您可以获得更好的频率分解。
关于c++ - FFT和IFFT的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966786/
我有一个简短的问题:我想从c代码中调用matlab函数ifft(快速傅立叶逆变换) 我试图了解 c 的 matlab api,但找不到任何有关如何传递参数或如何在 c 代码中调用 matlab 内部函
我只想知道 IFFT 后虚部冲突背后的原因。 对于我的 C/C++ 实现和 Matlab 实现,我正在执行相同的以下步骤。 我的信号 x 的维度是 Mx1,我执行了 N 点 FFT(其中 N = 2*
谁能解释一下在 MATLAB 中执行对称 IFFT 的算法? 举个例子: out_signal = ifft(X,'symmetric'); 这里,X是复对称信号。 最佳答案 symmetric执行
FFT 工作正常,但当我想采用 IFFT 时,我总是从其结果中看到相同的图形。结果很复杂,无论原始信号如何,图形始终相同。 在实部图中是一个 -sin,周期 = 帧大小 虚部是同周期的-cos 哪里会
我在对称频谱上执行 iFFT(使用 Python)。为什么结果不是实值信号而是包含复值? # My symmetric spectrum spectrum = numpy.array( [1+1j,2
我知道快速傅里叶逆变换 (ifft) 将通过对信号进行 fft 获得的数据中的多个正弦波求和在一起。 有没有一种方法可以使用任意波形而不是仅使用正弦波来使用新型快速傅立叶逆变换 (ifft) 创建信号
我有一个时间信号,我计算它的傅里叶变换以获得频率信号。根据帕塞瓦尔定理,这两个信号具有相同的能量。我用 Python 成功地演示了它。但是,当我计算频率信号的傅里叶逆变换时,能量不再守恒。这是我的代码
我在使用 numpy 的快速傅里叶逆变换函数时遇到了一个非常令人沮丧的问题。根据我的其他结果,我知道 fft 函数运行良好。调用 ifft 后似乎引入了错误。例如,以下内容应该打印零: temp =
在 Matlab 中,当我输入一个一维复数数组时,我得到一个具有相同大小和相同维度的实数数组的输出。尝试在 CUDA C 中重复此操作,但输出不同。你能帮忙吗?在 Matlab 中,当我输入 ifft
我是否只是嵌套它们( iff(fft(audio)) )或逐个窗口尝试( window 音频,执行 fft ,执行 ifft ,然后反转窗口,用 eps 替换零,然后合并样本回来(尝试 abs 在管道
鉴于我只想选择频率,我正在尝试计算逆 FFT。以下是我进行 FFT 的方法: final double[] points = reader.readPoints(); final DoubleFFT_
在下面的代码中,我有一个函数,它返回裁剪到某个半径的中心圆的图像。然后我对图像进行傅立叶变换,然后再次进行逆傅立叶变换,以恢复图像,效果很好。 然后我计算出,半径为 43 的能谱(此处不包括)的中心圆
我有一个关于 fft 和 ifft 函数的问题。 假设 A 是一个包含 365 天数据的数组: fft_output = scipy.fftpack.fft(A) 它给了我与所有频率相关的系数。我只需
我需要复数数组的傅里叶逆变换。 ifft 应该返回一个真正的数组,但它返回另一个复杂的数组。 在 MATLAB 中,a=ifft(fft(a)),但在 Python 中它不是那样工作的。 a = np
我正在尝试获取通过同轴电缆的高斯脉冲输出。我制作了一个代表同轴电缆的矢量;我在网上获得了衰减和相位延迟信息,并使用欧拉方程创建了一个复杂的阵列。 我对我的高斯向量进行了 FFT,并用我的电缆对其进行了
我有一个信号,我正在对其进行 FFT,与自身进行卷积,然后将 IFFT 返回到时域。信号长8192。如果我将信号填充到 16384 (N*2) 并执行操作,我会得到正确的输出。然而,这有必要吗?但是当
我正在尝试对彩色图像应用 FFT。我提取了三个分量:红色、绿色和蓝色,然后将 fft2 分别应用于每个分量,然后在每个平面中应用高斯滤波器。现在我试图在模糊后显示红色、绿色和蓝色分量。之后,我应用 i
我知道我可以通过更改变量 shift 来按整数更改频率,但是如何使用带小数位的数字(如 .754 或)更改频率 1.2345 或 67.456。如果我将变量 'shift' 更改为非整数,如 5.1
我一直在做一些使用 2D Scipy FFT 对图像进行反卷积的工作。然而,Matplotlib 无缘无故地反转了生成的 IFFT 数组的配色方案,即使 RGB 值是正确的。 import numpy
我在诊断和修复此错误时遇到问题。我正在尝试编写 OaA 算法,描述 in this paper . #!/usr/bin/env python # -*- coding: utf-8 -*- """
我是一名优秀的程序员,十分优秀!