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

离散信号MATLAB频谱分析程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%FFT变换,获得采样数据基本信息,时域图,频域图- O% G# d  n- R: f  s7 j
%这里的向量都用行向量,假设被测变量是速度,单位为m/s
( I. ~8 H! j$ o) U# Xclear;3 Y( S* V/ `/ U, u
close all;+ A) x* }2 B7 f- Q
, O& u% H. e5 A* r7 r# X9 g
load data.txt              %通过仪器测量的原始数据,存储为data.txt中,附件中有一个模版(该信号极不规则)# G! R- c* K2 X# i* c, o1 f8 R+ G, {
A=data;                                        %将测量数据赋给A,此时A为N×2的数组
! Y1 B; F' n1 t$ a. M, Mx=A(:,1);                                     %将A中的第一列赋值给x,形成时间序列0 n/ W" }/ O  z, X+ ^* t+ J
x=x';                                           %将列向量变成行向量
6 G/ Z4 W3 b4 g( ?y=A(:,2);                                     %将A中的第二列赋值给y,形成被测量序列
% p1 @9 v# q4 {/ {y=y';                                           %将列向量变成行向量
8 }1 ]  I% b. A. ^- M5 x, L7 i6 z" ?+ M
%显示数据基本信息& T4 K) H: y6 p! }
fprintf('\n数据基本信息:\n') 5 W* O9 D6 F6 g
fprintf('        采样点数 = %7.0f \n',length(x))                         %输出采样数据个数5 L! C% Z4 p- [0 {# i+ D0 a
fprintf('        采样时间 = %7.3f s\n',max(x)-min(x))                    %输出采样耗时
% X; f+ u6 i1 A4 s( Dfprintf('        采样频率 = %7.1f Hz\n',length(x)/(max(x)-min(x)))   %输出采样频率
# u8 _% P0 c1 s8 F; \: i- `fprintf('        最小速度 = %7.3f m/s\n',min(y))                         %输出本次采样被测量最小值* N: _0 w4 D$ t8 I; G1 E) `
fprintf('        平均速度 = %7.3f m/s\n',mean(y))                      %输出本次采样被测量平均值
- X0 B7 r+ t( s' Gfprintf('        速度中值 = %7.3f m/s\n',median(y))                   %输出本次采样被测量中值( \9 {  A4 @; u- N, f
fprintf('        最大速度 = %7.3f m/s\n',max(y))                          %输出本次采样被测量最大值& H) w9 W3 h% g( }
fprintf('        标准方差 = %7.3f \n',std(y))                               %输出本次采样数据标准差
! e3 B# e5 _9 @fprintf('       协 方 差 = %7.3f \n',cov(y))                                %输出本次采样数据协方差
) U0 h4 K2 M4 v5 v: x8 [1 x5 Ofprintf('     自相关系数 = %7.3f \n\n',corrcoef(y))                       %输出本次采样数据自相关系数1 c0 @7 w) }$ B+ ^
  
- P. q" s. q2 g. T" v& T" n! H5 ?%显示原始数据曲线图(时域)  n( Z; ?& {* a% ~8 i0 j4 U
subplot(2,1,1);
6 x7 d$ K" L5 b. v4 A7 }% }plot(x,y)                                                                                %显示原始数据曲线图
  U% Z+ B$ V8 D3 ?, Oaxis([min(x) max(x) 1.1*floor(min(y)) 1.1*ceil(max(y))])             %优化坐标,可有可无$ p& t1 p# U9 ^; e2 x7 Y
xlabel('时间 (s)');$ k0 W  h* T' V0 R. E
ylabel('被测变量y');
" E) W4 T. V" r/ V9 G& vtitle('原始信号(时域)');. s0 o, f) V6 b" n+ a) @5 H+ `) \
grid on;1 ~2 N2 x. w0 S
$ l4 Y8 o2 e$ y& H8 M' U1 H& w
%傅立叶变换
7 t/ U4 ]' C% c. d9 f8 _" q2 Vy=y-mean(y);                                               %消去直流分量,使频谱更能体现有效信息
5 x2 h9 N! P$ CFs=2000;                %得到原始数据data.txt时,仪器的采样频率。就是length(x)/(max(x)-min(x));     
  _  `* w/ f2 g& O/ N* [$ uN=10000;                                                 %data.txt中的被测量个数,即采样个数。其实就是length(y);( ?6 I2 S. \7 T' v  C" c
z=fft(y);1 a0 P. \1 W4 W0 v4 r
4 D2 z5 c# W% B! M6 B, J: w
%频谱分析
! k+ b' B  i# }" H# ^f=(0:N-1)*Fs/N;5 T: _3 X5 t3 h6 R& n1 W) W  {0 y
Mag=2*abs(z)/N;                                        %幅值,单位同被测变量y  h2 v, l7 I4 r3 E
Pyy=Mag.^2;          %能量;对实数系列X,有 X.*X=X.*conj(X)=abs(X).^2=X.^2,故这里有很多表达方式- [2 b. ~6 j  X7 ^8 y! ?9 t

9 _4 j" Q8 {6 M! w6 r  O%显示频谱图(频域)3 u6 _1 g/ e; N: ]& J
subplot(2,1,2)
9 K  o2 e; b& u+ Y0 u( mplot(f(1:N/2),Pyy(1:N/2),'r')                         %显示频谱图! V, L! ^/ F: O9 t4 k) N) M
%                 |5 Q5 V: M6 {/ {. p6 s3 ?
%             将这里的Pyy改成Mag就是 幅值-频率图了, o+ F' y5 t2 S
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 ]* F9 c+ j) e* Y$ z/ s9 m* Mxlabel('频率 (Hz)')& Y/ i6 Q( ~3 ^
ylabel('能量')" K; R" {% S$ o
title('频谱图(频域)')0 ]4 J" G3 ^" ~
grid on;$ r  M- |) p: n- q* G0 b
* @8 K8 {6 b2 W$ B6 ^" E2 |
%返回最大能量对应的频率和周期值4 I: S  \9 d! o0 H
[a b]=max(Pyy(1:N/2));" L' T, n+ D4 u
fprintf('\n傅立叶变换结果:\n') & C# t2 k8 C4 \% P
fprintf('           FFT_f = %1.3f Hz\n',f(b))             %输出最大值对应的频率
6 n% y) C) j5 r; Pfprintf('           FFT_T = %1.3f s\n',1/f(b))          %输出最大值对应的周期/ a( H% U( M% _+ M
  • 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:21 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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