Advertisement

三 、连续时间信号的频域分析

阅读量:

******一、**实验目的

(1)掌握用MATLAB编程,分析门信号的频谱。

(2)掌握用MATLAB编程,分析冲激信号的频谱。

(3)掌握用MATLAB编程,分析直流信号的频谱。

(4)掌握用MATLAB编程,分析阶跃信号的频谱。

(5)掌握用MATLAB编程,分析单边指数信号的频谱。

二、实验原理

连续时间信号的频域分析实验主要是通过傅里叶变换(Fourier Transform)和傅里叶反变换(Inverse Fourier Transform)等数学工具,来实现对连续时间信号在频域上的分析与处理。

傅里叶变换是指把一个时域上的函数(或信号)变换成与其等效的同频域下的函数的过程。傅里叶反变换则是把一个频域上的函数变为与其等效的时域上的函数。在频域中,连续时间信号的幅度、相位、功率谱等信息都可以进行精确的描述和量化。通过分析和处理频域上的信号,可以实现诸如滤波、去噪、信号调制、频谱分析和信号重构等一系列信号处理和传输应用。

******三、**涉及的MATLAB函数

1. fourier 函数

功能:实现信号f(t)的傅里叶变换。

调用格式:F=fourier(f)

是符号函数f的傅里叶变换,默认返回函数F是关于a的函数。

F=fourier(f, v)

是符号函数f的傅里叶变换,返回函数F是关于v的函数。

F= fourier(f, u, v)

是关于u的函数f的傅里叶变换,返回函数F是关于v的函数。

2. ifourier 函数

功能:实现函数F(jo)的傅里叶反变换。

调用格式:f=ifourier(F)

是函数F的傅里叶反变换,默认的独立变量为@,默认返回是关于x的函数。

f=ifourier(F, u)

返回函数f是u的函数,而不是默认的x的函数。

f=ifourier(F, v, u)

是对关于v(而不是默认的@)的函数F进行傅里叶逆变换,

返回关于u的函数f。

******四、**实验内容

1.直接利用符号法进行编程,求门信号的傅里叶变换。(如图4.1.1)

复制代码
 T = 1; % 信号的周期

    
  
    
 t = -10:0.01:10; % 采样时间序列
    
  
    
 f = zeros(size(t)); % 定义门信号
    
  
    
 f(0<=t & t<1) = 1;
    
  
    
 subplot(2,1,1) % 绘制原始信号图像
    
  
    
 plot(t,f,'LineWidth',2);
    
  
    
 xlabel('时间'); ylabel('振幅'); title('门信号');
    
  
    
 F = fft(f)/length(f); % 计算傅里叶变换并进行归一化
    
  
    
 frequencies = linspace(-1,1,length(f))*1/T; % 计算对应的频率序列
    
  
    
 subplot(2,1,2) % 绘制频域图像
    
  
    
 plot(frequencies,abs(fftshift(F)),'LineWidth',2);
    
  
    
 xlabel('频率'); ylabel('幅度'); title('傅里叶变换门信号');
    
  
    
    
    
    

图4.1.1

2.直接利用符号法进行编程,求冲激信号的傅里叶变换。(如图4.2.1)

思路:冲激信号是矩形脉冲信号当脉宽趋于无穷小、幅值趋于无穷大时的极限。MATLAB编程,用脉宽很小、幅值很大的矩形脉冲信号近似表示冲激信号。

复制代码
 % 生成单位冲激信号

    
  
    
 Fs = 1000;      % 采样率
    
  
    
 t = 0:1/Fs:1;   % 时间向量
    
  
    
 x = zeros(1,length(t));   
    
  
    
 x(1) = 1;       % 在t=0上用单个正脉冲表示单位冲激信号
    
  
    
 % 对信号进行傅立叶变换
    
  
    
 X = fft(x);
    
  
    
 X_mag = abs(X); % 变换后的幅值
    
  
    
 f = (0:length(X_mag)-1)*Fs/length(X_mag); % 频率坐标
    
  
    
 % 画图
    
  
    
 figure;
    
  
    
 subplot(211);
    
  
    
 plot(t,x,'LineWidth',2);
    
  
    
 xlabel('时间 (s)');ylabel('振幅');title('单位冲激信号');
    
  
    
 subplot(212);
    
  
    
 plot(f, X_mag);
    
  
    
 xlabel('频率 (Hz)');ylabel('幅度');title('傅里叶变换单位冲激信号');
    
    
    
    

图4.2.1

3.直接利用符号法进行编程,求直流信号的傅里叶变换。(如图4.3.1)

思路:设双边指数信号f(1)=e(α>0),用α趋近于零来模拟单位直流信号。

复制代码
 T = 100; % 信号的周期

    
  
    
 t = -0.5:0.0001:0.5; % 采样时间序列
    
  
    
 f = exp(0*t); % 定义直流信号
    
  
    
 subplot(2,1,1) % 绘制原始信号图像
    
  
    
 plot(t,f,'LineWidth',2);
    
  
    
 xlabel('时间'); ylabel('振幅'); title('直流信号');
    
  
    
 F = fft(f)/length(f); % 计算傅里叶变换并进行归一化
    
  
    
 frequencies = linspace(-1,1,length(f))*(1/T); % 计算对应的频率序列
    
  
    
 subplot(2,1,2) % 绘制频域图像
    
  
    
 plot(frequencies,abs(fftshift(F)),'LineWidth',2);
    
  
    
 xlabel('频率'); ylabel('幅度'); title('傅里叶变换直流信号');
    
    
    
    

