Matlab通信仿真系列——信号的傅里叶(Fourier)分析

2023-11-28 11:12

本文主要是介绍Matlab通信仿真系列——信号的傅里叶(Fourier)分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等
在这里插入图片描述
本节目录

一、连续信号傅里叶变换
1、定义
2、fourier和ifourier函数
3、傅里叶级数
4、X(kΩ0)和X()
二、离散信号的傅里叶变换
1、定义
2、Matlab频谱图绘制
3、Matlab验证DTFT的频移
4、Matlab验证的DTFT卷积性质
5.Matlab验证DFT的卷积性质
三、Matlab源码
1、fourier和ifourier函数源码
2、Matlab频谱图绘制源码
3、Matlab验证DTFT的频移源码
4、Matlab验证的DTFT卷积性质源码
5、Matlab实现DFT和IDFT运算
6、Matlab验证DFT的卷积性质源码

本节内容
信号的傅里叶Fourier分析包括了连续信号傅里叶变换、离散信号的傅里叶变换。
一、连续信号傅里叶变换
1、定义

设x(t)为连续时间信号,如果x(t)绝对可积,即
在这里插入图片描述
则x(t)的傅里叶变换存在,并定义为
在这里插入图片描述
其反变换为
在这里插入图片描述
上述式中Ω=2πf,单位为rad/s
X(JΩ)=|X(JΩ)|e^(Jφ(Ω)),其中|X(JΩ)|表示幅频特性,φ(Ω)表示相频特性。
2、fourier和ifourier函数
Matlab中提供了求解傅里叶变换及其逆变换的函数
F=fourier(f)表示函数f的傅里叶变换,返回的是关于ω的函数。
f=ifourier(F)表示函数F的逆变换,默认的独立变量是ω,返回的是关于x的函数。
在使用fourier和ifourier函数之前,必须用syms命令对所用的变量进行符合说明。同时返回得到的函数仍是符合变量,因此应用ezplot绘图。
在这里插入图片描述
在这里插入图片描述

3、傅里叶级数
只有非周期信号才有傅里叶变换。
若x(t)满足狄利克雷条件,可以将其展开为傅里叶级数,
在这里插入图片描述

式中Ω0=2πf0,表示信号x(t)的基波频率;kΩ0为第k次谐波频率;
X(kΩ0)表示x(t)在k次谐波处的傅里叶级数,幅度表示信号x(t)所包含的频率为kΩ0的成分大小。
周期信号x(t)可以由无数的复正弦{e^(jkΩ0t),k=0,±1,…,±∞}作为基本信号再乘以不同的加权值X(kΩ0)复合而成。X(kΩ0)是频率kΩ0相应复正弦的幅度。
X(kΩ0)仅在k=0,±1,…,±∞取值,故在频率轴上为离散值,
在这里插入图片描述
X(kΩ0)用复数表示为
在这里插入图片描述
|X(k)|表示频率为nf0的分量的振幅;θk表示频率为nf0的分量的相位。
4、X(kΩ0)和X(jΩ)
X(kΩ0)是Ω轴上的离散函数,取Ω的整数倍;X(jΩ)是Ω的连续函数。
X(kΩ0)是谐波振幅的表述;X(jΩ)是频谱密度的表述。
二、离散信号的傅里叶变换
1、定义

离散信号h(n)为线性时不变系统的单位抽样响应,且绝对可和的,即满足
在这里插入图片描述

系统的频率响应,即离散时间序列的傅里叶变换DTFT为:
在这里插入图片描述

傅里叶逆变换IDTFT为:
在这里插入图片描述

其中H(e^(jω))是ω的周期为2π的连续周期函数,ω表示弧度,数字频率。
在这里插入图片描述
2、Matlab频谱图绘制

matlab代码示例:
①求序列h1(n)=e^(-|0.1n|)的离散傅里叶变换,
其中-15≤n≤15
②求序列h2(n)=1的离散傅里叶变换,
其中0≤n≤20
傅里叶变换参考上述的公式进行算,
需要留意“n1'”表示n1的转置。

在这里插入图片描述
在这里插入图片描述

3、Matlab验证DTFT的频移
离散时间信号的DTFT的频移性质,序列乘以复指数序列对应于频域的频移。
在这里插入图片描述

