matlab - fft Matlab 振动时域到频率测量持续时间= 60 s
问题描述
我正在尝试将时域中的振动信号转换为频域(使用 fft)以显示幅度响应。但是图表是这样显示的。你能看看我哪里错了吗?
关于数据是从 1/4/2015 0:00:00 - 15/4/2015 1:46:00 开始的时域往复式压缩机的振动有 20267 行,测量持续时间 = 60 秒或 1 分钟,RPM压缩机的转速 = 372.99152 RPM 链接到数据 中的数据集 x45= 振动 (m/s^2) 和 x52 = 压缩机的转速
%% load vibration data in csv file
filename = 'data.csv';
T = readtable(filename);
T1 = T(:,1:2);
x45 = T1{:,2};
plot(T.time,T.x45);
xlabel('Time in seconds');
ylabel('Amplitude of signal');
dc3 = dsp.DCBlocker('Algorithm','Subtract mean'); % I use mean to remove dc-offset
y3 = dc3(T.x45);
%% Use FFT convert time domain signal into frequency domain
% FFT output follows complex notation (a+ib)
X45 = fft(y3); % X45 is the frequency domain representation
%% Retrieve the magnitude information from X45
X45_mag = abs(X45);
%% Retrieve the phase information from X45
X45_phase = angle(X45);
%% Frequency bins
N = length(x45);
Ts = 60; % measurement duration= 60 s or 1 minute
Fs = 1 / Ts ;
Fbins = ((0: 1/N: 1-1/N)*Fs).';
%% Plot magnitude response
helperFFT(Fbins,X45_mag,'Magnitude Response')
%% Plot phase response
helperFFT(Fbins,X45_phase,'Phase Response')
function helperFFT(bin, yVal,titleStr)
%Copyright 2014 The MathWorks, Inc
close all;clc;
figure;
plot(bin, yVal,'Color',[0,0,1],'LineWidth',1.5); box on; grid on;
xlabel('Frequency (Hz).');
if strcmp(titleStr,'Phase Response');
ylabel('Radians');
title('FFT - Phase Response');
else
ylabel('Magnitude');
title('FFT - Magnitude Response');
end
解决方案
您的幅度谱看起来不错,但您只需要绘制一半的频谱(实际信号具有复杂的共轭对称性)。
还可以查看像periodogram这样的 MATLAB 函数,它们可以为您完成很多上述工作。
推荐阅读
- python-3.x - Python中的多线程问题 - 我怎样才能使它正常工作?
- c++ - 以垂直列表/或 C++ 中的文本的形式对齐文本
- typescript - 使用模块 xlsx-style 和 xlsx 将图像添加到 xlsx 文档
- reactjs - 我无法将变量传递给函数 ReactJS 之外的函数
- java - 合并多个 LiveData 源?
- pandas - Pandas:按整数选择数据框中的多列
- c# - 当方法被另一个方法调用时,RabbitMQ Consumer 不检索消息
- javascript - 我想为我的 Quiz React 应用程序启动倒数计时器(小时:分钟:秒),如何仅在选择主题时启动计时器?
- java - 在 JPA 一对多关系中分配给 NULL 的外键
- python - ModuleNotFoundError 即使在 Google Colab 中导入之后