FFT / PWELCH Matlab定义采样频率
FFT / PWELCH Matlab define sampling frequency
我有一个带有模拟值的 TXT-Doc https://www.mikrocontroller.net/attachment/428580/Probe_1.txt。我在 Matlab 中使用 FFT 和 Pwelch 来查找我的模拟信号的频率。理论上,频率应该在 ~300 Hz 左右。这就是为什么我想到 0-500 Hz 的区域。
我试过 fft:
>> load pr_1.txt;
>> Fs = 1000;
>> T = 1/Fs;
>> L = length(pr_1);
>> FFT = fft(pr_1);
>> P2 = abs(FFT/L);
>> P1 = P2(1:L/2+1);
>> P1(2:end-1) = 2*P1(2:end-1);
>> f = Fs*(0:(L/2))/L;
>> plot(f,20*log10(P1))
和pwelch:
>> len = 2050;
>> h = kaiser(len,4.53);
>> pwelch(pr_1,h,[],len,Fs)
两者都向我展示了相同的答案:峰值约为 300 Hz。
但我的问题是如何定义正确的采样频率 Fs?
例如,如果我将 Fs 更改为 Fs=10000 而不是 Fs=1000,我将在 ~3000 Hz 而不是 300 Hz 处获得峰值点。如果我更改 Fs = 500,则峰值结果为 150 Hz。我在理解和定义正确的 Fs 时遇到问题。
假设你提供的文件是由一些测量设备生成的,你可以取第3行
# Aufnahmerate [Hz]: 9997.4286613483
作为你的采样率 Fs。正如@Irreducible 所说,这是由捕获设备定义的固定速率。所以不能随便改。
文件的 header 还告诉你更多信息:它说有 100000 个样本,这是真的,而且如果你将每个样本的时间间隔(第 5 行)乘以样本数( 100000,第 2 行),您将得到准确的测量持续时间(第 4 行)。由此我假设,这些值是真实的。
供completeness/future参考:您文件的顶部内容:
# 2019-08-26 15:38:49.661906
# Anzahl Messwerte: 100000
# Aufnahmerate [Hz]: 9997.4286613483
# Messdauer [s]: 10.002572
# Zeitintervall je Messpunkt [ms]: 0.10002572
2.820286226094503856e+00
2.820608226282290687e+00
2.820286226094503856e+00
2.820608226282290687e+00
2.820286226094503856e+00
2.820608226282290687e+00
2.820608226282290687e+00
2.820608226282290687e+00
2.819642225722452267e+00
2.820286226094503856e+00
2.820608226282290687e+00
2.819964225907891198e+00
2.820286226094503856e+00
2.819964225907891198e+00
...
我有一个带有模拟值的 TXT-Doc https://www.mikrocontroller.net/attachment/428580/Probe_1.txt。我在 Matlab 中使用 FFT 和 Pwelch 来查找我的模拟信号的频率。理论上,频率应该在 ~300 Hz 左右。这就是为什么我想到 0-500 Hz 的区域。
我试过 fft:
>> load pr_1.txt;
>> Fs = 1000;
>> T = 1/Fs;
>> L = length(pr_1);
>> FFT = fft(pr_1);
>> P2 = abs(FFT/L);
>> P1 = P2(1:L/2+1);
>> P1(2:end-1) = 2*P1(2:end-1);
>> f = Fs*(0:(L/2))/L;
>> plot(f,20*log10(P1))
和pwelch:
>> len = 2050;
>> h = kaiser(len,4.53);
>> pwelch(pr_1,h,[],len,Fs)
两者都向我展示了相同的答案:峰值约为 300 Hz。 但我的问题是如何定义正确的采样频率 Fs? 例如,如果我将 Fs 更改为 Fs=10000 而不是 Fs=1000,我将在 ~3000 Hz 而不是 300 Hz 处获得峰值点。如果我更改 Fs = 500,则峰值结果为 150 Hz。我在理解和定义正确的 Fs 时遇到问题。
假设你提供的文件是由一些测量设备生成的,你可以取第3行
# Aufnahmerate [Hz]: 9997.4286613483
作为你的采样率 Fs。正如@Irreducible 所说,这是由捕获设备定义的固定速率。所以不能随便改。
文件的 header 还告诉你更多信息:它说有 100000 个样本,这是真的,而且如果你将每个样本的时间间隔(第 5 行)乘以样本数( 100000,第 2 行),您将得到准确的测量持续时间(第 4 行)。由此我假设,这些值是真实的。
供completeness/future参考:您文件的顶部内容:
# 2019-08-26 15:38:49.661906
# Anzahl Messwerte: 100000
# Aufnahmerate [Hz]: 9997.4286613483
# Messdauer [s]: 10.002572
# Zeitintervall je Messpunkt [ms]: 0.10002572
2.820286226094503856e+00
2.820608226282290687e+00
2.820286226094503856e+00
2.820608226282290687e+00
2.820286226094503856e+00
2.820608226282290687e+00
2.820608226282290687e+00
2.820608226282290687e+00
2.819642225722452267e+00
2.820286226094503856e+00
2.820608226282290687e+00
2.819964225907891198e+00
2.820286226094503856e+00
2.819964225907891198e+00
...