【发布时间】:2017-07-28 09:00:43
【问题描述】:
我有两个主要问题,但从头开始: 我想知道 FFT(快速傅里叶变换)如何在实际示例中起作用。我创建了两个正弦波(例如 Wave1 = 5 Hz 和 Wave2 = 15 Hz 幅度),然后我将这两个相加并从第三个“Wave3”进行 FFT。看起来不错 - 我在 5 赫兹和 15 赫兹附近看到了我的“峰值”。
蓝色 = 5 Hz,红色 = 15 Hz,黄色 = 蓝色 + 红色。 “黄色”波的 FFT,看起来不错:
好的,然后我已经更改了数据。现在我有两个振幅相同但相位相反的波。如果我添加它们,它们的幅度为 0 - 这对我来说似乎是正确的。
两个相位相反的波。 Yellow - Wave1+Wave2 + 黄色波浪的奇异 FFT:
现在是我完全不明白的部分。以下是我的问题:
1) 即使我在图片上看到第三个黄色波的振幅等于 0,但在数据表中却不是这样。添加两个主波后(它们有相反的数据!)我得到了奇怪的结果。
示例:数据中的前 5 个点
第一波:
- 0,0627905195293128
- 0,125333233564304
- 0,187381314585724
- 0,248689887164855
- 0,309016994374947
第二波:
- -0,0627905195293134
- -0,125333233564304
- -0,187381314585724
- -0,248689887164855
- -0,309016994374947
第 3 波(总和):
- -5,68989300120393e-16
- -1,11022302462516e-16
- -1,11022302462516e-16
- 3,05311331771918e-16
- -1,11022302462516e-16
为什么这些波的总和不等于0,如图所示?为什么 FFT 看起来如此奇怪? FFT 是否有可能向我们展示两个具有相反相位的相同波的实际幅度?我以为不会,但事实是什么?
这是我的 MATLAB 代码:
三波:
D = 1; % 1 second
S = 1000; % sampling rate
P = 0.5; % phase
T = 1/S; % sampling period
t = [T:T:D]; % time
myphi=2*pi*P;
myphi2=2*pi*1;
syn3 = sin(2*10*t*pi+myphi); % first wave
syn2 = sin(2*10*t*pi+myphi2); % second wave
sinmax=syn2+syn3; % yellow wave
figure; plot(t,syn3,t,syn2,t,sinmax,'LineWidth',2); grid on;
xlabel('Time (seconds)');
ylabel('Amplitude');
FFT 代码:
L = length(sinmax);
myFFT = fft(sinmax,S);
myFFT=myFFT/L; %scale the output to 1
freq = S/2*linspace(0,1,S/2);
figure; stem(freq,abs(myFFT(1:length(freq))));
xlabel('Frequency (Hz)');
ylabel('Amplitude');
非常感谢您提前...
玛丽
【问题讨论】:
-
在第二张图中查看频率幅度的比例。它们实际上为零(大约为
eps)。结果似乎是正确的,最多floating-point inaccuracies -
嗨!感谢你的回复!好的,据我所知,数据很好(即我的代码中没有错误),并且由于我的规模,我无法真正看到“黄色”线并不像看起来那样平坦。没关系,谢谢。我还不明白,为什么用“-0,125..”添加“0,125..”不是“0”而是“-1,11”之类的东西。为什么 FFT 看起来如此奇怪,好像这个黄色波是由 0 到 500 Hz 的所有这些频率组成的?物理学中有一些我不明白的东西。我以为会有破坏性干扰。不是吗?
-
您在第二张图中看到的 FFT 幅度大约是第一张图中的
10^16倍。它们应该是0,但它们不完全是0,因为存在小的数值错误。举个更简单的例子,试试sin(pi/4)-sqrt(2)/2,你会发现它给出的不是0。所以这对物理学来说并不奇怪。这只是数字问题。如果将两个 FFT 绘制在相同的轴上,与第一个相比,第二个实际上看起来为零 -
哦!现在我明白了,所以这都是关于那些小数字和比例尺上的数字错误。非常感谢您的回答!
-
是的,你的回答很好。您可以关闭此主题,尽管我认为它与您提到的主题不太一样。不仅要了解 Matlab 的工作原理,还要了解 FFT 和波形:更多像我这样的菜鸟可能会觉得你的答案很有趣。再次感谢您:)。
标签: matlab signal-processing fft physics