- 博客(226)
- 资源 (1)
- 收藏
- 关注
原创 设计模式——观察者模式
新建QWidget工程。widget.h如下:#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QDebug>namespace Ui {class Widget;}class ProgressInterface {public: virtual void DoProgress(int value)=0; virtual ~ProgressInterface();}
2021-07-14 00:16:43
175
原创 设计模式——模板方法
未使用设计模式时,代码如下:#include <QCoreApplication>//程序库开发人员class Library{public: void Step1(){}};//应用程序开发人员class Application{public: void Step2(){}};int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Library lib
2021-07-08 23:03:03
172
原创 色彩理论基础
一、色彩理论。1.1 色彩原理。1.1.1 光与色。当光线进入三棱镜后,光线会被分离为红、橙、黄、绿、青、蓝、紫,所以自然光是七色光的混合,这种现象称为光的分解或者光谱。红色的波长最长,紫色的波长最短。1.2 色彩三要素。1.2.1 色相。色相是色彩的相貌,以波长划分,波长相同则色相相同。如果把光谱的6种色带首尾相连,可以得到色相环。在6种基本色相中插入中间色,可以得到十二色相环。再进一步插入中间色,可以得到二十四色相环。1.2.2 饱和度。饱和度是指色彩的纯
2021-06-30 23:28:18
8330
1
原创 数字信号处理——Chirp Z变换
一、前言。Chirp Z变换也叫czt变换或者线性调频变换。二、CZT原理。三、CZT的算法步骤:四、CZT的特点(与FFT比较):五、CZT的Matlab实现。function [] = chirpz() clear;close all;clc;x = [1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0];A0 = 1; % 起始取样点的半径,A0<=1phi0 = 0; % 起始取样点Z0的相角psi0 =
2021-06-15 22:55:57
14805
1
原创 数字信号处理——数字滤波器实现
一、IIR滤波器基本结构。1.1 直接型。由IIR滤波器的系统函数,直接得到结构。将系统函数的分子、分母分开实现,再级联起来,可以得到直接I型。交换系统函数的分子、分母的位置,再共用中间的延时单元,可以得到直接II型。1.2 级联型。1.3 并联型。二、FIR滤波器基本结构。2.1 直接型。2.2 级联型。三、有效字长效应。3.1 输入量化误差。3.2 系数量化误差。3.3 乘积运算量
2021-06-08 22:12:57
1836
1
原创 数字信号处理——快速傅里叶变换
一、前言。快速傅里叶变换不是一种新的变换,而是离散傅里叶变换的快速算法,而且这个快速算法有很多种,都统称为快速傅里叶变换FFT。如果直接用公式计算DFT,其时间复杂度为O(n^n),这是难以应用在工程当中的。而FFT的时间复杂度为O(n*log(n)),随着序列的点数增加,其运算效率大大提高。其中最常用的是基2时域抽取的FFT,下面来详细说明。二、旋转因子。三、蝶形图。...
2021-05-13 23:09:23
14136
1
原创 数字信号处理——离散傅里叶变换
一、四种信号的傅里叶分析。连续周期信号 连续时间傅里叶级数 连续非周期信号 连续时间傅里叶变换 离散周期信号 离散傅里叶级数 离散非周期信号 离散傅里叶变换 .........
2021-05-10 22:32:52
18251
1
原创 数字信号处理——离散信号与系统分析
一、离散信号的产生。数字信号处理,一般是建立在下图的架构中,由FPGA/DSP为核心,以ADC和DAC为桥梁,来处理外部的模拟信号。其中FPGA/DSP处理的都是数字信号,而数字信号属于离散信号。数字信号:时间、幅度都为离散的。离散信号:时间离散,幅度可以是离散、也可以是连续的。二、基本的离散信号。2.1、单位脉冲序列。2.2、单位阶跃序列。2.3、矩形序列。2.4、实指数序列。2.5、虚指数序列。2.6、正弦序列。...
2021-05-06 22:51:18
6877
原创 QT编译liblzma
liblzma库是xz utils的子集,这里先下载xz utils源码。新建xz_lib文件夹。解压xz utils源码,取出extra,lib,src三个文件夹,并放入xz_lib文件夹中。再将config.h.in重命名为config.h,放入xz_lib文件夹中,并修改成下面这样:#ifndef CONFIG_H#define CONFIG_H/* Prefix for symbols exported by tuklib_*.c files */#define TUKL
2021-04-15 23:35:49
1796
原创 QT编译libjpeg
先下载libjpeg源码。将源码解压,新建jpeglib文件夹,将源码中所有.c和.h文件复制到jpeglib文件夹中。再将jconfig.txt改名为jconfig.h,再复制到jpeglib文件夹中。在jpeglib文件夹中,删除以下文件:cjpeg.cckconfig.cdjpeg.cexample.cjcapimin.cjdapimin.cjmemansi.cjmemdos.cjmemmac.cjmemmgr.cjmemname.cjmemnobs.cjmem
2021-04-13 22:06:41
1063
原创 QT编译Xpdf
先参考本博客的《QT编译bzip2和zlib》、《QT编译libpng》、《QT编译FreeType和Little CMS》完成这些依赖库的编译。下载xpdf源码。复制以下文件到xpdflib文件夹中,其中aconf.h.in修改文件名为aconf.h。再将aconf.h修改为下面所示(我这里没有使用Little CMS,如有需要,请自行添加源文件并将以下文件中相应的条件编译改为#define HAVE_LCMS 1)。/* * aconf.h * * This file is mo
2021-04-08 23:32:27
1160
原创 Qml FileDialog发布
Qml的FileDialog有两种,其中labs的比较好用,如下图所示。但是在使用windeployqt发布应用时,发现界面不显示了。需要将platform文件夹,复制到应用的目录中,也是对应Qt/labs。如下图所示,放到Qt/labs文件夹中,如果没有对应的路径,则需要自己新建文件夹。最后在platform文件夹中,可以删掉其中一个dll,看你是debug发布(文件名最后面带d),还是release发布(文件名最后面不带d)。...
2021-04-08 22:33:10
500
原创 QT编译FreeType和Little CMS
FreeType是个开源字体引擎,可以移植到arm中,也可以在桌面软件中使用。下载FreeType。这里使用FreeType 2.10.4版本。使用QT Creator新建工程,工程名为FreeType。解压后,只取出src和include两个文件夹,并放在freetype目录中。删除src文件夹中tools和gxvalid。将src和include中的.c和.h文件都添加到工程中。在.pro中添加下面这行。INCLUDEPATH += \freetype/inclu
2021-04-06 23:15:37
2264
4
原创 QT编译libpng
libpng依赖zlib,先参考本博客的《QT编译bzip2和zlib》,完成zlib的编译。接下来,下载libpng源码。点击下图所示按钮即可。解压后,新建lpng文件夹,复制目录下的以下文件到lpng中,均为最上顶目录的文件。另外还需要scripts目录下的pnglibconf.h.prebuilt,将其重命名为pnglibconf.h。再修改pnglibconf.h,添加#include "../zlib/zlib.h"再将zlib的源码复制到工程目录中,顶层文
2021-04-01 22:57:20
1246
原创 QT编译bzip2和zlib
bzip2没有什么依赖,源码编译比较简单。先下载bzip2源码。新建src文件夹,把以下文件放在src文件夹中。因为bzip2.c中有main()函数,这里用条件编译把它注释掉。在bzip2.c中增加#if 0和#endif,如下图所示。创建工程,main.c中改为下图所示,好了,可以使用bzip2的api了。接下来,可以使用bzip2的源码来编译成dll。...
2021-03-09 22:13:14
1247
原创 PS2接口
一、简介。PS2是一种非常古老的接口,随着USB接口的普及,目前已经有很多电脑不支持PS2接口了。PS2接口主要应用在鼠标、键盘。PS2缺点是体积大,不支持热插拔;优点是全键无冲突。(也有部分USB键盘可以做到全键无冲突)PS2母座有双层的,一个键盘、一个鼠标;也有单层的只支持一个键盘或一个鼠标;也有单层的同时支持一个键盘和一个鼠标。所以有的电脑只有一个单层PS2座的话,那么你得用一分二的线,再接到键盘、鼠标。二、PS2协议。PS2协议跟串口协议非常像,也有是起始位、数据位、校验
2021-02-21 23:04:19
29558
原创 基于FPGA的等精度频率计
一、简介。测频常常使用等精度测频法,它可以在整个测量范围内保持相同的精度。二、等精度测频的结构。三、仿真结果。四、其它问题。
2021-01-12 22:58:30
1912
1
原创 基于FPGA的异步FIFO设计
异步FIFO的结构如下图所示:具体的逻辑如下图所示:空满标志逻辑如下图所示:fifo_async.v代码如下:`timescale 1ns / 1psmodule fifo_async #(parameter ADDR_WIDTH=5,BIT_WIDTH=8) // DEPTH = 32,ADDR_WIDTH=ADDR_WIDTH( input iResetN ,input iWriteClk,iWriteEnable // write part
2021-01-08 23:15:40
1872
1
原创 基于FPGA的MSK调制
MSK调制的结构如下图所示。1、基带信号经过差分编码,然后为1bit的信号。2、串并转换后为2bit的信号,分为高位和低位。高位和低位再分别映射为+1和-1。3、再把低位的+1、-1延时基带信号的一个周期。4、最后高位和低位的+1、-1(wSignedHigh、wSignedLow)分别与子载波(wSubCarrierI、wSubCarrierQ)相乘。5、子载波相乘后(wSubCosI和wSubSinQ)再与主载波相乘,最终相加,可以得到MSK已调信号。
2021-01-06 23:28:47
3700
1
原创 基于FPGA的QAM调制
QAM调制的结构如下图所示。1、先将基带信号串并转换为4位的并行信号。2、再将4位的并行信号通过星座映射为高两位和低两位,其取值范围为+1、-1、+3、-3。3、再将星座映射后的信号与载波相乘,这里用有符号乘法器。4、最终相加,得到QAM已调信号。仿真结果如下图所示:其它问题。1、一些教科书中载波那里会写成移相90度,其实就是sin载波移相90度为cos载波,可以不用管移相这个步骤,直接合成sin和cos载波即可。2、QAM为既调幅又调相,从仿真图中可以看出,幅值有3
2021-01-05 09:22:45
3844
原创 基于FPGA的DPSK/QPSK调制
一、DPSK调制。DPSK调制的结构图如下图所示:DPSK就是差分编码+2PSK,如果不加入差分编码,则会出现倒pi现象,那么调制后也无法还原出基带信号。差分编码只对基带信号进行编码,与调制无关。仿真结果如下图所示:二、QPSK调制。...
2020-12-21 23:52:07
7384
原创 基于FPGA的ASK/FSK调制
一、ASK调制。2ASK也就是OOK,在433MHz的无线通信模块中用的多,速率不高,其结构如下图所示:仿真结果如下图所示:二、FSK调制。2FSK在433MHz的无线通信模块中用的多,速率不高,其结构如下图所示:仿真结果如下图所示:...
2020-12-17 23:10:49
2452
原创 基于FPGA的Chirp调制
Chirp信号在雷达、通信中有广泛的应用,这里介绍它的调制方法。Chirp调制的结构如下图所示:其中锯齿波的相位累加器需要将其右移(也就是缩小),再与载波的相位累加器进行相加。仿真结果如下图所示:...
2020-12-16 23:46:15
1869
原创 基于FPGA的AM/FM调制
AM调制的结构如下图所示:由正弦表和相位累加器,可以构成DDS。那么两个DDS,一个用于产生调制信号,一个用于产生载波信号。由于正弦表一般为无符号数,所以要转为有符号数,再送进乘法器,最终可以得到AM已调信号。(乘法器需要使用IP,为全并行乘法器)正弦表可以自己写脚本生成,也可以使用mif maker生成,再存在ROM中。仿真结果如下图所示:...
2020-12-14 23:13:44
5682
原创 Zeta电路的参数计算及仿真
Zeta电路的参数计算较为简单,可以用matlab来完成,代码如下。clear;clc;Vin = 12; %输入电压单位VVout = 18; %输出电压单位VFs = 5000000; %开关频率单位HzIout = 1; %输出电流单位ADeltaIin = 0.2; %输入电流纹波单位ADeltaIout = 0.2; %输出电流纹波单位ADeltaVc = 0.01; %输出电压纹波单位VTs = 1/Fs; %开关周期duty = Vout / (Vout+Vin);
2020-12-09 22:20:43
4305
1
原创 Sepic电路的参数计算及仿真
Sepic电路的参数计算较为简单,可以用matlab来完成,代码如下。clear;clc;Vin = 12; %输入电压单位VVout = 6; %输出电压单位VFs = 5000000; %开关频率单位HzIout = 1; %输出电流单位ADeltaIin = 0.2; %输入电流纹波单位ADeltaIout = 0.2; %输出电流纹波单位ADeltaVc = 0.01; %输出电压纹波单位VTs = 1/Fs; %开关周期duty = Vout / (Vout+Vin);
2020-12-04 22:50:14
7917
1
原创 Cuk电路的参数计算及仿真
Cuk电路的参数计算较为简单,可以用matlab来完成,代码如下。clear;clc;Vin = 12; %输入电压单位VVout = 18; %输出电压单位VFs = 5000000; %开关频率单位HzIout = 1; %输出电流单位ADeltaIin = 0.2; %输入电流纹波单位ADeltaIout = 0.2; %输出电流纹波单位ADeltaVc = 0.01; %输出电压纹波单位VTs = 1/Fs; %开关周期duty = Vout / (Vout+Vin);
2020-12-02 23:01:23
8748
2
原创 Buck-Boost电路的参数计算及仿真
Buck-Boost电路的参数计算较为简单,可以用matlab来完成,代码如下。clear;clc;Vin = 12; %输入电压单位VVout = 6; %输出电压单位VFs = 5000000; %开关频率单位HzIout = 1; %输出电流单位ADeltaIL = 0.2; %电流纹波单位ADeltaVc = 0.01; %电压纹波单位VTs = 1/Fs; %开关周期duty = Vout / (Vout+Vin);VL = Vin;L = (VL * duty *
2020-11-24 22:20:34
11300
原创 Boost电路的参数计算及仿真
Boost电路的参数计算较为简单,可以用matlab来完成,代码如下。clear;clc;Vin = 5; %输入电压单位VVout = 10; %输出电压单位VFs = 5000000; %开关频率单位HzIout = 1; %输出电流单位ADeltaIL = 0.2; %电流纹波单位ADeltaVc = 0.01; %电压纹波单位VTs = 1/Fs; %开关周期duty = (Vout - Vin)/Vout;VL = Vin;L = (VL * duty * Ts) /
2020-11-23 23:46:23
20388
1
原创 Buck电路的参数计算及仿真
Buck电路的参数计算较为简单,可以用matlab来完成,代码如下。clear;clc;Vin = 12; %输入电压单位VVout = 5; %输出电压单位VFs = 100000; %开关频率单位HzDeltaIL = 0.25; %电流纹波单位ADeltaVc = 0.01; %电压纹波单位VTs = 1/Fs; %开关周期duty = Vout / Vin;VL = Vin - Vout;L = (VL * duty * Ts) / DeltaIL;C = (Delta
2020-11-20 23:37:57
19572
7
原创 基于FPGA的FFT设计
一、前言。频域,更利于分析信号的成分,如:基波、谐波。在示波器、频谱仪中,经常用到频谱图。DFT和FFT都是时域变换到频域的工具,DFT适用于任意点数,而FFT一般是偶数点(基2、基4、分裂基等)而且速度更快。二、方案。由于FFT是统一处理若干个点,也就是若干个数据,所以先把数据缓存起来,计算好再输出。这里使用了两块RAM做输入、输出缓存器。蝶型运算主要由复数乘法器和复数加/减法器构成,其中复数乘法器可以由3个实数乘法器实现。旋转因子可以先扩大再存入ROM中,计算完成后.
2020-09-29 23:10:42
9578
1
原创 MSP430FR6989之串口重定向
MSP430FR6989的官方例子是使用sprintf和UART_transmitString来完成printf的功能,有点麻烦,这里改成重定向到printf,并且使用条件编译,#define DEBUG来定义printf的别名为debug,以及启用/禁止printf打印。#include <stdlib.h>#include <stdio.h>#include <driverlib.h>#define DEBUG#ifdef DEBUG #d
2020-09-21 23:15:20
1189
原创 Verilog读取bmp图片
在没有开发板的情况下,要使用Verilog做图像处理,就只能仿真了。这时需要一个激励,让Verlog读取到图片,这里就提供一个例子去读取bmp图片。`timescale 1ns / 1nsmodule bmp_tb;integer iBmpFileId,iOutFileId,iIndex=0,iCode;reg [7:0] rBmpData [0:200000];reg rClk;reg [7:0] rData;integer iBmpWidth,iBmpHight,iDataSt
2020-09-17 22:54:10
9624
14
原创 搭建ESP32-IDF开发环境
这里介绍WIN10系统下ESP32-IDF v4.1开发环境的搭建。一、下载虚拟机。下载lubuntu和Vmware,还有ESP32-IDF v4.1。二、设置共享文件夹。三、安装python3.8。四、设置pip软件源。五、安装ESP32-IDF。六、编译例子。七、下载Eclipse。...
2020-09-02 00:07:11
4770
1
原创 MSP430FR6989之看门狗
MSP430FR6989的看门狗比较简单,只有一个寄存器可以设置。WDTPW:看门狗密码。每次设置WDTCTL寄存器都要向WDTPW写入0x05A。WDTHOLD:禁用/启用看门狗。WDTSSEL:设置看门狗时钟源。WDTTMSEL:看门狗模式设置。为0进入看门狗模式;为1进入间隔定时器模式。WDTCNTCL:喂狗。WDTIS:看门狗分频系数。再看看板子上的晶振,为32.768KHz,接在LFX低速晶振引脚上。而LFX则是接在ACLK上,所以WDTSSEL正好可以设为
2020-08-20 22:24:38
941
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