图4.3.1

4.直接利用符号法进行编程,求阶跃信号的傅里叶变换。(如图4.4.1)

复制代码
 syms t

    
  
    
 f = heaviside(t); % 定义单位阶跃函数
    
  
    
 F = fourier(f); % 计算傅立叶变换
    
  
    
 % 绘制单位阶跃函数和其傅立叶变换的图像
    
  
    
 figure;
    
  
    
 subplot(2,1,1);
    
  
    
 ezplot(f,[-5 5]);
    
  
    
 title('单位阶跃函数');
    
  
    
 xlabel('t');
    
  
    
 ylabel('f(t)');
    
  
    
 subplot(2,1,2);%幅度频谱
    
  
    
 ezplot(abs(F),[-10 10]);
    
  
    
 title('傅立叶变换');
    
  
    
 xlabel('f');
    
  
    
 ylabel('|F(f)|');
    
    
    
    

图4.4.1

5.直接利用符号法进行编程,求单边指数信号的傅里叶变换。(如图4.5.1与4.5.2)

复制代码
 T =2;  % 信号的周期

    
  
    
 t = -10:0.001:10; % 采样时间序列
    
  
    
 alpha = 0.2; % 指数信号的指数值
    
  
    
 f = exp(-alpha*t) .* (t>=0); % 定义单边指数信号
    
  
    
 subplot(2,1,1) % 绘制原始信号图像
    
  
    
 plot(t,f,'LineWidth',2);
    
  
    
 xlabel('时间'); ylabel('振幅'); title('单边指数信号');
    
    
    
    

图4.5.1

复制代码
 % 定义信号参数

    
  
    
 T = 10;     % 时域范围
    
  
    
 fs = 1000;  % 采样频率
    
  
    
 a = 10;     % 指数函数衰减系数
    
  
    
 % 构造信号
    
  
    
 t = linspace(0, T, T*fs+1)';    % 时间范围
    
  
    
 x = exp(-a*t);                  % 单边指数信号
    
  
    
 % 计算傅立叶变换,得到频域信号和双边频率坐标
    
  
    
 X = fft(x)/fs;
    
  
    
 f = linspace(-fs/2, fs/2, length(X))';
    
  
    
 % 绘制幅度谱和相位谱
    
  
    
 subplot(2, 1, 1);
    
  
    
 plot(f, abs(fftshift(X)));
    
  
    
 title('幅频');xlabel('频率 (Hz)');ylabel('幅度');
    
  
    
 subplot(2, 1, 2);
    
  
    
 plot(f, angle(fftshift(X)));
    
  
    
 title('相频');xlabel('频率 (Hz)');ylabel('相位 (rad)');
    
    
    
    

图4.5.2

五、实验结果及分析

1. 门信号的傅里叶变换结果显示,门信号在频域中存在无限多个频率成分,其中频率为0的分量占据了主导地位,其他频率成分逐渐衰减,并在大约±1/T的位置衰减为零。这是由于傅里叶变换的特性,即信号的周期性在时域中对应着频域中的离散频谱。

2. 冲激信号的傅里叶变换结果显示,冲激信号的频谱中存在一个频率为0的分量,其余频率上的能量很小,这意味着此信号在时域中是非周期性的,因为非周期性信号在频域中的离散频谱分量是均匀分布的。

3. 直流信号的傅里叶变换结果显示,直流信号在频域中只具有一个零频分量,这是由于直流信号在时域中是常数,其傅里叶变换是一个冲激函数。这说明在频域中,平稳的(即没有随时间变化的)信号只具有一个常数分量。

4. 阶跃信号的傅里叶变换结果显示,阶跃信号在频域中具有一个频率为0的分量,其余频率上的能量分布均匀,这与冲激信号的情况相似。此外,阶跃信号在频域中还存在一个相位为负的跳跃,表示信号出现了180度的相位反转。

5. 单边指数信号的傅里叶变换结果显示,由于指数函数的特殊性质,在频域中仍然存在无限多个频率成分,但它们的幅值均衰减为零。此外,由于是单边指数信号,所以频域幅度谱在负频率上均为0。此外,与门信号类似,由于信号在有限时间内存在,所以频谱成分随着频率的增加而逐渐衰减为0。

******六、**实验的体会与感想

在使用 Matlab 进行连续时间信号的频域分析时,可以利用 Matlab 的信号处理工具箱中提供的函数和工具。比如,可以使用 fft 函数和 ifft 函数分别实现离散 Fourier 变换和离散 Fourier 反变换,将信号从时域转换到频域,以及从频域转换回时域。

通过使用 MatLab 对连续时间信号的频域分析,我深刻认识了数字信号处理的优势,可以快速、准确地进行数学计算、分析和可视化。另外,在分析处理频域信号的过程中,Matlab也提供了许多强大的工具箱,如滤波器设计工具、分析工具等,方便了对不同类型的信号进行更加深入的分析和处理。

在实践中,我们可以使用Matlab编写程序或脚本实现频域分析和信号处理,并通过图形和数字数据来展示处理效果,这为信号分析和信号处理领域提供了很多便利。通过频域分析实验的实践和Matlab的应用,我认识到了Matlab在信号处理领域的重要性和应用价值,掌握了使用 Matlab 对连续时间信号进行频域分析的基本方法和技巧。

全部评论 (0)

还没有任何评论哟~