生成基本信号–使用FFT的矩形脉冲和功率谱密度

有大量文本可用于解释离散傅里叶变换的基础知识及其非常有效的实现——快速傅里叶转换(FFT)。我们经常需要生成简单的标准信号(正弦、余弦高斯脉冲方波孤立矩形脉冲指数衰减线性调频信号)用于模拟目的。我打算(在一系列文章中)展示如何在Matlab中生成这些基本信号,以及如何使用FFT在频域中表示它们。

这篇文章是这本书的一部分使用Matlab:Build Simulation Models from Scratch的数字调制,ISBN:978-1521493885,电子书(PDF)格式(单击此处)纸质(硬拷贝)格式(单击此处)
Matlab中的无线通信系统,ISBN:978-1720114352,提供电子书(PDF)格式(单击此处)纸质(硬拷贝)格式(单击此处).

矩形脉冲:数学描述

振幅的孤立矩形脉冲A类和持续时间T型在数学上表示为

g(t)=右(右)

哪里

rect(t)=\begin{cases}1,&when\;\frac{-1}{2}<t<\frac{1}{2{\\0,否则结束{cases}

孤立矩形脉冲的傅里叶变换克(吨)

\显示样式{G(f)=\int_{-T/2}^{T/2}A e^{-j2\pi f T}dt=A\cdot\frac{sin(\pi f T)}{\pi f}=AT\cdot sinc(fT)}

其中新几内亚函数由以下公式给出

sinc(x)=\frac{sin(\pix)}{\pix}

因此,傅里叶变换对是

A \ cdot rect(\ frac{t}{t})\左右简式箭头AT \ cdot sinc(fT)

傅里叶变换描述了不同频率下信号的光谱内容。对于给定的信号克(吨),傅里叶变换由下式给出

G(f)=\左|G(f)\右|e^{j\θ(f)}

其中,绝对值\left|G(f)\右|给出了频率分量的大小(振幅谱)和\θ(f)是它们对应的相位(相位谱)。对于矩形脉冲,振幅谱如下所示

\left|G(f)\right|=AT\ left|sinc(fT)\ right|

振幅谱峰值出现在f=0值等于自动变速箱频谱的零值出现在1/T(1/T)即(\下午1/T,下午2/T,下午3/T,。。。  )

在Matlab中生成隔离矩形脉冲:

单位振幅和宽度的孤立矩形脉冲w个(因素T型在上述等式中)可以借助内置函数轻松生成-矩形脉冲(t,w)Matlab中的命令。例如,单位振幅矩形脉冲的持续时间T=0.2秒生成。

fs=500;%采样频率T=0.2;%矩形脉冲宽度(秒)t=-0.5:1/fs:0.5;%时间基准x=矩形脉冲(t,t);%产生方波图(t,x,‘k’);标题([‘矩形脉冲宽度=’,num2str(T),s’]);xlabel(“时间”);ylabel(“振幅”);
矩形脉冲如何在Matlab中绘制FFT

使用FFT的振幅谱:

Matlab的FFT函数用于计算离散傅里叶变换(DFT)。绘制FFT的大小。从下图中可以看出,峰值的振幅出现在f=0具有峰值AT=1\乘以0.2=0.2频谱中的零点位于(\pm 1/T=\pm 5 Hz,\pm 2/T=\pm 10 Hz,\p.3/T=\p.15 Hz,\cdots ).

L=长度(x);NFFT=1024;X=fftshift(fft(X,NFFT));%负频率和正频率的FFT和FFT偏移f=fs*(-NFFT/2:NFFT/2-1)/NFFT;%频率矢量图形;图(f,abs(X)/(L),‘r’);标题(“FFT幅度”);xlabel(“频率(Hz)”)ylabel(‘震级|X(f)|');
FFT的矩形脉冲幅度

使用FFT的功率谱密度(PSD):

接下来绘制了各种频率分量之间的功率分布。第一个图显示了双面功率谱密度,其中包括正频率轴和负频率轴。第二个图仅描述了正频率轴的PSD(因为响应只是负频率轴的镜像)。

图形;Pxx=X.*conj(X)/(L*L);%具有适当缩放的计算能力图(f,10*log10(Pxx),‘r’);标题(“双面-功率谱密度”);xlabel(“频率(Hz)”)ylabel(“功率谱密度-P_{xx}dB/Hz”);
矩形脉冲双面功率谱密度
X=快速傅里叶变换(X,NFFT);X=X(1:NFFT/2+1);%NFFT/2后抛出样本进行单面打印Pxx=X.*conj(X)/(L*L);f=fs*(0:NFFT/2)/NFFT;%频率矢量图(f,10*log10(Pxx),‘r’);标题(“单面-功率谱密度”);xlabel(“频率(Hz)”)ylabel(“功率谱密度-P_{xx}dB/Hz”);
矩形脉冲单面功率谱密度

幅值和相位谱:

矩形脉冲的相位谱表现为一系列脉冲列,它们之间有界0\圆周率\;弧度,前提是矩形脉冲以样本零点为中心对称。这在此处引用以及下面的演示。

clearvars;x=[一(1,7)零(1127-13)一(1,6)];子区(3,1,1);图(x,‘k’);标题(“矩形脉冲”);xlabel(“样本号”);ylabel(“振幅”);NFFT=127;X=fftshift(fft(X,NFFT));%负频率和正频率的FFT和FFT偏移f=(-NFFT/2:NFFT/2-1)/NFFT;%频率矢量子区(3,1,2);图(f,abs(X),‘r’);标题(“震级谱”);xlabel(“频率(Hz)”);ylabel('|X(f)|');子区(3,1,3);图(f,atan2(imag(X),real(X)),‘r’);标题(“相位谱”);xlabel(“频率(Hz)”);ylabel(‘角度X(f)’);
矩形脉冲的幅相谱
矩形脉冲的幅相谱

对此文章进行评分:可怜的低于平均水平平均值很好杰出的(21平均票数:4.67(共5个)

本章主题

信号处理要点
生成标准测试信号
 □正弦信号
 □方波
 □矩形脉冲
 □高斯脉冲
 □啁啾声信号
解释FFT结果-复杂DFT、频率箱和FFTShift
 □实际和复杂DFT
 □快速傅里叶变换(FFT)
 □解释FFT结果
 □FFT换档
 □IFFTShift(IFFT换档)
从FFT获取幅度和相位信息
 □离散时间域表示
 □用FFT在频域中表示信号
 □从频域样本重构时域信号
功率谱密度
信号的功率和能量
 □信号的能量
 □信号的功率
 □信号分类
 □信号功率的计算-仿真和验证
多项式、卷积和Toeplitz矩阵
 □多项式函数
 □表示单变量多项式函数
 □多项式乘法与线性卷积
 □Toeplitz矩阵与卷积
计算卷积的方法
 □方法1:冲击力法
 □方法2:使用Toeplitz矩阵
 □方法3:使用FFT计算卷积
 □其他方法
解析信号及其应用
 □解析信号与傅里叶变换
 □提取瞬时振幅、相位、频率
 □基于希尔伯特变换的相位解调
选择滤波器:FIR或IIR:理解设计视角
 □设计说明书
 □设计中的一般考虑因素

作者的书籍

Matlab中的无线通信系统
Matlab中的无线通信系统
第二版(PDF)

注意:此帖子中包含评分,请访问此帖子进行评分。
使用Python的数字调制
使用Python的数字调制
(PDF电子书)

注意:此帖子中包含评分,请访问此帖子进行评分。
数字模块使用matlab图书封面
使用Matlab的数字调制
(PDF电子书)

注意:此帖子中包含评分,请访问此帖子进行评分。
人工挑选的通信工程最佳书籍
信号处理最佳书籍

关于“使用FFT生成基本信号-矩形脉冲和功率谱密度”的7点思考

  1. 你好,
    如果你能详细解释为什么你这样选择频率f,这将对我们(学习你的材料的学生)有很大帮助。什么是NFFT?以及你为什么和如何制作f。
    L=长度(x);
    NFFT=1024;
    X=fftshift(fft(X,NFFT));%负频率和正频率的FFT和FFT偏移
    f=fs*(-NFFT/2:NFFT/2-1)/NFFT;%频率矢量
    提前非常感谢。
    当做
    倾斜的

    答复
  2. 嗨,谢谢你在这个网站上的帖子。
    我有一个问题……为什么在正弦函数(即矩形脉冲的傅里叶变换)应该为零的点上,频谱的大小不等于零?
    这是因为我们正在执行DFT吗?
    如果我们绘制相位谱,当sinc为负时,sinc的相位谱应该是0到-pi之间的一系列矩形脉冲,那么我们得到了什么信息?
    谢谢。

    答复
    • 由于控制bin中心的FFT长度与sinc函数应触及零的点之间的关系,幅度谱不会触及零。如果根据矩形脉冲的宽度适当调整FFT长度,幅度谱将在预期的零位处达到零。

      相位谱取决于如何将输入脉冲呈现给FFT。参考文献中对此进行了解释:http://www.dspguide.com/ch11/2.htm

      检查如何获得您在问题中提到的相位谱。我在上面的帖子中提供了这些附加信息。

      答复
  3. 你好!
    首先,非常感谢您使用MATLAB对FFT的解释。这对我很有帮助。无论如何,有一个小问题,我会感谢你的帮助。
    我使用Rect函数只是为了训练,因为我必须使用傅里叶变换来分析衍射图案问题。在这种情况下,恢复正弦函数的符号(即负频率)对我来说很重要,绘制ABS值会使我丢失这些信息。有没有任何方法可以获得SINC函数,而不仅仅是一个|SINC|?

    谢谢你

    答复
    • FFT对指数基函数的信息进行编码,所以FFT输出的实部和虚部都包含所有有价值的信息。FFT以复杂格式给出结果。

      信息以极坐标形式表示:幅度和相位。

      幅值表示强度与零的偏差,因此只能有正值。如果您想在数量级中使用负值(这与携带负值的数量级的正式定义背道而驰),则需要进行进一步的处理。

      这些页面可能有助于更好地理解
      http://www.dspguide.com/ch11/2.htm

      答复

发表您的宝贵意见!!!