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

离散信号MATLAB频谱分析程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%FFT变换,获得采样数据基本信息,时域图,频域图
7 f1 {6 W  H+ c%这里的向量都用行向量,假设被测变量是速度,单位为m/s, U9 A7 R) R" ?! M+ N
clear;
' c7 C; u0 D4 z9 `! H8 Pclose all;
- R6 p4 n5 }9 V. L# `+ B6 |/ j" ^& u8 ^" O: N+ c8 o' g" ]
load data.txt              %通过仪器测量的原始数据,存储为data.txt中,附件中有一个模版(该信号极不规则)
) m& G( x, V" I4 z6 ~6 {A=data;                                        %将测量数据赋给A,此时A为N×2的数组
0 L% [7 p8 E9 g. ?. I0 U7 Y  Y0 D: bx=A(:,1);                                     %将A中的第一列赋值给x,形成时间序列0 @# N3 c) X9 D. t/ h3 Q: ], r
x=x';                                           %将列向量变成行向量
' n0 W, \" m$ a1 ?+ Yy=A(:,2);                                     %将A中的第二列赋值给y,形成被测量序列: I0 ?2 U' s, @/ I# A/ g! o5 D6 }
y=y';                                           %将列向量变成行向量
/ R/ f9 u, A4 m& F, L
+ q/ H- r- Z$ o%显示数据基本信息/ y2 i. n' H2 s+ j- y
fprintf('\n数据基本信息:\n')
5 F; o! g0 B9 q6 pfprintf('        采样点数 = %7.0f \n',length(x))                         %输出采样数据个数
5 u. N) C" r0 A6 Y& ^" Lfprintf('        采样时间 = %7.3f s\n',max(x)-min(x))                    %输出采样耗时
! r* b2 Y- Y4 s* t$ tfprintf('        采样频率 = %7.1f Hz\n',length(x)/(max(x)-min(x)))   %输出采样频率2 S. \& Y5 e4 h
fprintf('        最小速度 = %7.3f m/s\n',min(y))                         %输出本次采样被测量最小值
. m, f1 F" i2 v% S/ R- ]& lfprintf('        平均速度 = %7.3f m/s\n',mean(y))                      %输出本次采样被测量平均值
  F$ A. b. [& c6 z( b% G( jfprintf('        速度中值 = %7.3f m/s\n',median(y))                   %输出本次采样被测量中值
4 Y( x; Z8 i, w& k, M6 Dfprintf('        最大速度 = %7.3f m/s\n',max(y))                          %输出本次采样被测量最大值6 _* x' O* d1 c, P( q  z- f
fprintf('        标准方差 = %7.3f \n',std(y))                               %输出本次采样数据标准差
! Q% p: l: d* \9 C1 Efprintf('       协 方 差 = %7.3f \n',cov(y))                                %输出本次采样数据协方差' g3 u6 a( ^) [7 X; U) c
fprintf('     自相关系数 = %7.3f \n\n',corrcoef(y))                       %输出本次采样数据自相关系数
! c/ t! W& ~( Q& f: b  ; f2 l' M/ d% c3 G9 y9 I' M
%显示原始数据曲线图(时域)
( H, I$ g7 Z5 Wsubplot(2,1,1);; D( \5 t, k( ^1 X4 E0 p+ h+ Y
plot(x,y)                                                                                %显示原始数据曲线图7 \% w* B; p& J
axis([min(x) max(x) 1.1*floor(min(y)) 1.1*ceil(max(y))])             %优化坐标,可有可无! \9 E! ]) P& M) J
xlabel('时间 (s)');
: W2 {+ R) t) f) R8 lylabel('被测变量y');
1 Y0 _3 [2 J, |- `' ititle('原始信号(时域)');0 T4 \' \" e+ K6 v
grid on;
/ [) ^) P: d3 D' C+ ^6 E/ J" B, R/ q* ~! R
%傅立叶变换
3 t4 ?9 c9 i7 v4 Xy=y-mean(y);                                               %消去直流分量,使频谱更能体现有效信息, u3 h- ^" \; [! G2 T- n
Fs=2000;                %得到原始数据data.txt时,仪器的采样频率。就是length(x)/(max(x)-min(x));     
9 C( W* S! I$ e2 ?8 pN=10000;                                                 %data.txt中的被测量个数,即采样个数。其实就是length(y);
* i; V3 O0 C2 [9 M' yz=fft(y);3 _* k2 t! Q7 H0 U- W' ^. D
9 z4 t8 P1 `( X* s! }
%频谱分析
4 H# m# X( C5 m( M9 K! D: X2 @; Kf=(0:N-1)*Fs/N;8 |/ {# G4 P$ \. K. N1 R; L
Mag=2*abs(z)/N;                                        %幅值,单位同被测变量y3 z* V3 N/ M3 D- X
Pyy=Mag.^2;          %能量;对实数系列X,有 X.*X=X.*conj(X)=abs(X).^2=X.^2,故这里有很多表达方式
: W9 q# q6 {! P0 }: O1 q3 N( X# F# G+ I% P) F! A& l' U
%显示频谱图(频域)
3 o2 G/ H5 N0 N& zsubplot(2,1,2)) @, e2 o4 T( K: Q8 h
plot(f(1:N/2),Pyy(1:N/2),'r')                         %显示频谱图
- \  m, a/ \$ k  L6 e2 \! L" X( h%                 |+ t( _1 \$ K' q2 d1 C: @2 p
%             将这里的Pyy改成Mag就是 幅值-频率图了, e" n( G2 {) I9 e: \( g/ {4 f* N
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)))])
  a+ F8 q( L% @2 pxlabel('频率 (Hz)')
/ G& j5 ^5 C% ~1 Tylabel('能量')
1 w2 Q0 p$ Q& C8 etitle('频谱图(频域)')
. L2 l- h5 ?( r8 \! k8 Pgrid on;7 v- I8 L" j7 G- ]7 x' [2 l+ O# h
$ B! t8 w9 H3 \/ W7 M
%返回最大能量对应的频率和周期值1 ^0 m& c1 N4 K& h7 x9 a/ Y, E* a% c
[a b]=max(Pyy(1:N/2));" P9 |! c3 U5 n: ?6 x8 R, ?" B
fprintf('\n傅立叶变换结果:\n')
6 ~+ J. G' g' O: T  ?) }* f, Ofprintf('           FFT_f = %1.3f Hz\n',f(b))             %输出最大值对应的频率0 h5 K# L* K# a5 G
fprintf('           FFT_T = %1.3f s\n',1/f(b))          %输出最大值对应的周期
0 M  ]* a- j+ L9 i( C% 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-11-24 06:51 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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