与时域不同的频域信号幅度

信息处理 fft 频率 时频 频域
2022-01-02 23:21:04

对信号进行 FFT 时,信号的幅度如何变化,

看一看,

振幅从 2 变为 30, 在此处输入图像描述

这是我生成上述输出的代码,

f=1e3;   %Frequency of Wave
A=2;    %Amplitude
Fs = 1e6;  %Sampling Frequency

Ts = 1/Fs;   %Sampling Rate

t = 10/f;       %Time period of 1 Oscillation = 1/f 

n = 0:Ts:t;  %Generating Samples


x=A*sin(2*pi*f*n);
subplot(2,1 ,1)
plot(x


% 100,000 = Fs 
% 10,000 = Length of the Signal
% 100,000/10,000 = 100Hz <- First point in FFT = 100Hz 
% 2nd Point = 200Hz
% 3rd Point = 300Hz
% 4th Point = 400Hz
% .
% .
% 10th Point = 1KHz <- Original Signal Frequency

subplot(2,1 ,2)
F=fft(x); 
plot(real((F))),grid on  
xlim ([0 20])
2个回答

你忽略了四件事:

  • 1FFT_size归一化系数。一些 FFT 实现有或没有这个因素。在 Mathworks 网站上检查 matlab 执行的 FFT 定义!
  • 为什么只看实物?幅度由复数的模数(幅度)表示。这里,实部是 31,但虚部是 -10000。
  • 幅度为 2 的正弦波产生两个幅度为 1 的复指数。
  • 请记住,您不是在计算正弦波(从负无穷到无穷大)的傅里叶变换,而是正弦波乘以矩形窗口的傅里叶变换。结果,您不会找到正弦波的频谱,而是由孔径频谱卷积的正弦波频谱(矩形窗口的 sinc 函数)。能量将流过相邻的频段,而不是被限制在频段 11 中。您需要将相邻频段的能量相加才能恢复所有能量!

回到你的例子:

abs(F(11)) 是 10000。除以样本长度,你会得到比 1 小一点(这是预期值)。将相邻垃圾箱中的小残留物相加,您将获得预期的能量。

这是你应该如何做的。

FFT 中的两个尖峰的幅度各为 1(将它们相加,得到时域幅度为 2)

clc
close all
clear all

f = 1000;
A = 2;
Fs = 16000;
t = 0:1/Fs:100/f;
x=A*sin(2*pi*f*t);
subplot(2,1 ,1)
plot(x)


% 100,000 = Fs 
% 10,000 = Length of the Signal
% 100,000/10,000 = 100Hz <- First point in FFT = 100Hz 
% 2nd Point = 200Hz
% 3rd Point = 300Hz
% 4th Point = 400Hz
% .
% .
% 10th Point = 1KHz <- Original Signal Frequency

subplot(2,1 ,2)
plot(abs(fft(x))./length(x))