• MATLAB实现希尔伯特变换以及FFT补零分析


    南京信息工程大学  实验(实习)报告

    实验(实习)名称  数字信号处理  实验(实习)日期            得分            指导老师                 

    学院 电信院 专业 电子信息工程 年级 2020   班次              姓名                  学号 20208327     

    1.实验目的

    1. 掌握利用MATLAB求信号的希尔伯特变换;
    2. 掌握利用MATLAB进行信号的FFT运算,对其进行频谱分析;
    3. 掌握利用MATLAB对信号进行补零分析。

    2.实验内容

    (1)为一正弦信号,长度为25,求其希尔伯特变换

    (2)是两个正弦信号及其白噪声的叠加,试用FFT对其做频谱分析,并对其补零分析2N、3N长度的FFT效果。

    1. 实验步骤和实验结果

    (1)为一正弦信号,长度为25,求其希尔伯特变换;

    1. clc;clear;
    2. ts = 0.001;
    3. N = 300;
    4. f = 50;
    5. k = 0:N-1;
    6. t = k*ts;
    7. y = sin (2* pi *f*t);
    8. yh = hilbert(y);
    9. yi = imag (yh);
    10. figure
    11. subplot (211)
    12. plot (t, y)
    13. title ( '原sin信号' )
    14. subplot (212)
    15. plot (t, yi)
    16. title ( 'Hilbert变换后信号' )
    17. ylim ([-1,1])

    (2)是两个正弦信号及其白噪声的叠加,试用FFT对其做频谱分析,并对其补零分析2N、3N长度的FFT效果。

    1. clear;clc;
    2. fs=200;
    3. f1=30; f2=60;
    4. N=300;
    5. n=1:N;
    6. t=(n-1)/fs;
    7. x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+randn(1,N);
    8. X1=fft(x);
    9. freq1=(0:N/2)*fs/N;
    10. X1_abs=abs(X1(1:N/2+1))*2/N;
    11. L=2*N;
    12. X2=fft(x,L);
    13. freq2=(0:L/2)*fs/L;
    14. X2_abs=abs(X2(1:L/2+1))*2/N;
    15. L1=3*N;
    16. X3=fft(x,L1);
    17. freq3=(0:L1/2)*fs/L1;
    18. X3_abs=abs(X3(1:L1/2+1))*2/N;
    19. subplot (411); plot(t,x);
    20. title('原始信号')
    21. subplot(412); plot(freq1,X1_abs);
    22. ylim([0 1.5]);
    23. title('补零前FFT谱图')
    24. subplot(413); plot(freq2,X2_abs);
    25. ylim([0 1.5]);
    26. title('补2N零后FFT谱图')
    27. subplot(414); plot(freq3,X3_abs);
    28. ylim([0 1.5]);
    29. title('补3N零后FFT谱图')

     

    4.实验小结

    (1)本节实验课学习了如何用MATLAB进行信号的希尔伯特变换,对信号做FFT运算、并对其进行频谱分析,以及如何进行补零分析。

    (2)正弦信号进行希尔伯特变换后即为余弦信号,但因为只采了25个点的数据,所以转换后的信号波形失真较严重,多采一些点后波形明显有改观,如图1所示。

    1. clear;clc;
    2. fs=200;
    3. f1=30; f2=60;
    4. N=300;
    5. n=1:N;
    6. t=(n-1)/fs;
    7. x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+randn(1,N);
    8. X1=fft(x);
    9. freq1=(0:N/2)*fs/N;
    10. X1_abs=abs(X1(1:N/2+1))*2/N;
    11. L=2*N;
    12. X2=fft(x,L);
    13. freq2=(0:L/2)*fs/L;
    14. X2_abs=abs(X2(1:L/2+1))*2/N;
    15. L1=3*N;
    16. X3=fft(x,L1);
    17. freq3=(0:L1/2)*fs/L1;
    18. X3_abs=abs(X3(1:L1/2+1))*2/N;
    19. subplot (411); plot(t,x);
    20. title('原始信号')
    21. subplot(412); plot(freq1,X1_abs);
    22. ylim([0 1.5]);
    23. title('补零前FFT谱图')
    24. subplot(413); plot(freq2,X2_abs);
    25. ylim([0 1.5]);
    26. title('补2N零后FFT谱图')
    27. subplot(414); plot(freq3,X3_abs);
    28. ylim([0 1.5]);
    29. title('补3N零后FFT谱图')

    图1

     

  • 相关阅读:
    java基础01
    ABC 327
    BurpSuit官方实验室之信息泄露
    准备篇(二)Python 教程
    大数据从入门到精通(超详细版)之HiveServer2的使用
    openoffice启动和自动启动设置
    用啥Selenium?! .NET程序员就用自家的Playwright for .NET
    CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!) C. Complementary XOR 题解
    build和compile
    常用汇编指令介绍
  • 原文地址:https://blog.csdn.net/silver321/article/details/128104723