声明
纯属个人阅读存档,内容摘自网络,侵删~
案例1
该部分摘自MATLAB下使用fft进行频域分析
clear all
clc
Fs = 1000; % Sampling frequency HZ
T = 1/Fs; % Sampling period S
N = 2000; % Number of signal
t = (0:N-1)*T; % Time vector
%构造一个信号,其中包含幅值为 0.7 的 50 Hz 正弦量和幅值为 1 的 120 Hz 正弦量
y1 = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
%用均值为零、方差为 1 的白噪声叠加该信号
y2 = y1 + randn(size(t));
%波形快速傅里叶运算
Y1 = fft(y1);
Y2 = fft(y2);
%计算双侧频谱P2
P1_2 = abs(Y1/N);
%取出前面一半进行分析
P1_1 = P1_2(1:N/2+1);
%最终转化为单侧幅频
P1_1(2:end-1) = 2*P1_1(2:end-1);
%计算双侧频谱P2
P2_2 = abs(Y2/N);
%取出前面一半进行分析
P2_1 = P2_2(1:N/2+1);
%最终转化为单侧幅频
P2_1(2:end-1) = 2*P2_1(2:end-1);
%确定频域映射,转化为HZ
f = Fs*(0:(N/2))/N;
subplot(4,1,1);
plot(t,y1);
title('原始信号0.7幅值50HZ,1幅值120HZ')
subplot(4,1,2);
plot(f,P1_1);
title('原始信号FFT分析')
subplot(4,1,3);
plot(t,y2);
title('原始信号上叠加0.5的白噪声')
subplot(4,1,4);
plot(f,P2_1);
title('白噪声后FFT')
案例2:直接使用fft()绘制
该部分摘自Matlab的FFT绘制频谱图
% 两个频率分别为15HZ 和 20HZ 的正弦信号
Fs=50;%采样频率50Hz
f1=15;
f2=20;
t = 0:1/Fs:10-1/Fs % 0-9.98s 一共500个点
x = sin(2*pi*f1*t) + sin(2*pi*f2*t);%原始信号
N=length(x)% N=500
figure(1);
plot(t,x);
title('Original Signal');
xlabel('Time');
ylabel('Amplitude');
%直接使用fft
figure(2);
y0 = abs(fft(x)); %快速傅里叶变换的幅值
%将横坐标转化,显示为频率f= n*(fs/N)
f = (0:N-1)*Fs/N
plot(f,y0);
xlabel('Frequency');
ylabel('Amplitude');
%fftshift()调整0频位置
figure(3);
f1=(0:N-1)*Fs/N-Fs/2 ;%频率范围-25Hz-25Hz, 500个采样点
y1=abs(fftshift(fft(x)));
plot(f1,y1);
xlabel('Frequency');
ylabel('Amplitude');
% fs=50Hz,Nyquist频率为fs/2=25Hz。
% 整个频谱图是以Nyquist频率为对称轴的。
% 并且可以明显识别出信号中含有两种频率成分:15Hz和20Hz。由此可以知道FFT变换数据的对称性。
% 因此用FFT对信号做谱分析,只需考察0~Nyquist频率范围内的幅频特性。
% 幅值修正:y3=2*y2(N/2:N-1)/N
figure(4)
f3=(N/2:N-1)*Fs/N-Fs/2 ;%频率范围0Hz-25Hz
y2=abs(fftshift(fft(x)));
y3=2*y2(N/2:N-1)/N;%幅值修正得到真实幅值
plot(f3,y3);
xlabel('Frequency');
ylabel('Amplitude');
官方文档摘录
- 传送门1:使用 FFT 进行频谱分析
- 传送门2:傅里叶分析和滤波
当数据表示为时间或空间的函数时,傅里叶变换会将数据分解为频率分量。
% 带有噪声的信号
t = 0:.001:.25;
x = sin(2*pi*50*t) + sin(2*pi*120*t);
y = x + 2*randn(size(t));
% 对信号进行fft变换
Y = fft(y,251);
% 使用复共轭 (CONJ) 计算功率谱密度,即测量不同频率下的能量。
% 为前 127 个点构造一个频率轴,并使用该轴绘制结果图形。(其余的点是对称的。)
Pyy = Y.*conj(Y)/251;
f = 1000/251*(0:127);
plot(f,Pyy(1:128))
title('Power spectral density')
xlabel('Frequency (Hz)')