TA的每日心情 | 擦汗 2018-9-25 11:31 |
|---|
签到天数: 15 天 连续签到: 1 天 [LV.4]偶尔看看III 累计签到:15 天 连续签到:1 天
|
发表于 2018-7-14 19:56:21
|
显示全部楼层
2 m g- b- H3 |. u1 {频谱图是需要进行FFT分析的,这一步可以在MATLAB中代码实现,我近期恰好做了一次这个所以也刚弄明白,分享给你一条代码希望有所帮助。4 R+ B2 I" z8 x+ l0 ]3 j! R+ i
clear;
/ Q2 V" W* f! J( \& fclc;
) q5 T% |+ T$ e$ F# m) z$ c5 T+ F4 g3 TA=importdata('.xlsx');%导入数据
( s$ s% T( \: }" {Data=A.data;2 ~/ f+ D# n) d' b! Y T
DataSheet1=Data.Sheet1;%取表格第一sheet的数据
' ~9 u$ X" b4 g; ]SampleRate=1*1e5;%采样率4 y% T, r$ g5 e& l5 s% }- k y
, y* c/ @$ H+ ]1 n8 \4 @
DataSheet1=DataSheet1(3:end,:);%取表格第三行到结尾的数据
$ ^6 u6 V4 J, z) sI=DataSheet1(:,1);%其中第一行为电流的数据
4 b* D3 j- p8 |, j9 W9 x7 }# e
# d3 j5 J& k: E \ l% c# ATime=1:numel(I);%取抽样点数的数据 t! N) z* ?, W/ _
Time=Time/SampleRate;%波形图的横轴即间隔周期5 o0 U2 T# |3 \- L5 B$ z6 h
plot(Time,I)%画出波形图
+ ?5 Q! V9 z$ }4 ~) V g7 D- f3 L/ m9 n, N# I7 b: |4 R
TS=Time;$ m' |; F2 K. ^& O
L=numel(TS);% O$ \4 i. r+ t, C
y=I;
: Y% \- A& a& L5 |4 [%% fft
[* g: B: P6 X& v) `" q+ b- tFs=1./mean(diff(TS));%频率
' D3 O, P5 I; r6 C, PNFFT = 2^nextpow2(L);%主要用于计算L点最近的2的整数次幂的点数,此处取16384: |* n' A9 N3 B' O3 Z4 [" x
Y = fft(y,NFFT)/L;%Y是复数矩阵,由于fft处理后数据为实数和复数的形式
5 @ _3 O3 `/ K! Ef = Fs/2*linspace(0,1,NFFT/2+1);%频率分辨率矩阵,linspace将0-1平均分成NFFT/2份: h% l% C( t) X% M/ X6 T9 z
PShow=2*abs(Y(1:NFFT/2+1));%计算模值,前面已经除以L了,此处绘图时候仅乘以2,这样绘制的频谱图就是时域信号对应频率点的真实幅值
% s- Q5 `4 @4 r, @FreqShow=f*10;%频率分辨率( ?4 x1 o( T# @* E' M
plot(FreqShow,PShow)5 I) y" K8 I2 k0 w/ C0 E
Pyy = [1 : NFFT/2];3 k, y% \9 @1 O8 i4 b7 V/ }# ~
for i = 1 : NFFT/2
! @% e, l# {* Y: J$ ^Pyy(i) = phase(Y(i)); %计算相位
- j+ m ]4 K; H- x w$ jPyy(i) = Pyy(i) * 180 / pi; %换算为角度& G& q+ E" _8 ?" ?% Y1 A
end;$ z, ^2 U0 Z5 |: f/ U7 N9 T9 P
xlabel('Frequency'): U i* ^) k9 l3 h* K* E
ylabel('幅值')
5 Y6 M' {( Y0 Z, @ p7 _& C% axlim([1,1e5])0 r2 d* Z6 _% r% `: Q& Q
grid on
' p- z4 K0 D) `4 c7 e; `) }* j. S0 d& n) X- d9 u( R1 @
4 \: A+ D; \8 F
|
|