信号与系统小论文

news2024/11/22 10:57:02

信号与系统小论文

  • 信号调制与解调
    • 模拟乘法器AD734
    • 信号调制
    • 信号解调
  • DFT和FFT 的运算复杂度比较
    • DFT运算
    • FFT运算
    • 复杂度比较

小论文有两个部分组成,第一个是用电路仿真实现信号的调制与解调,第二个是通过python将DFT和FFT运算的次数可视化。

信号调制与解调

在本学期信号与系统课程上,当老师讲到信号的调制与解调部分时,脑子里没有一个直观的印象,导致那部分学的很模糊,而后再模拟电子技术基础课上,学了模拟乘法器之后,想尝试通过乘法器实现调制,而后通过滤波实现解调,最终在考试复习的时候才对信号的调制与解调有了较深入了解。

因此我打算使用NI Multisim软件通过仿真电路实现信号调制与解调。

模拟乘法器AD734

AD734示意图
AD734是一个集成模拟乘法器,具有高精度,宽频带的特点。

根据datasheet可知,该乘法器最基本的方程为:
W = A o ( X 1 − X 2 ) ( Y 1 − Y 2 ) U − ( Z 1 − Z 2 )            ( 1 ) W = A_o{\frac{(X_1-X_2)(Y_1-Y_2)}{U}-(Z_1-Z_2)} ~~~~~~~~~~(1) W=AoU(X1X2)(Y1Y2)(Z1Z2)          (1)

其中Ao为输出级的开环放大倍数,AD734的为72dB和MOPY634的为85dB;

U为比例因子,激光调整至 10V,但使用外部电阻器可调在 3V 至 10V 范围内。

当提供负反馈路径时,电路使得括号内的数量基本上为零,会使得以下方程成立:
( X 1 − X 2 ) ( Y 1 − Y 2 ) = U ( Z 1 − Z 2 )            ( 2 ) (X_1-X_2)(Y_1-Y_2)=U(Z_1-Z_2) ~~~~~~~~~~(2) (X1X2)(Y1Y2)=U(Z1Z2)          (2)
此外在使用该电路实现运算时,将Z1与W连接在一起,从而:
V o u t = ( X 1 − X 2 ) ( Y 1 − Y 2 ) U + Z 2            ( 3 ) V_{out}=\frac{(X_1-X_2)(Y_1-Y_2)}{U}+Z_2 ~~~~~~~~~~(3) Vout=U(X1X2)(Y1Y2)+Z2          (3)

在本次实验中,X2,Y2,Z2接地处理,完成电路搭建如图所示:
在这里插入图片描述

上边XFG为信号发生器,XFG1产生50Hz、幅度为1的正弦波,XFG2产生1000Hz、幅度为1的正弦波,

信号调制

y ( t ) = 0.1 f ( t ) ⋅ C ( t ) y(t)=0.1f(t)·C(t) y(t)=0.1f(t)C(t),其中0.1为乘法因子。

f ( t ) = s i n ( Ω t ) f(t)=sin(\Omega t) f(t)=sin(Ωt) C ( t ) = s i n ( w c t ) C(t)=sin(w_ct) C(t)=sin(wct) w c > > Ω w_c>>\Omega wc>>Ω

f ( t ) f(t) f(t)为50Hz、幅度为1的正弦波,调制信号 C ( t ) C(t) C(t)为1000Hz、幅度为1的正弦波。

通过乘法器后,如下所示:

输出波形

可以看出,正弦波信号对三角波信号进行了载波调制。

信号解调

为了从该信号中得出原信号(三角波信号),采用同步解调的方法,对该信号再乘上 s i n ( w c t ) sin(w_ct) sin(wct),而后通过低通滤波器电路。

y ( t ) = 0.1 f ( t ) ⋅ C ( t ) ⋅ 0.1 s i n ( w c t ) , w c = 2000 π y(t)=0.1f(t)·C(t)·0.1sin(w_c t),w_c=2000\pi y(t)=0.1f(t)C(t)0.1sin(wct)wc=2000π

同样使用AD734模拟乘法器实现乘法,而后用二阶低通滤波器进行解调,电路搭建如下:
仿真电路

输出波形如下:

输出波形

左图为原信号与正弦调制信号,右图为原信号与解调后的信号。

通过输出波形得知,解调后的正弦波信号出现相移和幅度损失,频率为50Hz,幅度为4.5mA。

通过理论计算,两次乘法中0.01的乘法因子,通过同步解调,会将幅度变成原来的0.5倍。因此理论上,输出为1
V o u t = 0.1 ∗ 0.1 ∗ 0.5 ∗ 1 = 5 m A V_{out}=0.1*0.1*0.5*1=5mA Vout=0.10.10.51=5mA。通过电路分析,可能是由于低通滤波特性好不够好,或者模拟乘法器内部误差导致的,但是总体误差还可以接受。

