有失真的周期信号的频率

信息处理 信号分析
2022-02-06 17:08:06

我想评估来自检测器的一些不稳定周期性信号的频率:

信号开始 周期缩放

信号被连续记录,可能存在也可能不存在(即周期性的)。周期信号的频率和幅度可以改变但保持在一定范围内。周期信号的形状或多或少与第二张图像所示的相同。它有时可能具有更高幅度和频率的失真。

我需要检查 1)是否存在周期性信号,以及 2)它具有什么频率。

有什么好的方法吗?


编辑 1

我不确定在这种情况下 FFT 是否可靠。你怎么看?

所有数据点的频谱

在此处输入图像描述

最后 512 点的频谱

在此处输入图像描述

基于Matlab 站点的示例,使用 Octave(在线)计算光谱

N = 512; % length(all_data)
x = all_data(1:N);
Fs = N;
xdft = fft(x);
xdft = xdft(1:N/2+1);
psdx = (1/(Fs*N)).*abs(xdft).^2;
psdx(2:end-1) = 2*psdx(2:end-1);
freq = 0:Fs/length(x):Fs/2;
plot(freq,10*log10(psdx));
2个回答

信号看起来像窄带噪声,可能根本不是周期性的。FFT 通常会显示存在一些噪声的周期性信号。

在 FFT 结果中,如果您有一个周期信号,您应该看到基波及其谐波处的峰值。如果“周期性”信号不稳定(以某种方式调制),峰值将变得不那么明显。

您可以在数据上尝试不同的窗口函数,以查看 FFT 数据中是否可以看到更多定义的谐波峰值。例如,使用多个窗口(例如高斯窗口和布莱克曼-哈里斯窗口)比较结果。

计算 FFT 时使用的窗口大小(数据长度)的选择也会影响您的频率分辨率(bin 间距)。如果您可以粗略估计信号的周期,请选择一个是估计周期的倍数的数据长度,以便 bin 与信号谐波对齐。一般来说,较长的数据集将提供比较短的数据集更好的频率分辨率,因此如果您不知道信号的周期,请使用较长的数据集。

感谢您上传您的数据。看起来有一个相当强的周期性分量,频率(与您的第一个图大致一致): 0.0421/24

在此处输入图像描述

用 Mathematica 生成:

x = ReadList["Desktop/raw.txt"];
y = Abs@Fourier@Standardize[ x, Mean];
ListLinePlot[y[[1 ;; Round[0.15 Length@y]]], Filling -> Axis, PlotRange -> All, DataRange -> {0, 0.15}]

编辑 MSalters:

让我们仔细看看第一部分,直到样本 1375:

z = Fourier@Standardize[x[[1 ;; 1375]], Mean]

在此处输入图像描述

我们看到原点附近的冲动消失了。然后让我们平滑它的频谱:

ListLinePlot[Part[Abs@z /. s_ /; s < 3 :> 0, 1 ;; Round[0.08 Length@z]], PlotRange -> { {0, .08}, {0, 10}}, DataRange -> {0, .08}]

在此处输入图像描述

最后,让我们将过滤后的频谱转换回时域:

xrec = InverseFourier[z /. s_ /; Abs@s < 3 :> 0];
ListLinePlot[xrec - Min@xrec]

在此处输入图像描述

我们看到原始信号的特征多峰峰值。