找回密码
 注册
关于网站域名变更的通知
查看: 320|回复: 1
打印 上一主题 下一主题

离散信号MATLAB频谱分析程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-5-9 10:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
%FFT变换,获得采样数据基本信息,时域图,频域图
8 ^* l! z$ F2 L% E% Y5 g% p%这里的向量都用行向量,假设被测变量是速度,单位为m/s
) i2 `2 S! ^- |, T' z/ Aclear;
4 L  ~( w; y. L, P+ b  e& F* Iclose all;( `# c$ {7 p, o1 F- ?

6 [& S  K% A  R0 D+ Eload data.txt              %通过仪器测量的原始数据,存储为data.txt中,附件中有一个模版(该信号极不规则)
5 |$ X1 o& {: l& @) L/ E( }/ dA=data;                                        %将测量数据赋给A,此时A为N×2的数组
) S0 E0 W$ {8 r! H4 L* O' px=A(:,1);                                     %将A中的第一列赋值给x,形成时间序列+ Y" f* [! K  O# @5 b' W) Z
x=x';                                           %将列向量变成行向量
/ c* Y8 @, Z: b: Ty=A(:,2);                                     %将A中的第二列赋值给y,形成被测量序列: l1 F, L: X  U3 ?. K& p
y=y';                                           %将列向量变成行向量
0 u3 j3 j- U( J5 X( O) r! W: x$ n9 C1 U' I+ C% m
%显示数据基本信息, L- e- E' n! u) N, T4 g! I$ q
fprintf('\n数据基本信息:\n')
$ Y7 U0 I% I+ K6 m) Afprintf('        采样点数 = %7.0f \n',length(x))                         %输出采样数据个数" q+ h4 g( M: U+ [$ B
fprintf('        采样时间 = %7.3f s\n',max(x)-min(x))                    %输出采样耗时
/ }% m0 E& E+ X( w0 x9 kfprintf('        采样频率 = %7.1f Hz\n',length(x)/(max(x)-min(x)))   %输出采样频率
5 ?6 o- E5 w8 _* c( ]' u1 Afprintf('        最小速度 = %7.3f m/s\n',min(y))                         %输出本次采样被测量最小值
7 C; z* P4 w* k- zfprintf('        平均速度 = %7.3f m/s\n',mean(y))                      %输出本次采样被测量平均值
/ Z. G1 _1 g; s& h5 Xfprintf('        速度中值 = %7.3f m/s\n',median(y))                   %输出本次采样被测量中值/ ~5 O  L# b& V- [
fprintf('        最大速度 = %7.3f m/s\n',max(y))                          %输出本次采样被测量最大值2 Z7 Q1 }- f! k9 `
fprintf('        标准方差 = %7.3f \n',std(y))                               %输出本次采样数据标准差9 x6 Q; @' P" u6 E
fprintf('       协 方 差 = %7.3f \n',cov(y))                                %输出本次采样数据协方差
' \# O% `0 `0 }; B) e0 kfprintf('     自相关系数 = %7.3f \n\n',corrcoef(y))                       %输出本次采样数据自相关系数
1 t  Z: `) h* ~7 j* |0 L! \: d# k  u2 q  
0 U# l8 W) w6 |1 r0 o+ s6 ?%显示原始数据曲线图(时域)9 @. ?3 g, N# I6 r$ a
subplot(2,1,1);
8 C5 Z% ?: P' I+ K/ _7 z- y+ b' Yplot(x,y)                                                                                %显示原始数据曲线图
5 s5 H2 F( t2 N% Y% k, Saxis([min(x) max(x) 1.1*floor(min(y)) 1.1*ceil(max(y))])             %优化坐标,可有可无3 X9 ^+ T! T" N. j% _% n
xlabel('时间 (s)');& T) K# V$ c. P8 B
ylabel('被测变量y');
$ {# Q5 }4 w9 x- _5 dtitle('原始信号(时域)');3 N4 K; F/ c! {4 ?! D/ e( h: @
grid on;: N: b0 }' o/ i

# O* f1 o# V* o6 R# E%傅立叶变换# ~. k# g2 S2 n
y=y-mean(y);                                               %消去直流分量,使频谱更能体现有效信息" ^5 c, O: g' B: l
Fs=2000;                %得到原始数据data.txt时,仪器的采样频率。就是length(x)/(max(x)-min(x));     " u6 U3 O$ j3 |0 g: x" ~" v0 ]
N=10000;                                                 %data.txt中的被测量个数,即采样个数。其实就是length(y);
# o6 ^) Q% o. N" l! {1 _  G& Dz=fft(y);) F0 w: N* j2 S. a4 [

6 G* C: O! @, x! g%频谱分析$ E( q' S- @; `; Y' V
f=(0:N-1)*Fs/N;1 P0 m6 g$ X/ r5 s+ V9 X
Mag=2*abs(z)/N;                                        %幅值,单位同被测变量y
) P! O2 s4 n% g% N$ u* ]: RPyy=Mag.^2;          %能量;对实数系列X,有 X.*X=X.*conj(X)=abs(X).^2=X.^2,故这里有很多表达方式* t! ?$ O. \5 D5 N# I, q7 A
: _* l; O7 h3 `
%显示频谱图(频域)1 M5 q. k- k: ], \8 {+ Y1 C. o% c. R" A
subplot(2,1,2)( {9 E% s8 |0 I% _
plot(f(1:N/2),Pyy(1:N/2),'r')                         %显示频谱图9 Q) D) Y* g4 [2 _0 d! }/ a
%                 |
4 ?, U: a" g, F. @2 R%             将这里的Pyy改成Mag就是 幅值-频率图了  X- c" k! ~" h) ^# o; T. k
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)))])
* h( v2 D% ?; E0 ~; d- Y) fxlabel('频率 (Hz)')
* i& j$ [0 \) ~/ Y2 G" Aylabel('能量')
+ Y$ x) p9 m4 E2 Wtitle('频谱图(频域)')
9 [* ^% F5 M. Q: k: L* dgrid on;) B' M* s7 `( F. T
; r9 U' q+ ~* K# K3 u1 u. N, A
%返回最大能量对应的频率和周期值
  R1 h. W+ \1 h- G* \7 q$ S[a b]=max(Pyy(1:N/2));+ L( G0 D% `8 B# j9 V" y( Z
fprintf('\n傅立叶变换结果:\n') 4 C$ Y6 R& p" q1 j
fprintf('           FFT_f = %1.3f Hz\n',f(b))             %输出最大值对应的频率  X5 e. R% v$ u; E" Z0 x7 C
fprintf('           FFT_T = %1.3f s\n',1/f(b))          %输出最大值对应的周期
6 _6 M: q& J8 T
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-5-9 13:23 | 只看该作者
    离散信号MATLAB频谱分析程序
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-25 12:00 , Processed in 0.109375 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表