matlab代码示例:
①求序列h(n)=1的DTFT,其中0≤n≤20
②求序列x(n)=h(n)e^(jπn/4)
③求序列y(n)=h(n)e^(jπn/2)
x(n)是序列h(n)平移了π/4
y(n)是序列h(n)平移了π/2

4、Matlab验证的DTFT卷积性质
一个单位脉冲响应为h(n)的系统对输入序列x(n)的输出为y(n)=x(n)*h(n)
根据DTFT卷积性质可得:
Y(e^(jw))=DTFT[y(n)]
=DTFT[x(n)*h(n)]=X(e ^ (jw))×H(e ^ (jw))
在这里插入图片描述
在这里插入图片描述

5.Matlab实现DFT和IDFT运算
一个给定离散序列x(n),DFT对应在时域、频域上都是有限长,而且是离散的,该离散序列的DFT和IDFT:
在这里插入图片描述
其中W(N)=e^(-j×2π/N)
在这里插入图片描述
在这里插入图片描述

5、Matlab验证DFT的卷积性质
在Matlab中提供fft函数来计算有限离散序列的DFT。
DFT的循环卷积性质
设序列x(n),h(n)都是N点序列,其DFT分别为X(k),H(k),Y(k)
在这里插入图片描述
其中H为循环矩阵,或者循环卷积。
由第1行开始,依次向右移动一个元素,移出去的元素在下一行的最左边出现,即每一行都是h(0),h(N-1),……h(1)这N个元素依次移动生成的。
如果x(n)是M点序列,h(n)是L点序列,y(n)=x(n)*h(n),即y(n)使x(n)和h(n)的线性卷积,y(n)序列的点数为(M+L-1)
在这里插入图片描述
在这里插入图片描述

toeplitz函数的用法,可以用help toeplitz指令获取帮助。
在这里插入图片描述

二、Matlab源码
1、fourier和ifourier函数源码

