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

  • Post author:
  • Post category:其他



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

实验(实习)名称

数字信号处理

实验(实习)日期


得分


指导老师

学院

电信院

专业

电子信息工程

年级

2020

班次


姓名


学号

20208327

1.实验目的

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

2.实验内容

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

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

  1. 实验步骤和实验结果

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

clc;clear;
ts = 0.001;
N = 300; 
f = 50;
k = 0:N-1;
t = k*ts;
y =  sin (2* pi *f*t);
yh = hilbert(y);     
yi =  imag (yh);       
figure
subplot (211)
plot (t, y)
title ( '原sin信号' )
subplot (212)
plot (t, yi)
title ( 'Hilbert变换后信号' )
ylim ([-1,1])

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

clear;clc;
fs=200;                            
f1=30; f2=60;                   
N=300;                            
n=1:N;                            
t=(n-1)/fs;                        
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+randn(1,N);  
 
X1=fft(x); 
freq1=(0:N/2)*fs/N;               
X1_abs=abs(X1(1:N/2+1))*2/N;       
 
L=2*N;                            
X2=fft(x,L);                       
freq2=(0:L/2)*fs/L;                
X2_abs=abs(X2(1:L/2+1))*2/N;  

L1=3*N;                            
X3=fft(x,L1);                       
freq3=(0:L1/2)*fs/L1;                
X3_abs=abs(X3(1:L1/2+1))*2/N; 

subplot (411); plot(t,x); 
title('原始信号')
subplot(412); plot(freq1,X1_abs); 
ylim([0 1.5]);
title('补零前FFT谱图')
subplot(413); plot(freq2,X2_abs);
ylim([0 1.5]);
title('补2N零后FFT谱图')
subplot(414); plot(freq3,X3_abs);
ylim([0 1.5]);
title('补3N零后FFT谱图')

4.实验小结

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

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

clear;clc;
fs=200;                            
f1=30; f2=60;                   
N=300;                            
n=1:N;                            
t=(n-1)/fs;                        
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+randn(1,N);  
 
X1=fft(x); 
freq1=(0:N/2)*fs/N;               
X1_abs=abs(X1(1:N/2+1))*2/N;       
 
L=2*N;                            
X2=fft(x,L);                       
freq2=(0:L/2)*fs/L;                
X2_abs=abs(X2(1:L/2+1))*2/N;  

L1=3*N;                            
X3=fft(x,L1);                       
freq3=(0:L1/2)*fs/L1;                
X3_abs=abs(X3(1:L1/2+1))*2/N; 

subplot (411); plot(t,x); 
title('原始信号')
subplot(412); plot(freq1,X1_abs); 
ylim([0 1.5]);
title('补零前FFT谱图')
subplot(413); plot(freq2,X2_abs);
ylim([0 1.5]);
title('补2N零后FFT谱图')
subplot(414); plot(freq3,X3_abs);
ylim([0 1.5]);
title('补3N零后FFT谱图')


图1



版权声明:本文为silver321原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。