DFT和FFT 的运算复杂度比较

DFT运算

x(n)是一个长为M的序列,其离散傅里叶变换(DFT)为:

公式: X ( k ) = D F T [ x ( n ) ] = ∑ n = 0 N − 1 x ( n ) e − j 2 π N k n , k = 0 , 1 , 2.... , N − 1 X(k)=DFT[x(n)]=\sum_{n=0}^{N-1}x(n)e^{-j\frac{2\pi}{N}kn},k=0,1,2....,N-1 X(k)=DFT[x(n)]=n=0N1x(n)ejN2πkn,k=0,1,2....,N1

离散傅里叶逆变换为:

公式: x ( n ) = I D F T [ X ( k ) ] = 1 N ∑ n = 0 N − 1 X ( k ) e j 2 π N k n , k = 0 , 1 , 2.... , N − 1 x(n)=IDFT[X(k)]=\frac{1}{N}\sum_{n=0}^{N-1}X(k)e^{j\frac{2\pi}{N}kn},k=0,1,2....,N-1 x(n)=IDFT[X(k)]=N1n=0N1X(k)ejN2πkn,k=0,1,2....,N1

从公式可以看出时间离散信号的DFT得到的是离散的频域信号!

复数乘法: N 2 N^2 N2
复数加法: N ( N − 1 ) N(N-1) N(N1)

FFT运算

快速傅里叶变换通常采用基2时间抽取FFT算法,采用蝶形运算对复数信号进行运算时,每一次需要一次复数乘法和二次复数加法,当 N = 2 M N=2^M N=2M时,分解级数为M级,每一级有 N / 2 N/2 N/2个蝶形。

复数乘法: N 2 × M = N 2 log ⁡ 2 N \frac{N}{2}\times M=\frac{N}{2}\log_2{N} 2N×M=2Nlog2N
复数加法: N 2 × 2 × M = N log ⁡ 2 N \frac{N}{2}\times2\times M=N\log_2{N} 2N×2×M=Nlog2N

复杂度比较

为了更具象的了解DFT和FFT算法的复杂度,将两者的复杂度做一比较,代码如下:

import numpy as np
import matplotlib.pyplot as plt
import time
from matplotlib.animation import FuncAnimation

def dft(x):
    N = len(x)
    n = np.arange(N)
    k = n.reshape((N, 1))
    e = np.exp(-2j * np.pi * k * n / N)
    X = np.dot(e, x)
    mult = N**2  # Multiplication count
    add = N*(N-1)  # Addition count
    return X, mult, add