clear all;
n=0:30;
x=sin(0.2*n).*exp(-0.1*n);
k=0:30;
N=31;
X=x*(exp(-j*2*pi/N).^(n'*k));
subplot(2,1,1);
stem(n,x);
title('x序列');
subplot(2,1,2);
stem(-15:15,[abs(17:end)abs(]);
title('X幅度');

2、Matlab频谱图绘制源码

clear all;
w=-4:0.001:4;   %设置频率w的范围,相邻数字频率之间间隔为0.001
n1=-15:15;          %h1(n)序列的范围
n2=0:20;            %h2(n)序列的范围
h1=exp(-abs(0.1*n1));
h2(n2+1)=1;
Hjw1=h1*(exp(-j*pi).^(n1'*w));   %h1(n)的傅里叶变换
Hjw2=h2*(exp(-j*pi).^(n2'*w));   %h2(n)的傅里叶变换
subplot(2,1,1);
plot(w,abs(Hjw1))
title('h1');
xlabel('pi弧度(w)');
ylabel('振幅');
subplot(2,1,2);
plot(w,abs(Hjw2));
title('h2');
xlabel('pi弧度(w)');
ylabel('振幅');

3、Matlab验证DTFT的频移源码

clear all;
w=-1:0.001:1;
n=0:20;
h(n+1)=1;
x=h.*exp(j*pi*n/4);
y=h.*exp(j*pi*n/2);
Hjw=h*(exp(-j*pi).^(n'*w));
Xjw=x*(exp(-j*pi).^(n'*w));
Yjw=y*(exp(-j*pi).^(n'*w));
subplot(3,2,1);
plot(w,abs(Hjw))
title('H');
xlabel('pi弧度(w)');
ylabel('振幅');
subplot(3,2,2);
plot(w,angle(Hjw)/pi);
title('H');
xlabel('pi弧度(w)');
ylabel('相位');
subplot(3,2,3);
plot(w,abs(Xjw))
title('X');
xlabel('pi弧度(w)');
ylabel('振幅');
subplot(3,2,4);
plot(w,angle(Xjw)/pi);
title('X');
xlabel('pi弧度(w)');
ylabel('相位');
subplot(3,2,5);
plot(w,abs(Yjw))
title('Y');
xlabel('pi弧度(w)');
ylabel('振幅');
subplot(3,2,6);
plot(w,angle(Yjw)/pi);
title('Y');
xlabel('pi弧度(w)');
ylabel('相位');

4、Matlab验证的DTFT卷积性质源码

clear all;
w=-1:0.001:1;                             %频率w范围,以及间隔为0.001    
n=0:30;
h=sinc(0.2*n);                           %系统的脉冲响应序列
x=2*sin(0.2*pi*n)+3*cos(0.4*pi*n);           %系统的输入信号序列
Hjw=h*(exp(-j*pi).^(n'*w));                  %脉冲响应的DTFT
Xjw=x*(exp(-j*pi).^(n'*w));                  %输入信号的DTFT
Yjw=Xjw.*Hjw;                           %输出信号的DTFT
n1=0:2*length(n)-2;                  %输出序列的长度
dw=0.001*pi;                            %分段求和的步长
y=(dw*Yjw*(exp(j*pi).^(w'*n1)))/(2*pi);         %分段求和方式代替积分
y1=conv(x,h);                           %时序卷积计算
subplot(3,1,1);
plot(w,abs(Hjw))
title('脉冲响应的DTFT');
xlabel('pi弧度(w)');
ylabel('振幅');
subplot(3,1,2);
plot(w,abs(Xjw));
title('输入信号的DTFT');
xlabel('pi弧度(w)');
ylabel('相位');
subplot(3,1,3);
plot(w,abs(Yjw))
title('输出信号的DTFT');
xlabel('pi弧度(w)');
ylabel('振幅');figure
subplot(2,1,1);
stem(abs(y));
title('IDTFT计算的输出序列Y');
subplot(2,1,2);
stem(abs(y1));
title('conv时域卷积计算的输出序列Y1');

5、Matlab实现DFT和IDFT运算

clear all;
n=0:30;
x=sin(0.2*n).*exp(-0.1*n);
k=0:30;
N=31;                               %离散蓄力DFT的个数
X=x*(exp(-j*2*pi/N).^(n'*k));       
subplot(2,1,1);
stem(n,x);
title('x序列');
subplot(2,1,2);
%验证DFT的对称性,将其范围修改
stem(-15:15,[abs(X(17:end)) abs(X(1:16))]); 
title('X幅度');
6、Matlab验证DFT的卷积性质源码clear all;
%矩阵的直接法卷积和DFT
h1=[6 3 4 2 1 -2];
x1=[3 2 4 7 -1 -3];
h2=fliplr(h1);                 %h1序列反转
H1=toeplitz(h1,[h1(1) h2(1:5)]);    %h1序列生成循环矩阵
y=H1*x1';                    %根据矩阵定义求解卷积H2=fft(h1);                   %fft函数求卷积
X1=fft(x1);                    
Y1=H2.*X1;
y1=ifft(Y1);
subplot(4,1,1);
stem(y);
title('矩阵的直接计算');
subplot(4,1,2);
stem(y1);
title('矩阵的DFT计算');%线性序列的直接法卷积和DFT
n3=0:20;
n4=0:10;
h3=sinc(0.2*n3);
x3=exp(-0.2*n4);
y3=conv(x3,h3);
%对序列h3和x3补零,构成新的序列h4和x4
h4=[h3 zeros(1,length(x3)-1)];
x4=[x3 zeros(1,length(h3)-1)];
H4=fft(h4);
X4=fft(x4);
Y4=H4.*X4;
y4=ifft(Y4);
subplot(4,1,3);
stem(y3);
title('线性序列的直接计算');
subplot(4,1,4);
stem(y4);
title('线性序列的DFT计算');

这篇关于Matlab通信仿真系列——信号的傅里叶(Fourier)分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/429613

相关文章

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

全屋WiFi 7无死角! 华硕 RP-BE58无线信号放大器体验测评

《全屋WiFi7无死角!华硕RP-BE58无线信号放大器体验测评》家里网络总是有很多死角没有网,我决定入手一台支持Mesh组网的WiFi7路由系统以彻底解决网络覆盖问题,最终选择了一款功能非常... 自2023年WiFi 7技术标准(IEEE 802.11be)正式落地以来,这项第七代无线网络技术就以超高速

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.