如果我们手动定义样本,怎么会有采样频率?

信息处理 fft
2022-02-18 17:10:11

我只是在生成矩阵、绘制它并进行 FFT 时想到了一个想法,

可以说,我随机输入了一个长度为 256 的矩阵,

[1 7 9 5 7 1 -2 0..................8]

根据 FFT,得到的 256 个 FFT 系数对应于以下频率:

0, , , , ,fs/2562fs/2563fs/256255fs/256

但是由于我采集的样本没有定义采样频率,怎么会有一些采样频率?就像在图像中,

由于图像只是一个二维矩阵,如果我在 matlab 中随机生成具有随机像素值(样本点)的图像并绘制其 FFT,matlab 将显示该二维矩阵的频率,但由于没有采样频率定义了matlab如何计算每个系数的频率?

4个回答

单位可以是任意的,例如 ISO 米,或当前国王脚的长度(可能比去年暗杀一些较短的国王后更长)。

如果没有一些 ISO 标准、有用的自然单位,或者您想不出一个可以弥补的单位(显示器的显示屏或左脚有多长等),那么一个好的默认单位就是您的长度数据窗口。例如,每个向量长度为​​ 256、2 个周期、3 个周期等,每个向量 1 个周期。如果您的矢量在显示器上显示为 3 英寸长,那么您还可以轻松地将周期/vec 转换为周期/英寸、每/毫米、每/两周等。

如果您的输入数据不对应于规则间隔的样本,我认为计算傅里叶变换是没有意义的。垃圾进垃圾出。

如果您的矩阵对应于图像,那么它很可能确实由规则间隔的样本组成,因此定义了采样频率

看起来您正在以编程方式生成信号。我在我的工作中做过很多次同样的事情,具体目标是执行 FFT 分析。

事实是:您必须任意指定采样频率是多少,您应该已经知道。如果信号是合成的,您可以使用任何方便的值。

例如,我想模拟 10 秒的肌电信号(这是我的实际应用领域)。我可以使用一些神奇的功能并使用它来生成所需的信号。由于我的 ACTUAL 采样率为 2 kHz,因此我必须“告诉”该函数生成具有 20,000 个样本的信号。

当我将此信号用作某些 FFT 函数的输入时,函数参数之一是采样率。

现在假设我有地质或天文数据。如果我想模拟大时间尺度的事件,我可以说我的采样间隔是一年,甚至是一个世纪。输入甚至可能是同一个数组,但是如果您告诉 FFT 函数采样率为 R,那么您的输出频率将与 R 成比例相关。在这种情况下,采样率是元数据,与信号无关,它不是“包含”在一个数组中,它只是一个值序列。只有您对信号性质的预先存在的知识才能让您判断哪个是它的采样率。

希望这可以帮助!

Matlab 不需要知道特定的采样频率即可实现 DFT/FFT。这来自离散时间信号 (DT)的前向 DFT 定义,具有个条目(即有限长度),x[n]N

Xk=n=0N1x[n]ej2πknN.

该定义没有使用“采样频率”的概念。虽然通常通过对连续时间 (CT) 信号进行采样来生成 DT 信号,但许多离散信号并不具有这样的来源。具体来说,DFT 的“频率”是指根据 DT 信号长度在样本内的周期性。看一下 DFT 中使用的复正弦曲线: 其中取决于您正在求解的频率系数 ( )。因此,我们看到 DFT 计算了一个离散的

ej2πkNn=cos(2πkNn)jsin(2πkNn)=cos(ωkn)jsin(ωkn)
ωk=2πkNXkN频率系数的数量,其中可以计算的频率系数的最大数量取决于我们原始的有限长度信号 ( ) 中的条目数,即频率x[n]

0,2πN,4πN,6πN,...,2π(N1)N.

换言之,使用 DFT/FFT 计算的频率必须与信号长度的某些比率下的规律性有关。因此,每一个样本、两个样本、三个样本等都有规律性。

此外,请记住 DFT/FFT 产生的系数是周期性的,因此当您查看 DFT/FFT 系数时,就像在 Matlab 中一样,您只观察到真实频谱的单个周期(或“副本”)。有关这方面的更多信息,我建议阅读或询问 DFT 与离散时间傅里叶变换 (DTFT) 之间的关系,它为一组离散时间条目生成频率的连续函数。