c++ - 当信号在 Matlab 中的原始数据中时计算频率轴上的 FFT

标签 c++ matlab signal-processing fft ifft

我有一个以 100 MS/sec 采样的频率为 10 MHz 的信号。当我的信号在 rawData 中(这个 rawData 的长度是 100000)时,如何在 matlab 中根据频率计算 FFT,还有

  1. NFFT 的最佳长度应该是多少(即,NFFT 取决于什么因素)
  2. 为什么我的振幅(Y 轴)随 NFFT 变化
  3. NFFT、N 和 L 之间有什么区别。如何计算信号的长度
  4. 如何从单个信号(在原始数据中)中分离噪声和信号

这是我的代码,

t=(1:40);
f=10e6;
fs=100e6;

NFFT=1024;

y=abs(rawData(:1000,2));
X=abs(fft(y,NFFT));
f=[-fs/2:fs/NFFT:(fs/2-fs/NFFT)];

subplot(1,1,1);
semilogy(f(513:1024),X(513:1024));
axis([0 10e6 0 10]);

最佳答案

您可以在 another post 中找到相应的频率, 我只回答你的其他问题:

  1. 在大多数情况下,包含您的所有数据是最佳选择。 fft 只是将您的输入数据截断为请求的长度,这可能不是您想要的。如果您知道输入单曲的周期,则可以将其截断以包含整数个周期。如果您不知道,窗口(例如 Hanning)可能会很有趣。

  2. 如果您更改 NFFT,您会在 fft 计算中使用更多数据,这可能会稍微改变给定频率的振幅。您还可以计算 0Fs/2(采样频率的一半)之间更多频率的振幅。

  3. 问题不清楚,请给出NL的定义。

  4. 这取决于您的应用。如果噪声与信号频率相同,则无法将其分离。否则,您可以使用滤波器(例如带通)来提取感兴趣的频率。

关于c++ - 当信号在 Matlab 中的原始数据中时计算频率轴上的 FFT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43679069/

相关文章:

c++ - 以管理员身份运行应用程序时,有什么方法可以获取非管理员用户名

linux - 在 Linux 操作系统上的 MATLAB 中保存文件的命令

matlab - 无法在 Matlab 中保存非常大的矩阵

python - 如何从边缘检测图像中找到多边形顶点?

matlab - 如何使用带通滤波器合成雷声

c++ - 我应该使用std::list还是有更好的方法?

c++ - 推导参数失败,适用于返回值

c++ - C++ 中指针的段错误

java - 如何以编程方式在 MATLAB 编辑器中执行 "collapse-all-folds"?

matlab - 混淆绘制 FFT 幅度时的频率轴是如何产生的