TA的每日心情 | 擦汗 2018-9-25 11:31 |
|---|
签到天数: 15 天 连续签到: 1 天 [LV.4]偶尔看看III 累计签到:15 天 连续签到:1 天
|
发表于 2018-7-14 19:56:21
|
显示全部楼层
; z$ m9 V6 x$ @* r频谱图是需要进行FFT分析的,这一步可以在MATLAB中代码实现,我近期恰好做了一次这个所以也刚弄明白,分享给你一条代码希望有所帮助。- p! w4 _% F P" A
clear;' Z1 d6 R: x8 c {3 [7 m
clc;% h0 i8 O% @: f2 ]
A=importdata('.xlsx');%导入数据
3 p" N" M( p" F7 e X+ J) CData=A.data;
2 s- }/ U% Y) k& C/ @( y7 y9 LDataSheet1=Data.Sheet1;%取表格第一sheet的数据/ `: h. W$ [: u- G# C+ @5 N
SampleRate=1*1e5;%采样率4 d$ ^7 [ E: [3 i1 j6 h" _
$ G( ^; [: j1 t) [DataSheet1=DataSheet1(3:end,:);%取表格第三行到结尾的数据
' ?0 U1 d2 v2 C4 e- xI=DataSheet1(:,1);%其中第一行为电流的数据% J7 H" l/ d( _0 E; A" v
- ~7 M8 y: C2 \ gTime=1:numel(I);%取抽样点数的数据
4 t/ _, A' L Z# JTime=Time/SampleRate;%波形图的横轴即间隔周期3 u" ?0 r3 a0 n! V0 j" [
plot(Time,I)%画出波形图
3 m# \$ R0 z F; \* [5 R" Y+ Z: ~/ w; j3 t. a: h
TS=Time;
& R* D; v4 P& O+ N3 v( ]L=numel(TS);
9 v/ N2 j7 Z$ U% V" F4 \' Q; py=I;
; T! n' t/ x) b+ [7 r8 M%% fft5 i& ]: d W+ J# d* g0 a/ Q! y+ Y
Fs=1./mean(diff(TS));%频率
. [; M/ I q# i, V) D- p% j2 c* \# hNFFT = 2^nextpow2(L);%主要用于计算L点最近的2的整数次幂的点数,此处取16384
8 r' O5 ~8 g* q( j' s! s7 aY = fft(y,NFFT)/L;%Y是复数矩阵,由于fft处理后数据为实数和复数的形式
, G) J! U. a1 D/ q* Vf = Fs/2*linspace(0,1,NFFT/2+1);%频率分辨率矩阵,linspace将0-1平均分成NFFT/2份9 u+ N7 w5 g+ M5 t/ L
PShow=2*abs(Y(1:NFFT/2+1));%计算模值,前面已经除以L了,此处绘图时候仅乘以2,这样绘制的频谱图就是时域信号对应频率点的真实幅值
. @, k0 A/ T; q+ d7 XFreqShow=f*10;%频率分辨率& x' D) C- |4 d" k% I5 H+ Q. N- }
plot(FreqShow,PShow)
! S5 S; A; ]0 G; q/ oPyy = [1 : NFFT/2];
- ?& t7 s$ }9 ?for i = 1 : NFFT/2" N0 c3 o/ u$ [
Pyy(i) = phase(Y(i)); %计算相位8 a2 X1 Y% `! G- o) i N$ A7 T
Pyy(i) = Pyy(i) * 180 / pi; %换算为角度) A" g; K. \* i6 @# c+ X
end;
* q& Y+ E+ r! K9 `% @ ]; Fxlabel('Frequency')8 ^0 |8 u# |+ _9 s; r% |7 J& M# I
ylabel('幅值')
# L' A: m9 i7 O; y: cxlim([1,1e5])
9 A& a" j# f/ _+ Y) Sgrid on) U+ s0 R* D8 ^& x+ p, G0 y
! v" p. ]' c( Q6 V3 I9 i; n7 I
; I! f6 s" r8 H; e5 O% x- \
|
|