如何计算最高振幅波的频率?

信息处理 频谱 振幅
2022-01-31 20:48:44

我从没有特定目的随机生成的采样信号中检索到许多值。

我收到的任务(引用如下):

计算每个文件中振幅最高的波的频率。每个波都是固定频率的。

我被要求计算每个波的频率。我怎么能这样做?

每个文件都包含一个采样信号的值:

Seconds,Volts
0, 0
5.096646E-09, 0.02255292
1.019329E-08, 0.04508986
1.528994E-08, 0.06759485
2.038658E-08, 0.09005192
2.548323E-08, 0.1124452
3.057988E-08, 0.1347587
3.567652E-08, 0.1569767
4.077317E-08, 0.1790835
4.586981E-08, 0.2010633
5.096646E-08, 0.2229007
5.60631E-08, 0.24458
6.115975E-08, 0.266086
6.62564E-08, 0.2874034
7.135304E-08, 0.3085171
7.644969E-08, 0.3294121
8.154633E-08, 0.3500737
8.664298E-08, 0.3704871
9.173962E-08, 0.3906379
9.683627E-08, 0.4105118
1.019329E-07, 0.4300948
1.070296E-07, 0.449373
1.121262E-07, 0.4683326
1.172229E-07, 0.4869603
1.223195E-07, 0.5052429
1.274161E-07, 0.5231673
1.325128E-07, 0.5407209
1.376094E-07, 0.5578913
1.427061E-07, 0.5746663
1.478027E-07, 0.5910339
1.528994E-07, 0.6069826
1.57996E-07, 0.6225011

信号持续不断...

这是我为此任务提供的所有信息。

2个回答

了解用于确定频率内容的常用工具

为了找到信号中最高振幅波的频率,您需要执行傅立叶变换。或者,更有可能是快速傅里叶变换,因为它是傅里叶变换计算效率更高的版本,专为具有有限内存可使用的计算机而设计。

我强烈建议您先熟悉傅立叶变换的实用性,然后再通过 Matlab 的fft函数或其他类似函数计算和绘制它。你应该阅读这个关于傅里叶变换的漂亮解释,以及它在信号处理中的重要性/应用。

计算信号的频率表示

您应该参考答案@PeterK left,了解如何在 R 中计算信号数据的 FFT。如果您可以访问 Matlab,我建议您探索使用它的fft功能。

了解信号的频率表示

如果您在理解输出时看到的 FFT 图的结果时遇到困难,可以参考StackOverflow 中的这个有用答案

在您的特定情况下,您提供的信号数据是采样的正弦波。连续的正弦波具有一个基本频率(例如,它永远以一个给定的频率振荡,始终以相同的速率振荡)。对信号数据执行 FFT 后,您将在 FFT 图中看到峰值。信号频率成分中的那些峰值表示输入信号中的主要频率。真正连续的正弦曲线(您的信号是正弦曲线,但不连续)在频域中只有两个峰值。一个峰值将位于其基频处,而另一个峰值将位于基频的负值处。因为您的采样信号不连续,您可能会在 FFT 图中看到其他辅助峰值,但最高峰值仍将对应于正 &

我希望这个解释有所帮助。祝你好运!

这显示了您包含的数据的子集以及它的零填充版本的 DFT(离散傅立叶变换)的绝对值。

绘制数据和 DFT


R代码低于 #Q31040

data <- read.csv('Q31040/data.csv')

par(mfrow=c(2,1))
plot(data, type='l', col="blue")

zero_padded_data <- c(data$Volts, rep(0,1000))

omega <- seq(0,2*pi - 2*pi/length(zero_padded_data),2*pi/length(zero_padded_data))
fft_data <- abs(fft(zero_padded_data))
plot(omega, fft_data, type='l', col="blue")

peak <- which.max(fft_data)
points(omega[peak], fft_data[peak], col="red", lwd = 5)
title(paste("Peak location is", omega[peak]))