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

离散信号MATLAB频谱分析程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%FFT变换,获得采样数据基本信息,时域图,频域图$ c" t, U, K* F& t% I. S3 \
%这里的向量都用行向量,假设被测变量是速度,单位为m/s, i: `  {$ T  T5 v" f8 Z: e
clear;7 a+ ?( v4 w8 v+ b  z& v
close all;
, o, L; h  z! i' y) p. y  O; W, D3 v5 D& k9 O) K: D
load data.txt              %通过仪器测量的原始数据,存储为data.txt中,附件中有一个模版(该信号极不规则)+ }4 u2 c+ f" Y
A=data;                                        %将测量数据赋给A,此时A为N×2的数组
5 J! Y. k, D8 _6 O) p2 V. ix=A(:,1);                                     %将A中的第一列赋值给x,形成时间序列$ Z! u7 n; W0 B
x=x';                                           %将列向量变成行向量
: k' `2 w- L8 `8 A+ A& [y=A(:,2);                                     %将A中的第二列赋值给y,形成被测量序列
) q( k+ r- w. O0 j; cy=y';                                           %将列向量变成行向量, T: z6 J& K6 M, S4 z% _  S% k

6 y- [; z. Q$ t8 w; ?* m  i%显示数据基本信息
% i7 M/ \% j% c  z9 m( b: Vfprintf('\n数据基本信息:\n')
" ^, [! @8 a; P4 M# Dfprintf('        采样点数 = %7.0f \n',length(x))                         %输出采样数据个数& Y  n! ~. F: Q& ]. s! @- ?. j
fprintf('        采样时间 = %7.3f s\n',max(x)-min(x))                    %输出采样耗时6 ^1 _6 V3 c$ u; X( X- e
fprintf('        采样频率 = %7.1f Hz\n',length(x)/(max(x)-min(x)))   %输出采样频率4 T* z! [7 I% ~3 N: R
fprintf('        最小速度 = %7.3f m/s\n',min(y))                         %输出本次采样被测量最小值
- D: ^2 s* M8 q+ X! Q6 Afprintf('        平均速度 = %7.3f m/s\n',mean(y))                      %输出本次采样被测量平均值# k! N. c2 B& X" a6 V% M0 f4 A/ p8 H
fprintf('        速度中值 = %7.3f m/s\n',median(y))                   %输出本次采样被测量中值! T, c5 o3 x! V% y( {
fprintf('        最大速度 = %7.3f m/s\n',max(y))                          %输出本次采样被测量最大值8 X/ M7 D7 J$ n! n: H" E
fprintf('        标准方差 = %7.3f \n',std(y))                               %输出本次采样数据标准差
6 w0 P2 W6 b5 f3 t. p1 \fprintf('       协 方 差 = %7.3f \n',cov(y))                                %输出本次采样数据协方差
7 ]7 L# h. i9 P5 y5 t, K! M3 dfprintf('     自相关系数 = %7.3f \n\n',corrcoef(y))                       %输出本次采样数据自相关系数
- P( y) I& E: o' v4 R7 w4 Z: R  
% o; f* B) J; \%显示原始数据曲线图(时域)3 r1 q2 J8 H& X  j$ n" v; H
subplot(2,1,1);
, z9 n# D5 ?- G. `/ }/ uplot(x,y)                                                                                %显示原始数据曲线图+ o2 g2 U2 K1 N6 E5 I, |5 \
axis([min(x) max(x) 1.1*floor(min(y)) 1.1*ceil(max(y))])             %优化坐标,可有可无
9 A5 K5 i6 V* n, y: V4 lxlabel('时间 (s)');& @- k: y9 D( [# s
ylabel('被测变量y');
/ b8 Z3 l3 p' b9 H7 G' O8 Ititle('原始信号(时域)');
2 g6 a* E2 W, J- R7 ?grid on;
" G! n3 O2 ~1 ]: ~2 f! Q% r" @
1 o) E7 Y. ~+ Y%傅立叶变换
+ \  I; D4 S: h+ D! v1 }/ Oy=y-mean(y);                                               %消去直流分量,使频谱更能体现有效信息& k$ U4 G% M- i* J8 i1 @/ {
Fs=2000;                %得到原始数据data.txt时,仪器的采样频率。就是length(x)/(max(x)-min(x));     8 a' f1 b( r9 }/ e; ^% v* L
N=10000;                                                 %data.txt中的被测量个数,即采样个数。其实就是length(y);" R. v( @3 [* \  A4 ~
z=fft(y);" X& Y$ H; @! e
& u( O' O# s/ J/ ]  F6 X2 Z
%频谱分析
2 X# g* }& ^" I" o. D4 Wf=(0:N-1)*Fs/N;3 g( t+ q" Y9 J( `' c2 q# C
Mag=2*abs(z)/N;                                        %幅值,单位同被测变量y
+ ~1 W5 y" s3 R; D  sPyy=Mag.^2;          %能量;对实数系列X,有 X.*X=X.*conj(X)=abs(X).^2=X.^2,故这里有很多表达方式
3 Q0 ^: K% C- ?9 \8 m
0 {3 M' j% {+ u! f5 ~# |%显示频谱图(频域)% K( y/ v, t& v& q1 ~
subplot(2,1,2)
8 P5 ?4 A2 V* R- J" Yplot(f(1:N/2),Pyy(1:N/2),'r')                         %显示频谱图1 c+ Y8 _; F( ^( W/ y5 P
%                 |
5 w! s) A* U( w/ P1 k%             将这里的Pyy改成Mag就是 幅值-频率图了
6 k, f+ a2 E( L4 q5 D7 {4 b* }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)))])
; ^" N+ Y1 v% f0 u/ Pxlabel('频率 (Hz)')8 x9 D. x0 h: p, A
ylabel('能量')( b3 p/ _! u7 p8 K" V3 O* l! P8 C
title('频谱图(频域)')' K1 E" ~+ q) V" ?
grid on;
9 s5 ^5 D, T$ I' j  r
1 L2 [5 j5 N3 _$ x%返回最大能量对应的频率和周期值
. ]8 N0 I8 o5 M- f. Y[a b]=max(Pyy(1:N/2));
% |/ ]8 z2 ]$ M8 G6 I% G3 hfprintf('\n傅立叶变换结果:\n') * ]: y& [: e: j, D7 G+ [
fprintf('           FFT_f = %1.3f Hz\n',f(b))             %输出最大值对应的频率  X/ F8 z' u1 Z) e/ G/ v7 f# W# e8 H
fprintf('           FFT_T = %1.3f s\n',1/f(b))          %输出最大值对应的周期/ |  t; d- P2 L
  • 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:13 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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