matlab FFT变换后 plot(f,2*abs(Y)/length(Y)) 为何要乘以2除以Y的长度才能得到正确的幅值呢?Fs = 1000; % 采样频率 T = 1/Fs; % 采样时间 L = 1000; % 总的采样点数
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/07 15:36:43
matlab FFT变换后 plot(f,2*abs(Y)/length(Y)) 为何要乘以2除以Y的长度才能得到正确的幅值呢?Fs = 1000; % 采样频率 T = 1/Fs; % 采样时间 L = 1000; % 总的采样点数
matlab FFT变换后 plot(f,2*abs(Y)/length(Y)) 为何要乘以2除以Y的长度才能得到正确的幅值呢?
Fs = 1000; % 采样频率
T = 1/Fs; % 采样时间
L = 1000; % 总的采样点数
t = (0:L-1)*T; % 时间序列(时间轴)
%产生一个幅值为0.7频率为50HZ正弦+另外一个信号的幅值为1频率为120Hz的
正弦信号
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
y = x + 2*randn(size(t)); % 混入噪声信号
plot(Fs*t(1:50),y(1:50)) %画出前50个点
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)')
NFFT = 2^nextpow2(L); % 求得最接近总采样点的2^n,这里应该是2^10=1024
Y = fft(y,NFFT); %进行fft变换
f = Fs*linspace(0,1,NFFT+1); %频率轴
plot(f,2*abs(Y) /length(Y))
为何要乘以2除以Y的长度才能得到正确的幅值呢?
matlab FFT变换后 plot(f,2*abs(Y)/length(Y)) 为何要乘以2除以Y的长度才能得到正确的幅值呢?Fs = 1000; % 采样频率 T = 1/Fs; % 采样时间 L = 1000; % 总的采样点数
因为sin(2*pi*f*t) = (e^(j*2*pi*f*t) - e^(-j*2*pi*f*t)) / 2j.
所以你的A*sin做FFT之后得到的幅值应该是在+/-(NFFT*f)的地方各有一个幅度为A*NFFT/2j的线.