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

离散信号MATLAB频谱分析程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%FFT变换,获得采样数据基本信息,时域图,频域图- `$ p; u1 J: q7 b$ f$ `
%这里的向量都用行向量,假设被测变量是速度,单位为m/s
7 D) I% E. X. d2 i* Iclear;3 s1 {; J- ^1 j  c* t. g( _
close all;$ m$ G5 I# b& m1 `" u, `! w/ @
. M0 Q/ U. d: ~3 m& g7 y
load data.txt              %通过仪器测量的原始数据,存储为data.txt中,附件中有一个模版(该信号极不规则)7 t- v$ W' N1 J
A=data;                                        %将测量数据赋给A,此时A为N×2的数组2 {9 P) `/ l/ ^7 x
x=A(:,1);                                     %将A中的第一列赋值给x,形成时间序列9 t* h' ~/ k7 h0 i' X# N: d
x=x';                                           %将列向量变成行向量
( @. |- T9 P$ U3 P7 O; E/ gy=A(:,2);                                     %将A中的第二列赋值给y,形成被测量序列
' w: f4 N6 ?( V2 z+ sy=y';                                           %将列向量变成行向量
* o! Z% N/ x$ \4 U4 C% T0 M, S: D4 ^6 j  |
%显示数据基本信息
1 B& w. M! {1 [1 [2 Efprintf('\n数据基本信息:\n')
3 S) r( T0 {: l5 Y  efprintf('        采样点数 = %7.0f \n',length(x))                         %输出采样数据个数1 r  y1 E' ]" @6 L. {4 R& \* k
fprintf('        采样时间 = %7.3f s\n',max(x)-min(x))                    %输出采样耗时
" u: Y3 Y0 w# e4 E: b( }! l* sfprintf('        采样频率 = %7.1f Hz\n',length(x)/(max(x)-min(x)))   %输出采样频率
! M4 F3 F7 I- X# F  e: y7 h& zfprintf('        最小速度 = %7.3f m/s\n',min(y))                         %输出本次采样被测量最小值6 w1 O/ p0 _% J7 ?2 \0 O' n
fprintf('        平均速度 = %7.3f m/s\n',mean(y))                      %输出本次采样被测量平均值% a% z7 {6 i3 H
fprintf('        速度中值 = %7.3f m/s\n',median(y))                   %输出本次采样被测量中值
3 d6 t& P6 S% Q$ g- g' Rfprintf('        最大速度 = %7.3f m/s\n',max(y))                          %输出本次采样被测量最大值+ o3 ^5 m; m8 S& F. e1 Y
fprintf('        标准方差 = %7.3f \n',std(y))                               %输出本次采样数据标准差
" k+ E' _& D* i  t7 b& yfprintf('       协 方 差 = %7.3f \n',cov(y))                                %输出本次采样数据协方差
5 O' K  G( `3 Y$ efprintf('     自相关系数 = %7.3f \n\n',corrcoef(y))                       %输出本次采样数据自相关系数
) Y; P$ J0 e: _! z0 r/ ?7 i  2 Y8 G4 b! {. F0 _
%显示原始数据曲线图(时域)
: c2 E+ {, P% c# w: _subplot(2,1,1);
! ?  t+ A( s9 f4 H$ `plot(x,y)                                                                                %显示原始数据曲线图7 r- I) m  `- u3 o( P7 l
axis([min(x) max(x) 1.1*floor(min(y)) 1.1*ceil(max(y))])             %优化坐标,可有可无7 \3 t- ?* l" F: m- A
xlabel('时间 (s)');
! x: q  V) W1 `0 T( hylabel('被测变量y');
' e0 [9 x, z( |6 W" o$ ?% ftitle('原始信号(时域)');
4 v5 f# a8 n, G# r" ?2 mgrid on;' u. z3 N  l4 ~2 N' a* J  h, [
/ m6 R. ?( \( F9 L
%傅立叶变换8 ~  l+ T6 T+ `- |9 f& z
y=y-mean(y);                                               %消去直流分量,使频谱更能体现有效信息5 _% v, Y1 C5 v" H; {+ E; w: S
Fs=2000;                %得到原始数据data.txt时,仪器的采样频率。就是length(x)/(max(x)-min(x));     
! h  S$ h$ T4 i) l. RN=10000;                                                 %data.txt中的被测量个数,即采样个数。其实就是length(y);
; I. y8 ^# m: |. vz=fft(y);% T8 Q8 ?5 q7 R5 [. n8 i
5 K. g; k6 F  y, O3 l6 t+ ^. O& j
%频谱分析
0 C( n' `* B- s2 U3 e/ \+ X2 B- Y2 Yf=(0:N-1)*Fs/N;
1 F' m. c* y& P! bMag=2*abs(z)/N;                                        %幅值,单位同被测变量y7 m/ M& N2 E. k3 t8 O/ W1 x
Pyy=Mag.^2;          %能量;对实数系列X,有 X.*X=X.*conj(X)=abs(X).^2=X.^2,故这里有很多表达方式5 Q5 _7 a5 e( C

2 r* I( k- U9 _  W! d. ^%显示频谱图(频域)
$ R7 o) S$ U8 D4 O! U' W: Jsubplot(2,1,2)
9 l7 h: D0 k+ E/ J& wplot(f(1:N/2),Pyy(1:N/2),'r')                         %显示频谱图
$ K* T8 o9 m1 v" w6 ~' r% G0 s%                 |
: x; y2 M# k$ D%             将这里的Pyy改成Mag就是 幅值-频率图了
" O# I! e; x# C; A/ t5 Eaxis([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)))]) % r8 L$ L/ y  Q. W* q+ y: u
xlabel('频率 (Hz)')
7 ^+ G4 ?0 }2 K+ r2 xylabel('能量')
. V0 v: ], l5 E" u' ptitle('频谱图(频域)')
# ?6 n; Y6 E0 a! `% ^grid on;
& s: C* x( ~" \% I1 B, X) f/ t& v9 M' z* {+ O8 r* j0 Z/ ]
%返回最大能量对应的频率和周期值
1 T/ ?- N" R. v[a b]=max(Pyy(1:N/2));
9 |* H' W2 D' v' y; _/ t4 Hfprintf('\n傅立叶变换结果:\n')
+ D6 p' M! \/ G1 c, zfprintf('           FFT_f = %1.3f Hz\n',f(b))             %输出最大值对应的频率
1 L& j, ~$ I  r; d8 X( P% t! Ifprintf('           FFT_T = %1.3f s\n',1/f(b))          %输出最大值对应的周期
3 o( {6 o+ ~) ~) O6 ^5 h6 N
  • 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 11:52 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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