def fft(x):
    N = len(x)
    if N <= 1:
        return x, 0, 0
    even, even_mult, even_add = fft(x[::2])
    odd, odd_mult, odd_add = fft(x[1::2])
    factor = np.exp(-2j * np.pi * np.arange(N) / N)
    factor_odd = factor[:N//2] * odd
    factor_even = factor[N//2:] * even
    mult = even_mult + odd_mult + N*2
    add = even_add + odd_add + N*3
    return np.concatenate([factor_even + factor_odd, factor_even - factor_odd]), mult, add

# Initialize variables
N_max = 500
N_values = np.arange(2, N_max + 1,1)
dft_mults = []
dft_adds = []
fft_mults = []
fft_adds = []

# Calculate multiplication and addition counts for each data length
for N in N_values:
    x = np.random.random(N)

    # Calculate DFT multiplication and addition counts
    _, dft_mult, dft_add = dft(x)
    dft_mults.append(dft_mult)
    dft_adds.append(dft_add)

    # Calculate FFT multiplication and addition counts
    _, fft_mult, fft_add = fft(np.pad(x, (0, 2**int(np.ceil(np.log2(N))) - N), 'constant'))
    fft_mults.append(fft_mult)
    fft_adds.append(fft_add)

# Initialize figure and axis
fig, ax = plt.subplots()
ax.set_xlim(0, N_max +1)
ax.set_ylim(0, max(max(dft_mults), max(fft_mults), max(dft_adds), max(fft_adds)) + 100)
line_dft_mult, = ax.plot([], [], 'bo-', label='DFT Multiplication')
line_dft_add, = ax.plot([], [], 'cs-', label='DFT Addition')
line_fft_mult, = ax.plot([], [], 'ro-', label='FFT Multiplication')
line_fft_add, = ax.plot([], [], 'mo-', label='FFT Addition')
ax.set_xlabel('Data Length (N)')
ax.set_ylabel('Operation Count')
ax.set_title('DFT vs FFT Complexity Comparison')
ax.legend()
ax.grid(True)

# Update function for animation
def update(frame):
    n = frame + 2
    ax.set_title(f'DFT vs FFT Complexity Comparison (N = {n})')
    line_dft_mult.set_data(N_values[:frame+1], dft_mults[:frame+1])
    line_dft_add.set_data(N_values[:frame+1], dft_adds[:frame+1])
    line_fft_mult.set_data(N_values[:frame+1], fft_mults[:frame+1])
    line_fft_add.set_data(N_values[:frame+1], fft_adds[:frame+1])
    return line_dft_mult, line_dft_add, line_fft_mult, line_fft_add

# Create animation
ani = FuncAnimation(fig, update, frames=N_max - 1, interval=200, repeat=False)

# Show the animation
plt.show()

请添加图片描述

由于FFT运算需要进行补零扩充到2的M次幂,所以某一区间内的FFT运算次数是一样的,从上图可以看出随着序列长度的不断增加,两者的运算次数出现了显著的区别。

但是对卷积进行FFT运算时,假如两个序列长度相差巨大,或者两个长度均较小时,使用FFT反而会使运算更加复杂。

只有当两个序列长度很长,且相差不大时,使用FFT运算将会非常显著地提高运算速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/649061.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql替换字段中的指定文本

前言 最近有个需求&#xff0c;不同的环境的ip和端口都不一样&#xff0c;所以就要修改表里面字段的值 但是手动修改比较麻烦而且很慢&#xff0c;所以在网上搜了下相关的方法。经过手动实践确实可行&#xff0c;下面分享给大家 准备fake数据 为了方便演示&#xff0c;准备…

pytorch实现图像分类器

pytorch实现图像分类器 一、定义LeNet网络模型1&#xff0c;卷积 Conv2d2&#xff0c;池化 MaxPool2d3&#xff0c;Tensor的展平&#xff1a;view()4&#xff0c;全连接 Linear5&#xff0c;代码&#xff1a;定义 LeNet 网络模型 二、训练并保存网络参数1&#xff0c;数据预处理…

mybatis-plus在实际开发中的应用

文章目录 前言一、实体类的注解二、Req查询条件三、Controller接口四、Service接口五、Service接口实现类六、Mapper接口七、枚举的使用总结 前言 最近的项目是使用mybatis-plus作为持久层框架&#xff0c;前面也记录过mybatis-plus的基本使用&#xff0c;此次记录一下本次项目…

行业报告|2022年智能制造人才发展报告:自动化、PLC、机器人等控制执行类研发岗需求增长快

原创 | 文 BFT机器人 近年来&#xff0c;我国智能制造应用规模和发展水平大幅跃升&#xff0c;制造业智能化发展成效明显&#xff0c;有力支撑工业经济的高质量发展。与此同时&#xff0c;我国在2022年首次出现人口负增长&#xff0c;该趋势下我国发展制造业的人口红利正逐步降…

BurpSuite全平台通用扩展

前言 昨天分享的关于springboot3集成ChatGPT实现AI聊天、生成图片&#xff0c;被CSDN以违规拒发了&#xff0c;找人工客服最后一肚子气&#xff0c;从上大学开始入住CSDN一直偏爱&#xff0c;确实不想放弃&#xff0c;似乎现在他已经不再是一个纯技术交流分享平台了&#xff0…

LaWGPT:你的私人法律顾问!

LaWGPT&#xff1a;你的私人法律顾问&#xff01; LaWGPT 是一系列基于中文法律知识的开源大语言模型。 该系列模型在通用中文基座模型&#xff08;如 Chinese-LLaMA、ChatGLM 等&#xff09;的基础上扩充法律领域专有词表、大规模中文法律语料预训练&#xff0c;增强了大模型在…

工商业储能解读

工商业储能解读 0、前言1、2022-2023年工商业储能相关利好政策1.1 2022年1月4日1.2 2022年1月18日1.3 2022年2月10日1.4 2022年3月21日1.5 2022年3月22日1.6 2022年3月29日1.7 2022年4月2日1.8 2022年4月13日1.9 2022年4月25日1.10 2022年5月25日1.11 2022年5月30日1.12 2022年…

传输平台太多?难以管理?看这款跨网传输系统怎样解决

传输作为企业正常运行中最日常的行为&#xff0c;也意味着出现频率最高。微信、QQ、邮件、或是钉钉等办公软件&#xff0c;每天大家上班时开着各种软件&#xff0c;进行着不同的信息交互与传输。很多员工在工作时往往是哪个软件方便顺手就用哪个传输&#xff0c;但是这样也意味…

AI绘画Midjourney的咒语关键词汇总结

近期很多人都在研究Ai,被他强大的运算和准确性所震撼&#xff0c;和我们设计师相关的一个Ai绘画工具-Midjourney&#xff0c;绝对是占设计圈头部流量的&#xff0c;在圈内掀起一片热潮&#xff0c;今天我们就专门围绕他来展开说说&#xff0c;当然除了这个外&#xff0c;我们还…

Linux安装和配置VCenter

Linux安装和配置VCenter 以下演示安装 Linux VCenter&#xff0c;也就是使用VMware-VCSA-all-6.7.0-13010631.iso 镜像包。通过一台 Windows服务器远程连接 ESXI 服务器安装 Linux 版本的 VCenter。也就是Windows 服务器只是安装的界面的一个载体。 Linux VCenter环境搭建 下…

LLM 优先的软件架构:源自 ArchGuard Co-mate 的四个基本设计原则

在优化 ArchGuard 的 AI 辅助架构治理工具 Co-mate 的架构时&#xff0c;发现有一些模式与之前设计 AutoDev、ClickPrompt 等颇为相似。便思考着适合于 ArchGuard Co-mate 的架构设计原则是什么&#xff0c;写下了初步的三条原则。 而正好要在公司内分享 LLM 架构&#xff0c;…

【软考程序员学习笔记】——多媒体基础知识

目录 &#x1f34a; 一、多媒体的概念及分类 多媒体的分类 &#x1f34a;二、声音信号的数字化过程 采样 量化 编码 &#x1f34a;三、常见音频文件格式 &#x1f34a;四、图形/图像区别 图形 图像 &#x1f34a;五、常见图像文件格式 &#x1f34a;六、常见视频文件…

JDK8-2-流(3)- 流操作-distinct

JDK8-2-流&#xff08;3&#xff09;- 流操作-distinct 去重操作&#xff0c;如下开头两个菜品一样&#xff0c;对 menu 去重如下&#xff1a; public class DishDistinctTest1 {public static final List<Dish> menu Arrays.asList(new Dish("pork", false…

享元模式(十四)

每天都是全新的一天&#xff0c;感谢今日努力的自己。 上一章简单介绍了外观模式(十三), 如果没有看过, 请观看上一章 一. 享元模式 引用 菜鸟教程里面的外观模式介绍: https://www.runoob.com/design-pattern/flyweight-pattern.html 享元模式&#xff08;Flyweight Patter…

后,配置文件被清空,导致无法开启WiFi

root cause&#xff1a; /data/vendor/wifi/wpa/wpa_supplicant.conf 是0字节&#xff0c;导致wpa_supplicant_init_iface缺少”p2p_disabled1“的配置就会在走错flow到p2p wpa_supplicant_init_iface 》wpas_p2p_init 从而在HidlManager::registerInterface 进入 if (isP2pIf…

DeepSpeed零冗余优化器Zero Redundancy Optimizer

零冗余优化器 内容 零概述培训环境启用零优化 训练 1.5B 参数 GPT-2 模型训练 10B 参数 GPT-2 模型使用 ZeRO-Infinity 训练万亿级模型 使用 ZeRO-Infinity 卸载到 CPU 和 NVMe分配 Massive Megatron-LM 模型以内存为中心的平铺注册外部参数提取权重 如果您还没有这样做&…

【LeetCode】HOT 100(12)

题单介绍&#xff1a; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数据结构的新手和想要在短时间内高效提升的人&#xff0c;熟练掌握这 100 道题&#xff0c;你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

佩戴比较舒适的蓝牙耳机有哪些?值得入手的蓝牙耳机分享

​对于年轻人来说&#xff0c;耳机使用场景丰富&#xff0c;时尚追求度高&#xff0c;喜好的音乐类型也是多种多样&#xff0c;需求侧重也不尽相同。下面我来推荐几款相当不错的蓝牙耳机给大家&#xff0c;总会有喜欢那款&#xff01; 一、南卡OE蓝牙耳机 佩戴舒适度打分&…

【QQ界面展示-设置消息正文的背景图 Objective-C语言】

一、咱们上午说到哪儿了,还记得吗, 1.咱们上午是不是说到这儿了,可以显示正文、可以显示文字、并且,设置好背景图片了, 现在的问题就是,正文里面的文字,是不是超出这个图片了, 正文里面的文字,超出背景图片了, 那么,接下来,就给大家看一下,怎么解决这个问题, …

Macbook Pro双系统装Window10后设置触摸屏滑动方向

最近想给自己的Macbook Pro装Windows10操作系统&#xff0c;毕竟Windows才是真正的生产力工具&#xff0c;装了以后不需要两台笔记本了&#xff0c;直接在一台笔记本上有MacOS和Windows 装好以后发现触摸屏不能轻点触控还有触摸屏的滑动方向是反的 第一个问题&#xff0c;不能轻…