声明

纯属个人阅读存档,内容摘自网络,侵删~

案例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.750 Hz 正弦量和幅值为 1120 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');

官方文档摘录

当数据表示为时间或空间的函数时,傅里叶变换会将数据分解为频率分量。
在这里插入图片描述
在这里插入图片描述

% 带有噪声的信号
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)')

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