zoukankan      html  css  js  c++  java
  • 频谱分析的作用

    首先补充:

    randn()函数用来产生正态分布的随机数或矩阵

    conj()函数用来求负数的共轭:如果Z是一个复数组,那么conj(Z) = real(Z) - i*imag(Z)其中real(Z),imag(Z)分别代表Z的实部和虚部

    1.首先看一下频谱分析下,频谱图像展现的特征:

    x = sin(2*pi*50*t)的原图和频谱图:

    代码:

     1 clear;
     2 clc;
     3 t = 0:0.001:0.25;
     4 x = sin(2*pi*50*t);
     5 %x = 2*sin(2*pi*50*t+pi);
     6 %x = sin(2*pi*50*t) + 2*sin(2*pi*140*t);
     7 %x = sin(100*pi*t)+cos(280*pi*t);
     8 figure(1);
     9 plot(t,x);
    10 xlabel('t'); ylabel('f(t)');
    11 y = x;
    12 Y = fft(y,256);  
    13 Pyy = Y.*conj(Y)/256;   %计算Y的模的长度
    14 f = 1000/256*(0:127);   
    15 figure(2);
    16 plot(f,Pyy(1:128));
    17 title('Power spectral density');
    18 xlabel('Frequency (Hz)');
    View Code

    结果图为:

    频谱图中,峰值是正好是原函数的周期的频率。  变下初始相位呢?

    x = 2*sin(2*pi*50*t+pi);

    代码:

     1 clear;
     2 clc;
     3 t = 0:0.001:0.25;
     4 %x = sin(2*pi*50*t);
     5 x = 2*sin(2*pi*50*t+pi);
     6 %x = sin(2*pi*50*t) + 2*sin(2*pi*140*t);
     7 %x = sin(100*pi*t)+cos(280*pi*t);
     8 figure(1);
     9 plot(t,x);
    10 xlabel('t'); ylabel('f(t)');
    11 y = x;
    12 Y = fft(y,256);  
    13 Pyy = Y.*conj(Y)/256;   %计算Y的模的长度
    14 f = 1000/256*(0:127);   
    15 figure(2);
    16 plot(f,Pyy(1:128));
    17 title('Power spectral density');
    18 xlabel('Frequency (Hz)');
    View Code

    结果图为:

    仍然满足那个结论。那么组合一下呢?

    x = sin(2*pi*50*t) + 2*sin(2*pi*140*t);

    代码:

     1 clear;
     2 clc;
     3 t = 0:0.001:0.25;
     4 %x = sin(2*pi*50*t);
     5 %x = 2*sin(2*pi*50*t+pi);
     6 x = sin(2*pi*50*t) + 2*sin(2*pi*140*t);
     7 %x = sin(100*pi*t)+cos(280*pi*t);
     8 figure(1);
     9 plot(t,x);
    10 xlabel('t'); ylabel('f(t)');
    11 y = x;
    12 Y = fft(y,256);  
    13 Pyy = Y.*conj(Y)/256;   %计算Y的模的长度
    14 f = 1000/256*(0:127);   
    15 figure(2);
    16 plot(f,Pyy(1:128));
    17 title('Power spectral density');
    18 xlabel('Frequency (Hz)');
    View Code

    结果图为:

    频谱图中竟然把50Hz和140Hz都显示出来哎,unbelievable!.不行,再试试,换成cos试试?

    x = sin(100*pi*t)+cos(280*pi*t);

    代码:

     1 clear;
     2 clc;
     3 t = 0:0.001:0.25;
     4 %x = sin(2*pi*50*t);
     5 %x = 2*sin(2*pi*50*t+pi);
     6 %x = sin(2*pi*50*t) + 2*sin(2*pi*140*t);
     7 x = sin(100*pi*t)+cos(280*pi*t);
     8 figure(1);
     9 plot(t,x);
    10 xlabel('t'); ylabel('f(t)');
    11 y = x;
    12 Y = fft(y,256);  
    13 Pyy = Y.*conj(Y)/256;   %计算Y的模的长度
    14 f = 1000/256*(0:127);   
    15 figure(2);
    16 plot(f,Pyy(1:128));
    17 title('Power spectral density');
    18 xlabel('Frequency (Hz)');
    View Code

    结果图为:

    也是如此。这下终于可以放心了。原来频谱图是这个作用~。

    (2)还是有点不放心。如果加上噪声呢,还能识别出来么?

    先测试下噪声:

     1 clear;
     2 clc;
     3 t = 0:0.001:0.25;
     4 figure(1);
     5 y = 2*randn(size(t));
     6 plot(t,y);
     7 xlabel('t');ylabel('y');
     8 Y = fft(y,256);  
     9 Pyy = Y.*conj(Y)/256;   %计算Y的模的长度
    10 f = 1000/256*(0:127);   
    11 figure(2);
    12 plot(f,Pyy(1:128));
    13 title('Power spectral density');
    14 xlabel('Frequency (Hz)');
    View Code

    结果图为:

    杂乱无章。。。再测一次试试:

    还是杂乱无章,峰值也没有个确定的值。确定为噪声无疑了。

    好,那么现在就用你加到上面的正弦函数图像上去!

    代码:

     1 clear;
     2 clc;
     3 t = 0:0.001:0.25;
     4 x = sin(100*pi*t)+cos(280*pi*t);
     5 figure(1);
     6 plot(t,x);
     7 xlabel('t'); ylabel('f(t)');
     8 y = x + 2*randn(size(t));
     9 figure(2);
    10 plot(t,y);
    11 xlabel('t');ylabel('y(t)');
    12 Y = fft(y,256);  
    13 Pyy = Y.*conj(Y)/256;   %计算Y的模的长度
    14 f = 1000/256*(0:127);   
    15 figure(3);
    16 plot(f,Pyy(1:128));
    17 title('Power spectral density');
    18 xlabel('Frequency (Hz)');
    View Code

    结果图为:比较下两图可以知道,由于受到噪声干扰。图像几乎很难分辨出信号图像。

    频谱分析图这里,竟然有两个突出的峰值:

    仔细观察,竟然就是50Hz和140Hz。这下好了,合成的信号用频谱分析竟然可以清楚的找到原来的正弦信号~。

    咳咳,总结:经过傅里叶变换之后,频谱图的确能够帮助我们分析信号的成分,便于对信号进行处理。

  • 相关阅读:
    在centos7上安装ClamAV杀毒,并杀毒(centos随机英文10字母)成功
    在centos7上安装Jenkins
    Spring cache简单使用guava cache
    Spring resource bundle多语言,单引号format异常
    如何优化coding
    IIS配置中出现HRESULT:0X80070020错误
    如何解决:对应的服务器 tls 为 tls 1.0,小程序要求的TLS版本必须大于等于1.2问题
    微信小程序--后台交互/wx.request({})方法/渲染页面方法 解析
    微信小程序页面带参数跳转及接收参数内容navigator
    微信小程序阿里云服务器https搭建
  • 原文地址:https://www.cnblogs.com/liugl7/p/5265334.html
Copyright © 2011-2022 走看看