|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
%FFT变换,获得采样数据基本信息,时域图,频域图' Q1 S9 j: {5 E
%这里的向量都用行向量,假设被测变量是速度,单位为m/s
: A/ X. V# i8 e6 O1 Z8 q. w' f2 y" iclear;' W. n6 c( B, R3 V
close all;* Z8 y( ^7 g- q* M- S' F6 Q; v
' ]# T7 h, S* J/ H8 K( Yload data.txt %通过仪器测量的原始数据,存储为data.txt中,附件中有一个模版(该信号极不规则)
- X) v: U4 K6 v" W0 GA=data; %将测量数据赋给A,此时A为N×2的数组
4 t8 D% L6 K$ k: B1 Kx=A(:,1); %将A中的第一列赋值给x,形成时间序列, t& |; n8 L1 `& ?9 b- o
x=x'; %将列向量变成行向量
o4 |6 T5 A; z% }) ~3 Oy=A(:,2); %将A中的第二列赋值给y,形成被测量序列
) l. ?9 m. A: |" n# @# Ty=y'; %将列向量变成行向量5 u8 D9 O; {2 f; c& L
% d! q$ P0 _# A W, B* t
%显示数据基本信息9 j' c( s( [8 p$ Q
fprintf('\n数据基本信息:\n') 3 {, M# W: F5 c
fprintf(' 采样点数 = %7.0f \n',length(x)) %输出采样数据个数# f1 {* F6 C& r0 E5 T' b' y
fprintf(' 采样时间 = %7.3f s\n',max(x)-min(x)) %输出采样耗时% E" l$ S( T5 G4 w) K! j7 d2 n. u
fprintf(' 采样频率 = %7.1f Hz\n',length(x)/(max(x)-min(x))) %输出采样频率
+ c4 K% R! s9 G8 n8 J; A! `fprintf(' 最小速度 = %7.3f m/s\n',min(y)) %输出本次采样被测量最小值) Z1 M: i, X- |" [7 \# j4 _! E
fprintf(' 平均速度 = %7.3f m/s\n',mean(y)) %输出本次采样被测量平均值: q* }! Q" B2 U0 |4 r# e; g0 H2 ~6 D
fprintf(' 速度中值 = %7.3f m/s\n',median(y)) %输出本次采样被测量中值
8 C0 a8 M( Q+ _3 o% E1 J) Wfprintf(' 最大速度 = %7.3f m/s\n',max(y)) %输出本次采样被测量最大值3 A( h) \' D; k n
fprintf(' 标准方差 = %7.3f \n',std(y)) %输出本次采样数据标准差: U6 A. f$ o& Q4 _* |
fprintf(' 协 方 差 = %7.3f \n',cov(y)) %输出本次采样数据协方差
: D% E5 R# o- r9 B8 T4 \fprintf(' 自相关系数 = %7.3f \n\n',corrcoef(y)) %输出本次采样数据自相关系数
' ~, n, W6 E3 z% F% D
6 g. ?- y6 J) s" X%显示原始数据曲线图(时域): a3 X( m9 x6 ], K+ d
subplot(2,1,1);+ b' f% f. R8 ^4 B
plot(x,y) %显示原始数据曲线图
0 \- ?3 X \, o1 _4 Qaxis([min(x) max(x) 1.1*floor(min(y)) 1.1*ceil(max(y))]) %优化坐标,可有可无
& g. p( E: B% ^xlabel('时间 (s)');( X i5 t; e/ ^+ W: i2 }. t
ylabel('被测变量y');
9 ^. H+ h9 Z, R8 Stitle('原始信号(时域)');
) S7 m* @! [# Z+ I0 ?; Tgrid on;9 i; t7 N; _) q- Q% ]% D
$ u" I0 T+ k( D" G5 I; U* N, f. ]%傅立叶变换
% Q. s. W: ], dy=y-mean(y); %消去直流分量,使频谱更能体现有效信息0 ]& q8 Q! _) d( M
Fs=2000; %得到原始数据data.txt时,仪器的采样频率。就是length(x)/(max(x)-min(x));
' b2 s& Z6 R0 G3 x+ j' f lN=10000; %data.txt中的被测量个数,即采样个数。其实就是length(y);
; v' |( E& @+ d. P' T, N G9 lz=fft(y);
) I) Y$ _* w) c, i9 B! x6 K' J, F; f" T2 m Z: d& M
%频谱分析
3 S9 m( Y. c9 Z3 }f=(0:N-1)*Fs/N;* F: Q ^8 B( o( O' P2 ^
Mag=2*abs(z)/N; %幅值,单位同被测变量y F$ l/ R w( M; K0 F& N8 e w
Pyy=Mag.^2; %能量;对实数系列X,有 X.*X=X.*conj(X)=abs(X).^2=X.^2,故这里有很多表达方式
& c- o* p' b/ Y' R1 O/ t, x! G6 |3 d ]/ i9 |
%显示频谱图(频域)6 _( ? e3 ?1 X% }2 g" X: q
subplot(2,1,2)
, A1 K2 s$ D, B0 u2 ^plot(f(1:N/2),Pyy(1:N/2),'r') %显示频谱图 V3 U9 b+ {9 w1 F9 f% Y1 a0 ]9 B6 I8 W1 f
% |
! `7 N, T$ z# b7 V4 v% 将这里的Pyy改成Mag就是 幅值-频率图了 ~! N, J5 a! x
axis([min(f(1:N/2)) max(f(1:N/2)) 1.1*floor(min(Pyy(1:N/2))) 1.1*ceil(max(Pyy(1:N/2)))])
8 _) o) B& K) I: pxlabel('频率 (Hz)')
/ n% H. {7 u! @8 P" ]ylabel('能量')2 d4 h( c) {' E( }
title('频谱图(频域)')+ S- }7 ~- ]4 q
grid on;
; E: q2 d" Q. |+ f2 b* N2 L0 o# m1 y" _3 \* d( D
%返回最大能量对应的频率和周期值
6 j o; i$ Z# ?( U9 F1 d1 W& ]" H[a b]=max(Pyy(1:N/2));
5 _ F l5 o) L, X& G V/ qfprintf('\n傅立叶变换结果:\n') : |8 l/ P5 G7 S0 L- k
fprintf(' FFT_f = %1.3f Hz\n',f(b)) %输出最大值对应的频率
) b7 Q. u+ c! Hfprintf(' FFT_T = %1.3f s\n',1/f(b)) %输出最大值对应的周期
4 L6 s$ o+ G3 ^/ w+ {: H- o( m5 N. a |
|