TA的每日心情 | 擦汗 2018-9-25 11:31 |
|---|
签到天数: 15 天 连续签到: 1 天 [LV.4]偶尔看看III 累计签到:15 天 连续签到:1 天
|
发表于 2018-7-14 19:56:21
|
显示全部楼层
% n* H2 w# \' p2 Q; y2 g
频谱图是需要进行FFT分析的,这一步可以在MATLAB中代码实现,我近期恰好做了一次这个所以也刚弄明白,分享给你一条代码希望有所帮助。, s6 v }; L; h3 ]* P; o% a; g
clear;6 V7 L& j) v @6 T
clc;7 P6 `0 H) L( e2 C
A=importdata('.xlsx');%导入数据
) S8 y7 w$ T3 y# nData=A.data;, f' `; a7 r! x9 i9 [( t' L' {! v
DataSheet1=Data.Sheet1;%取表格第一sheet的数据
$ f5 q# ^% t; x: @9 qSampleRate=1*1e5;%采样率
4 o' b6 F( S6 B9 L: K3 o
" ]( ]9 p% }# Z/ \$ |* RDataSheet1=DataSheet1(3:end,:);%取表格第三行到结尾的数据
z# y/ I+ t% M7 [! j7 fI=DataSheet1(:,1);%其中第一行为电流的数据
3 m! W0 [2 k% B- h
$ J- @' H' j% {/ VTime=1:numel(I);%取抽样点数的数据
+ V; R; H! Y) A2 {9 U p# KTime=Time/SampleRate;%波形图的横轴即间隔周期
/ P9 F4 x, V1 f0 o- g Tplot(Time,I)%画出波形图
+ g! S1 s/ e4 ]5 N% f' d' |! g. M, v& h/ n2 I
TS=Time;7 M! D5 j9 F O6 X2 d* j$ K
L=numel(TS);
' E5 [' Z2 q% `4 {' n# ey=I;" i% n8 f! }3 b( ~
%% fft, J. g; @: y4 v! _3 X4 b
Fs=1./mean(diff(TS));%频率% S$ O; Z* P* G5 Z4 x! a1 ]
NFFT = 2^nextpow2(L);%主要用于计算L点最近的2的整数次幂的点数,此处取163849 E( M2 n. [3 d" F! ~- L5 b
Y = fft(y,NFFT)/L;%Y是复数矩阵,由于fft处理后数据为实数和复数的形式
# n4 Q/ K0 w! }6 n5 p3 U: If = Fs/2*linspace(0,1,NFFT/2+1);%频率分辨率矩阵,linspace将0-1平均分成NFFT/2份& T2 o8 w! b* ]. F) ~! `3 {3 b6 @8 k
PShow=2*abs(Y(1:NFFT/2+1));%计算模值,前面已经除以L了,此处绘图时候仅乘以2,这样绘制的频谱图就是时域信号对应频率点的真实幅值& i X, J0 ?( \% N
FreqShow=f*10;%频率分辨率
: J! S7 w6 _/ `2 ~9 Uplot(FreqShow,PShow)
4 h$ R7 W0 Z+ B. ~: _Pyy = [1 : NFFT/2];
# r" q8 }$ c; J2 E5 yfor i = 1 : NFFT/2
- f% ?, P% w+ p* z/ S SPyy(i) = phase(Y(i)); %计算相位, a. g6 q% c P, T
Pyy(i) = Pyy(i) * 180 / pi; %换算为角度) M0 e$ b7 g: e/ H
end;$ J# T, P9 W1 B* _
xlabel('Frequency')
7 h Q) D5 I* F7 p; j) D' f$ _ylabel('幅值')
" V6 O- g! w) F8 Axlim([1,1e5])
/ c! i3 j) t# u! d1 a8 B6 }grid on
; I0 n) j& ~+ j% x
- P$ }, \ A; Q2 K
# `: G. j& _! ?6 {; O5 S |
|