精华内容
下载资源
问答
  • 高精度数字失真度测量仪的设计、电子技术,开发板制作交流
  • 针对模拟控制正弦信号失真度测试体积大、测试精度低和使用不方便的缺点,设计了数字控制正弦信号失真度测试。该系统以单片机和FPGA相结合为控制核心,运用快速傅里叶变换(FFT)为主要分析工具,对信号输入电路...
  • 失真度测量仪

    2012-08-17 00:13:09
    失真度测量仪
  • 音频信号频率和失真度分析
  • 失真度测试

    2014-01-21 23:19:43
    基于频谱分析的原理,使用不同的AD采样芯片,采用直接采样和等效采样相结合的方式,运用FFT(Fast Fourier Transform)算法在单片机内进行FFT运算,实现了对不同信号失真度的测试。被测信号频率为1Hz~1MHz,测得绝对...
  • 用射频频谱分析观测一个已调波的频谱成分,记录上边带或下边带中各条谱线的幅度值,从而可以根据有关算式计算出调制信号(音频信号)的失真度
  • 几种旧型的失真度仪的使用方法。 使用ShibaSoku 796F进行测量的方法;使用NF的E-2001A失真度测量仪来测量。
  • 本文并讨论了当前对正弦信号失真度的主要方法(模拟...提出了一种基于单片机(C8051F)和FFT(Fast Fourier Transform)算法的正弦信号失真度测量仪的高性价比设计方 案,实现以较低的成本对正弦波信号失真度的精确可靠评价。
  • 基于87C196KC的信号失真度测试在音响、播音、电力系统以及其他要求检测信号波形纯正性时,均需要测量波形的失真度。这种失真 主要是由放大电路的非线性所引起,基测量常采用频谱分析法和基波抑制法。 一个失真的...
  • 失真分析: A.引言 失真分析器使用Fluke 8588A Digitizer收集的时间序列数据计算总谐波失真(THD)以及总谐波失真和噪声(THD + N)。 计算失真的步骤: A.时间序列数据 时间序列数据由Fluke 8588A数字化检索。 ...
  • 失真度测试设计制作报告 可以一用 绝对让你满意哈!!!
  • 平台为STM32F429IGT6,加陶晶弛串口屏做显示。ADC采集进行FFT,计算五次谐波THD,测量精度在0.2%之内,极精准。
  • 基于数模混合最优滤波技术的工频失真度仪研究,蒋吉娟,,本文介绍了目前设计失真度仪主要采用的几种方法,如基波抑制法、谐波分析法(FFT法)。通过深入分析这几种常用方法的测量原理,找
  • 在很多领域都会用到总谐波失真(Total Harmonic Distortion)测试,例如音频、电声、供电和振动等,其中音频行业对失真测量的准确要求最高。总谐波失真THD等参数的计算式不算复杂,采用数字信号分析的方法貌似很...
  • 由于压缩器的特性和其他电感负载,监控电源线的失真就变得十分重要了。对于像风能或者太阳能这样可选折的能源,一个失真的60-Hz的正弦波是可能出现的。
  •   摘要:根据竞赛题目要求和现有条件的条件,本作品完成了以通用计算机的为核心的音频信号分析。本仪器系统组成为:被测对象、传感器、信号调理、数据采集、虚拟仪器软件和计算机软件系统平台。被测信号首先经...

    文末下载完整资料

      摘要:根据竞赛题目要求和现有条件的条件,本作品完成了以通用计算机的为核心的音频信号分析仪。本仪器系统组成为:被测对象、传感器、信号调理、数据采集、虚拟仪器软件和计算机软件系统平台。被测信号首先经传感器转化为电信号,然后由信号调理器进行去噪、滤波及前级放大等预处理,然后通过集成芯片进行音频信号的采集和模数转换并将数据通过单片机以串行通信的方式上传到PC机,经具有强大科学计算能力的软件LABVU分析处理,将分析结果下传到单片机并通过液晶和打印机进行输出,成功实现了对音频信号的频谱分析、功率分析和正弦信号失真度的测量。

    关键词:信号采集;频谱分析;功率分析;虚拟仪器;正弦信号失真度

    系统方案选择与论证

    总体设计方案

      本作品是以计算机为中心的音频信号分析仪,根据题目设计要求,采集的信号在几十赫兹到十千赫兹范围内,我们尽量利用现有技术与设备,采用转换速度几十微秒的AD转换芯片和通用计算机构成,原理如图1所示。
      本音频信号分析仪以LPC938单片机为核心,声音模拟信号通过LM358进行信号放大,利用LPC938自带的A/D转换功能实现模拟数字信号的转换,由单片机通过串行口通信的方式将数字音频信号传给PC机,通过PC机显示音频信号并分析结果。利用LabVIEW强大的科学计算能力,对采集到的信号进行了自相关和互相关分析,并对确知信号和随机信号进行了频谱分析和功率谱分析,实现了音频信号分析仪的设计。并将分析结果下传51单片机,由液晶显示、打印机打印。
    在这里插入图片描述

    系统的硬件设计与实现

    系统硬件的基本组成部分

      本系统可分为电压信号产生部分、信号转换测量部分和控制部分。具体的单元电路包括:滤波电路,信号放大电路,A/D转换电路,LabV IEW的信号分析与处理,液晶显示并打印分析结果。

    主要单元电路的设计

    话路滤波电路

      一般有源滤波器的设计,是根据所要求的幅频特性,寻找可实现的有理函数进行逼近设计。滤波电路如图2所示,当取R1=R2=8.2K,C1=6800P,C2=680P,r1,r2分别为47k和27k时,得到其频率范围200HZ—100KHZ,其通带增益为8DB。
    在这里插入图片描述

    放大模块设计

      图3所示为LM358放大器的放大电路图。通过调节最左端滑动变阻器可实现调零。通过调节R2实现第一级放大,通过调节R3实现第二级放大,总放大倍数为 G=(R2/R1+1)*(R3/R4+1) 使用时从5拐角输入信号即可从1拐角输出放大后的信号。
    在这里插入图片描述

    时钟芯片模块

      DS1302 是DALLAS 公司推出的涓流充电时钟芯片。它能够提供秒、分、小时、日、月、年包括星期的信息,并且能够自动调整月份和闰年。芯片采用了简单的I2C 三线通信方式,便于节省芯片和与之接口的微处理器引脚。它广泛应用于电话传真便携式仪器以及电池供电的仪器仪表等产品领域下。其电路图如下:
    在这里插入图片描述

    软件设计

    在这里插入图片描述

    更多电赛资料

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


    全套资料免费下载:
    关注v-x-公-众-号:【嵌入式基地
    后-台-回-复:【电赛】 即可获资料
    回复【编程】即可获取
    包括有:C、C++、C#、JAVA、Python、JavaScript、PHP、数据库、微信小程序、人工智能、嵌入式、Linux、Unix、QT、物联网、算法导论、大数据等资料

    在这里插入图片描述
    电子设计大赛资料分享:
    https://pan.baidu.com/s/14qxwGv7Sq6a_jcMT3mNwtw#list/path=%2F

    提取码:jdxj

    展开全文
  • 本低频数字式相位测量仪基于多周期同步计数法和DDS原理,以89C55单片机为控制核心,现场可编程逻辑器件(FPGA)为处理核心,由数字式移相信号发生器、移相网络、相位测量仪三部分组成,整个系统具有极高的性价比。...
  • 频谱一般是一种非时域工具,主要描述信号在频域上的变化(用于信号失真度、调制度、谱纯度、频率稳定度和交调失真等信号参数的测量),在时域上使用得并不广泛。不过,RIGOL DSA1000系列频谱提供的上位机应用工具...
  • 综合测试通常会集成有频率计、功率计、射频信号发生器、音频信号发生器、调制度计、信纳比、数字电压表、失真度计等常规功能,有的还具有频谱、示波器、接收机、跟腙信号源、信令分析、模拟基站、专用测试模式...
  • 频谱分析是研究电信号频谱结构的仪器,用于信号失真度、调制度、谱纯度、频率稳定度和交调失真等信号参数的测量,可用以测量放大器和滤波器等电路系统的某些参数,是一种多用途的电子测量仪器。它又可称为频域示波...
  • 功能指标全部完成,程序实现了测量每种失真的情况下的THD的近似值。并且进行了程序拓展,实现了全自动的测量,以及显示测量波形的波形图,频谱图。根据题目要求,我们可以看出这次程序设计要用到FFT算法。 我们的...

    写在前面

    20电赛整体感觉难度比之前小,本次程序设计上也没有太多的难点。功能指标全部完成,程序实现了测量每种失真的情况下的THD的近似值。并且进行了程序拓展,实现了全自动的测量,以及显示测量波形的波形图,频谱图。根据题目要求,我们可以看出这次程序设计要用到FFT算法。
    我们的程序设计有两个版本,一个版本是通过定时器进行采样得到特定采样率下的数据并保存在数组里,然后进行傅里叶变换,另外一种就是通过定时器产生PWM波生成ADC的采样时钟,直接通过DMA保存数据然后进行傅里叶变换。
    在理论计算下,
    所以本文主要介绍我们实现的FFT的功能测试验证的程序。

    题目

    在这里插入图片描述

    比赛指标要求

    在这里插入图片描述

    为什么需要FFT?

    任何连续测量的时域信号都可以表示为不同频率的正弦波信号的无限叠加。以累加的方式来计算该信号中不同信号的频率、振幅和相位。所以本次测量就必须要使用FFT算法。

    原理部分就引用下别人的帖子大家自行查看:
    超详细易懂FFT(快速傅里叶变换)及代码实现

    知识科普:THD

    总谐波失真表明功放工作时,由于电路不可避免的振荡或其他谐振产生的二次,三次谐波与实际输入信号叠加,在输出端输出的信号就不单纯是与输入信号完全相同的成分,而是包括了谐波成分的信号,这些多余出来的谐波成分与实际输入信号的对比,用百分比来表示就称为总谐波失真。一般来说,总谐波失真在500赫兹附近最小,所以大部分功放表明总谐波失真是用500赫兹信号做测试,但有些更严格的厂家也提供20-20000赫兹范围内的总谐波失真数据。总谐波失真在1%以下,一般耳朵分辨不出来,超过10%就可以明显听出失真的成分。这个总谐波失真的数值越小,音色就更加纯净。一般产品的总谐波失真都小于1%@500Hz,但这个数值越小,表明产品的品质越高。

    所以在进行测试前我们就要先有个概念
    对于信号源输出的1k的正弦信号,总谐波失真的近似值越小,表示程序更精准,基本在1.0%以内。
    对于信号源输出的1k的方波信号,总谐波失真的近似值大约是0.3887(前5次谐波计算的近似值)

    失真度测试仪测量的结果:

    正弦波

    在这里插入图片描述

    方波

    在这里插入图片描述
    这里解释下为啥方波测量出来的是44.26%,这里先给出方波的傅里叶变换式子
    在这里插入图片描述
    因为对于近似值来说方波取前五次傅里叶变换的值就是0.3887
    在这里插入图片描述
    计算到前7次时候
    在这里插入图片描述

    MTLAB仿真测试

    所以根据已有的知识,进行下MATLAB仿真测试

    clf;fs=10240; %采样频率
    Ndata=1024; %数据长度
    N=1024; %FFT的数据长度
    n=0:Ndata-1;
    t=n/fs;   %数据对应的时间序列
    x=0.5*sin(2*pi*1000*t)+1;   %时间域信号
    
    %subplot(2,2,4),plot(t,x);
    subplot(2,2,2),plot(t,x,'.--');
    y=fft(x,N);   %信号的Fourier变换
    mag=abs(y);    %求取振幅
    f=(0:N-1)*fs/N; %真实频率
    subplot(2,2,1),plot(f(1:N/2),mag(1:N/2)*2/N); %绘出Nyquist频率之前的振幅
    xlabel('频率/Hz');ylabel('振幅');
    title('Ndata=10240 Nfft=1024');grid on;
    

    在这里插入图片描述
    这里仿真显示的频谱图和我们的代码模拟给出的输入信号是相同的所以大致可以按照这个傅里叶变换的标准进行编写代码。之所以这里画出采样的波形图是因为后面我们程序要画波形图,所以这里就测试了下。理想波形的总谐波失真计算没有意义所以就不进行计算。

    STM32测试程序:

    FFT.C

    这里的FFT也是找到的别人写好的程序,所以就不做详细讲解了(能力有限)

    #include "math.h"
    #include "fft.h"
    //精度0.0001弧度
    //复数的交换 
    void conjugate_complex(int n,complex in[],complex out[])
    {
      int i = 0;
      for(i=0;i<n;i++)
      {
        out[i].imag = -in[i].imag;
        out[i].real = in[i].real;
      }	
    }
    //求所有复数的模
    void c_abs(complex f[],float out[],int n)
    {
      int i = 0;
      float t;
      for(i=0;i<n;i++)
      {
        t = f[i].real * f[i].real + f[i].imag * f[i].imag;
        out[i] = sqrt(t);
      }	
    }
     
    //求复数的和 
    void c_plus(complex a,complex b,complex *c)
    {
      c->real = a.real + b.real;
      c->imag = a.imag + b.imag;
    }
    //求复数的差  
    void c_sub(complex a,complex b,complex *c)
    {
      c->real = a.real - b.real;
      c->imag = a.imag - b.imag;	
    }
    //求复数的积
    void c_mul(complex a,complex b,complex *c)
    {
      c->real = a.real * b.real - a.imag * b.imag;
      c->imag = a.real * b.imag + a.imag * b.real;	
    }
    //求复数的商 
    void c_div(complex a,complex b,complex *c)
    {
      c->real = (a.real * b.real + a.imag * b.imag)/(b.real * b.real +b.imag * b.imag);
      c->imag = (a.imag * b.real - a.real * b.imag)/(b.real * b.real +b.imag * b.imag);
    }
    #define SWAP(a,b)  tempr=(a);(a)=(b);(b)=tempr
    void Wn_i(int n,int i,complex *Wn,char flag)
    {
      Wn->real = cos(2*PI*i/n);
      if(flag == 1)
      Wn->imag = -sin(2*PI*i/n);
      else if(flag == 0)
      Wn->imag = -sin(2*PI*i/n);
    }
    //傅里叶变化
    void fft(int N,complex f[])
    {
      complex t,wn;//中间变量
      int i,j,k,m,n,l,r,M;
      int la,lb,lc;
      /*----计算分解的级数M=log2(N)----*/
      for(i=N,M=1;(i=i/2)!=1;M++); 
      /*----按照倒位序重新排列原信号----*/
      for(i=1,j=N/2;i<=N-2;i++)
      {
        if(i<j)
        {
          t=f[j];
          f[j]=f[i];
          f[i]=t;
        }
        k=N/2;
        while(k<=j)
        {
          j=j-k;
          k=k/2;
        }
        j=j+k;
      }
     
      /*----FFT算法----*/
      for(m=1;m<=M;m++)
      {
        la=pow(2,m); //la=2^m代表第m级每个分组所含节点数		
        lb=la/2;    //lb代表第m级每个分组所含碟形单元数
                     //同时它也表示每个碟形单元上下节点之间的距离
        /*----碟形运算----*/
        for(l=1;l<=lb;l++)
        {
          r=(l-1)*pow(2,M-m);	
          for(n=l-1;n<N-1;n=n+la) //遍历每个分组,分组总数为N/la
          {
            lc=n+lb;  //n,lc分别代表一个碟形单元的上、下节点编号     
            Wn_i(N,r,&wn,1);//wn=Wnr
            c_mul(f[lc],wn,&t);//t = f[lc] * wn复数运算
            c_sub(f[n],t,&(f[lc]));//f[lc] = f[n] - f[lc] * Wnr
            c_plus(f[n],t,&(f[n]));//f[n] = f[n] + f[lc] * Wnr
          }
        }
      }
    }
    //傅里叶逆变换
    void ifft(int N,complex f[])
    {
      int i=0;
      conjugate_complex(N,f,f);
      fft(N,f);
      conjugate_complex(N,f,f);
      for(i=0;i<N;i++)
      {
        f[i].imag = (f[i].imag)/N;
        f[i].real = (f[i].real)/N;
      }
    }
    
    struct compx EE(struct compx b1,struct compx b2)
    {
    	struct compx b3;
    	b3.real	= b1.real*b2.real-b1.imag*b2.imag;
    	b3.imag = b1.real*b2.imag+b1.imag*b2.real;
    	return (b3);
    }
    
    void FFT(struct compx *xin,int N)
    {
    int f,m,LH,nm,i,k,j,L;
    double p , ps ;
    int le,B,ip;
    float pi;
    struct compx w,t;
    LH=N/2; 
    f=N;
    for(m=1;(f=f/2)!=1;m++){;}  /*2^m=N*/
    
    {
    for(L=m;L>=1;L--)    /*这里和时域的也有差别*/
    { 
    le=pow(2,L);
    B=le/2; /*每一级碟形运算间隔的点数*/
    pi=3.14159;
     for(j=0;j<=B-1;j++)
      {
       p=pow(2,m-L)*j;
       ps=2*pi/N*p;
       w.real=cos(ps);
       w.imag=-sin(ps);
       for(i=j;i<=N-1;i=i+le)
         {
          ip=i+B;  
          t=xin[i];
          xin[i].real=xin[i].real+xin[ip].real;
          xin[i].imag=xin[i].imag+xin[ip].imag;  
          xin[ip].real=xin[ip].real-t.real;
          xin[ip].imag=xin[ip].imag-t.imag;     
          xin[ip]=EE(xin[ip],w);
         }
      }
    }
    }
    /*变址运算*/
    
    nm=N-2;   
    j=N/2;
    for(i=1;i<=nm;i++)
    {
    if(i<j){t=xin[j];xin[j]=xin[i];xin[i]=t;}
    k=LH;
    while(j>=k){j=j-k;k=k/2;}
    j=j+k;
    }
    
    }
    
    

    FFT.H

    #ifndef __FFT_H__
    #define __FFT_H__
     
    typedef struct complex //复数类型
    {
      float real;		//实部
      float imag;		//虚部
    }complex;
    
    struct compx
    {
    	double real;
    	double imag;
    };
    
    
    #define PI 3.1415926535897932384626433832795028841971
    ///
    void conjugate_complex(int n,complex in[],complex out[]);
    void c_plus(complex a,complex b,complex *c);//复数加
    void c_mul(complex a,complex b,complex *c) ;//复数乘
    void c_sub(complex a,complex b,complex *c);	//复数减法
    void c_div(complex a,complex b,complex *c);	//复数除法
    void fft(int N,complex f[]);//傅立叶变换 输出也存在数组f中
    void ifft(int N,complex f[]); // 傅里叶逆变换
    void c_abs(complex f[],float out[],int n);//复数数组取模
     void FFT(struct compx *xin,int N);
    #endif
    

    main.c

    程序是根据网上的程序更改参考的,用的是别人自己写的FFT,把两个人写的放到了一起,大家可以根据需要自己选择如何调用,后面会更新使用官方库版本的FFT的代码版本。串口部分就使用串口1就行,如果是正点的板子程序改写是默认打开了串口1的。

    /* Includes ------------------------------------------------------------------*/
    #include "main.h"
    #include "usart.h"
    #include "fft.h"
    #include <math.h>
    /* Private typedef -----------------------------------------------------------*/
    /* Private define ------------------------------------------------------------*/
    /* Private macro -------------------------------------------------------------*/
    #define  N    1024          //采样点数
    #define  Fs   10240        //采样频率
    #define  F    10          //分辨率
    /* Private variables ---------------------------------------------------------*/
    /* Private function prototypes -----------------------------------------------*/
    /* Private functions ---------------------------------------------------------*/
    //FFT测试数据集 输入数组
    complex  FFT_256PointIn[N];
    //FFT测试数据集 输出数组
    float   FFT_256PointOut[N/2];										
    //填入数组			
    double result[N];
    struct compx s[N];
    void InitBufInArray()
    {
     unsigned short i;
     for(i=0; i<N; i++)    
    	{
           FFT_256PointIn[i].real  = 1 * sin(2*PI * i * 1000.0 / Fs) 
    		                             +1;
    		   FFT_256PointIn[i].imag = 0;
        }	
    }
     
    /******************************************************************
    函数名称:GetPowerMag()
    函数功能:计算各次谐波幅值
    参数说明:
    备  注:先将FFT_256PointIn分解成实部(X)和虚部(Y),
             然后计算幅值:(sqrt(X*X+Y*Y)*2/N
             然后计算相位:atan2(Y/X)
    *******************************************************************/
    void GetPowerMag()
    {
        unsigned short i;
    	  float  X,Y,P,Mag;
    	 	c_abs(FFT_256PointIn,FFT_256PointOut,N/2);
        for(i=0; i<N/2; i++)
        {
    			  X = FFT_256PointIn[i].real/N;    //计算实部
    			  Y = FFT_256PointIn[i].imag/N;    //计算虚部
    			  Mag = FFT_256PointOut[i]*2/N;    //计算幅值
    			  P = atan2(Y,X)*180/PI;           //计算相位
    				printf("%d      ",i);
    				printf("%d      ",F*i); 
    				printf("%f      \r\n",Mag);
    //			  printf("%f      ",P);
    //				printf("%f      ",X);
    //				printf("%f      \r\n",Y);			
        }
    }
    void dsp_g2_test()
    {
      u16 i=0;
      for(i=0;i<N;i++)
      {
        s[i].real = 32000 * sin(PI*2*i*(50.0f/Fs));
        s[i].real+= 16000 * sin(PI*2*i*(550.0f/Fs));
        s[i].real+= 9000 * sin(PI*2*i*(1150.0f/Fs));
    		s[i].real+= 6000 * sin(PI*2*i*(2100.0f/Fs));
    		s[i].real+= 4000 * sin(PI*2*i*(5000.0f/Fs));
        s[i].imag=0;
      }
      FFT(s,N);
      for(i=0;i<N/2;i++)
      {
    		if(i==0)
    			result[i] = sqrt(s[i].real * s[i].real + s[i].imag * s[i].imag)/N;
    		else
    			result[i] = sqrt(s[i].real * s[i].real + s[i].imag * s[i].imag)*2/N;
    		printf("%d      ",i);
    		printf("%d      ",10*i);
    		printf("%f      \r\n",result[i]);
        //if(result[i] > 10)
        //printf("%4d,%4d,%ld\n",i,(u16)((double)i*Fs/NPT),(u32)result[i]);
      }
    }
    /**
      * @brief  串口打印输出
      * @param  None
      * @retval None
      */
    int main(void)
    {
    	int i,t;
    	SystemInit();//系统时钟初始化
    	USART_Configuration();//串口1初始化
    	printf("这是一个FFT 测试实验\r\n");  
      InitBufInArray(); 
    	fft(N,FFT_256PointIn);
    	 
    	printf("点数   频率  幅值   实部  虚部\n"); 
    	//GetPowerMag();
    	dsp_g2_test();
    	while(1)
    	{
    		//检查接收数据完成标志位是否置位	
    		if(USART_GetFlagStatus(USART1, USART_IT_RXNE) != RESET)
    		{
    		//将接收到的数据发送出去,对USART_DR的读操作可以将USART_IT_RXNE清零。
    		printf("%c",USART_ReceiveData(USART1));
    		}
    
    	}
    }
    
    /*********************************END OF FILE**********************************/
    
    

    串口的截图结果是正确的。
    在这里插入图片描述
    免费开源,大家参考,不通过csdn骗积分了,如果有点收获希望能给个关注和点赞。
    工程链接

    在这里插入图片描述

    展开全文
  • 我手头搭建的电路经过测试发现此时的增益达到了150,并且电路的静态工作点的UCQ大约在7.2V左右,因此最大不失真输出电压峰峰值为(12-7.2)2=9.6V,但是信号上端越靠近电源则三极管的线性度越差,信号失真度越大。...

    一、信号衰减输出部分设计
    1.1增益测量时输入信号峰峰值选择
      通过计算待测的共射放大电路在1kHz频率下的增益大约在100以上,这个增益会根据不同的管子呈现出细微的不同,我手头搭建的电路经过测试发现此时的增益达到了150,并且电路的静态工作点的UCQ大约在7.2V左右,因此最大不失真输出电压峰峰值为(12-7.2)2=9.6V,但是信号上端越靠近电源则三极管的线性度越差,信号失真度越大。为了不使放大电路的输出信号失真,输入放大电路的信号应当小一点,小信号时三极管的线性度较好,但是小信号对电路的设计难度较大器件要求较高,应该寻找一个合适幅值大小的信号作为输入信号。可以先用信号发生器测试手头上搭建的放大电路在输入多大的信号下没有失真(顶部先失真),然后选择比测量出来的信号幅值小一些的信号作为输出信号即可。最终我测量得出放大电路的输入信号的峰峰值控制在20mV以下比较合适,AD9850模块输出的正弦波信号在3.3V供电下,峰峰值在1V左右(以我手头的为例,实际值可以通过交流毫伏表测量得到。),选择电阻值51k和510R作为分压得到峰峰值在10mV左右的正弦波。
    2.测量输入电阻
      输入电阻测量时不能使用上面用来测量增益时幅值那么小的信号作为输入,由于信号幅值很小,电阻和输入电阻分压之后的信号会更小,并且电阻本身的热噪声和运放的失调电压电流等,很容易对信号本身产生较大的误差,并且这种随机误差没有办法进行修正。所以需要一路幅值较大的信号专门用来测量输入电阻时输出,但是这个信号的幅值又不能太大,因为如果幅值太大造成了三极管饱和,会影响输入信号造成信号失真导致无法测量,应当控制信号幅值使得串联电阻和输入电阻的分压之后的信号不会造成三极管饱和导通。同样可以使用信号发生器进行测试,输出不同的信号幅值串联电阻之后查看放大器的输入信号是否失真。最终我选择峰峰值为100mV左右的信号来测量输入电阻Ri,由于需要测量的输入电阻范围较大,选择两个串联电阻一大一小,输入电阻大时选择串联大的电阻作为输出,输出电阻小时串联小的,判断的依据是测量的Ui2的大小,Ui2很小时说明R>>Ri应该串联小电阻,Ui2接近Ui1时说明R<<Ri应该串联大电阻。
    3.电路分析
    在这里插入图片描述
      上图为信号输出衰减部分,从上往下依次是增益为1时输出,测量输入电阻时输出,小信号增益输出(幅频特性和1kHz放大电路增益)。从左看起,AD9850输出信号由于其输出电阻较大,先经过一级电压跟随器使信号的驱动负载能力加强一点,增益为1的情况时直接通过继电器输出不需要做衰减。
    输入电阻测量情况下DDS信号先经过一个隔直耦合电容,由于DDS信号输出的不是纯交流信号,直接处理会影响后面放大检测电路,需要先进行隔直再衰减11倍,通过交流毫伏表测得衰减后的信号记为Ui1(这个Ui1需要根据实际测量写入到程序中)。两个串联电阻选择3k和20k,因为测量范围是1k-50k,选择这两个值较为合理,Ri小于10k时选择3k电阻输出,大于10k时选择20k电阻作为输出。阻值差距太大的话会导致测量误差变大。
      小信号输出同样在电压跟随器之后接一个隔直电容,再衰减101倍(衰减程序根据实际设置),由于放大电路的输入电阻较小,衰减后的信号由于不能直接输出,需要先接一级电压跟随器减小信号的输出电阻。
    隔直电容的选择
      隔直电容最好选择贴片瓷片电容(寄生电感参数影响小),根据电容的阻抗公式相同频率下电容值越大电容的阻抗越小(忽略寄生参数影响),在耐压满足条件的情况下选择一个较大的电容。
    电源去耦电容
      为了使运放稳定的工作,电源的稳定是至关重要的,在靠近运放电源引脚放置去耦电容时必要的,通常会放一个104的电容即可,但是这里为了使电源的波动更小放置了一大一小两个电容。两个电容的耐压一定要够,这里的电源是12V所以耐压一定要在16V以上,瓷片电容最佳。
    电阻选择
      为了之后校准的方便电阻的精度尽量使用1%精度的,一般的贴片电阻1%精度即可,一般温漂都是100ppm,根据题目中的精度误差要求,这么小的温漂基本不影响。然后电阻的阻值选择不能太大(比如100k、10k和10k、1k的分压效果相同,驱动能力足够的情况下应该选择小电阻进行分压。),因为电阻的阻值大了的话有热噪声产生,这个是由于电阻的制作工艺引起的。但是电阻也不能太小,太小的话比例电路中运放驱动能力会不足,选择几k数量级的电阻即可。同时电阻分压的电阻也不能太小,太小了的话电容的容抗会对分压产生较大的影响。(关于电容电阻的选材和应用可以参考图解实用电子技术丛书《电子元器件的选择与应用》——三宅和司,电子书已上传到群里)
    在这里插入图片描述
      由于信号经过衰减之后,信号的幅值很小无法使用STM32的内部ADC进行直接采集,需要先将信号进行放大再输出到内部ADC进行采集。这里选择LM358作为第一放大器,选择同相放大电路相较于反向放大电路来说输入电阻大很多,对前级电路的影响最小,两级同相比例放大电路,第一级放大3倍第二级放大11倍,总共放大33倍。由于LM358的带宽增益积为700kHz,测量幅频特性是最大信号频率可以达到200kHz,极限放大倍数也只有3倍左右,因此LM358的放大倍数最大只能设置为3倍。同理TL084的带宽增益积为4M,设置放大倍数11倍。(参考《运放参数的详细解释和分析-合集(1-25)》文档40页,已上传群里。)
      放大之后的信号经过加法器,输出信号为(Ui
    33+1.235)V,由于STM32的ADC只能测量0-3.3V的信号,因此0 < (Ui*33+1.235) < 3.3,可以得到Ui的范围,Ui的峰峰值应该小于75mV,Ri测量时100mV信号经过分压的最大值应该是 100 m V ∗ 50 50 + 20 100mV*\frac{50}{50+20} 100mV50+2050约为72mV,正好满足条件,说明取值是合适的。比例放大电路和加法电路单独的分析,较为简单这里不做详细讲述,是基本的模电知识,不懂的同学可以在群里进行交流。
    注意
      正如图中的文字叙述,当测量增益为1的情况时,DDS信号没有进行衰减直接输出,这里会造成输入到ADC的信号幅值非常大,不做保护的话很容易造成ADC损坏,需要进行简单的保护。保护方式很简单,ADC引脚上连接一个二极管(1n4148之类)到3.3V电源,在连接一个二极管到GND上即可。具体示意图如下图所示:
    在这里插入图片描述

    二、信号输入部分设计
    1.静态工作点UCQ直流电压测量
    在这里插入图片描述
      放大电路输入信号为0时,输出只有直流分量。此时闭合J5直流信号通过电阻分压之后输出到ADC采集。输出的直流电压最大为12V,但是具有2k的输出电阻,所以输入到ADC的电压最大只有 1 ∗ 12 2 + 3 + 1 = 2 V < 3.3 V \frac{1*12}{2+3+1}=2V<3.3V 2+3+1112=2V<3.3V完全在ADC的承受范围之内。记ADC测量得到的电压值为UDC,则UCQ=UDC4。
      /
    ************************************** 20/05/17更新内容 ******************************************/
      需要注意的是,测量UCQ时R38和R39会对UCQ产生影响,可以将三极管等效成一个电阻,外接了R38和R39,相当于三极管并联了电阻,整体的等效电阻会变小,因此测量的UCQ也会变小。
    2.输出电阻测量
    在这里插入图片描述
      输出电阻的测量的原理在总体分析那篇文章中已经提过了,选择一大一小两个负载电阻,输出电阻小时接小的负载电阻,输出电阻大时接大的负载电阻。判断方法同样是根据空载时的信号幅值和带载时的信号幅值来判断,U空载>>U带载则负载电阻太小,为了测量的准确性应该切换到大的负载电阻重新测量。
    3.输出信号幅值测量
      放大电路由于存在较大的输出电阻,不适合直接进行隔直分压(输出电阻也会参与分压),先经过一级电压跟随器,将前后级进行隔离,在进行隔直和分压。放大电路的整个通频带内的最大增益经过测试大约在200左右,输入信号的峰峰值为10mV,因此输出信号峰峰值为2V,按照计算其实这里可以不需要衰减,或者衰减到原来一半也可以满足。衰减幅度较大的话当增益较小时信号会被衰减的比较弱,ADC测量时误差较大。同学们可以更改电路将R43为0R(更改后确保输入到ADC的信号没有在0以下的部分),也就是不对信号进行衰减,这样当增益较小时测量误差会减小。之后的信号经过一级电压跟随器做隔离,之后经过加法器信号使信号变成Uo+1.235V。(我将R43换为0R并且调整程序中的衰减比例之后,实验发现截止频率的测量比原来衰减为 1 3 \frac{1}{3} 31更加准确。具体的衰减程度要根据实测得出,保证放大电路增益最大的时候,Uo的幅值小于1.235。)
    增益测量
      输入到放大电路的信号峰峰值(我这里实测是10.5mV)是事先知道的,增益较大时输入信号峰峰值为10mV左右,增益很小时输入信号即是DDS信号直接输出不做任何衰减,信号的峰峰值可以由交流数字毫伏表进行测量再写到程序中,需要注意的是交流数字毫伏表测量到的值是信号的有效值,程序中计算使用的都是信号的峰峰值,需要将有效值x2x1.414。由于输入信号峰峰值是已知的,因此只需要测量放大电路的输出信号峰峰值即可。
      信号频率为1k时,测量信号的大小采用均方根算法进行计算有效值(关于什么是均方根算法百度一下即可,不懂的可以群里讨论。),采用32点的均方根算法,具体的软件处理方面的以后讲软件时具体分析。题目中的将C2变为原来的两倍的故障判断时,主要影响的是放大电路的低频特性,判断思路是测量信号频率为200Hz时的信号增益,C2变为2倍之后200Hz信号的增益会相应的变大,根据这个变化判断C2是否变化为原来的两倍,这里200Hz信号大小的测量方法也采用的是均方根算法来计算。
      当信号频率大于1k的情况下,由于STM32F1的处理能力跟不上需求,这时就不能采用均方根进行计算。特别是测量放大电路的截止频率时,根据公式计算截止频率大概会达到170k,此时在用均方根算法来计算信号的大小对于STM32F1来说是不现实的。这里我想到了一种解决办法,由于STM32F103RCT6正好有ADC3并且ADC3还有相应的DMA通道,我采用的方式就是让U_1信号连接到ADC3的其中一个通道上,然后ADC3只开启一个通道让其工作在最快的转换速度下,再开启对应的DMA,开辟一个较大的缓存,缓存大小根据转换时间确保可以持续测量几个周期,然后找到测量数据中的最大值和最小值,差值即为信号的峰峰值,当然会取多个最值进行平均,减小随机误差。之后分析软件的时候还会结合程序进行讲解。
    4.峰值检波法
    在这里插入图片描述
      电路图中测量输出信号幅值的方法,除了上述的这种方式之外还提供了另一种方式,就是峰值检波法,电路如上图所示。U2D构成了一个比较器,负端电压记为Uo,由于U2A引入了深度负反馈,此时虚短作用下,Uo即是电容C18上的电压大小。当输入信号Ui>Uo时比较器输出正电压,此时电容快速充电,当电容充电至信号的峰值时,U2D不会再输出正电压对电容充电,Uo及输出电容上的电压大小,及为信号的峰值大小。信号的峰峰值就是输出电压大小的两倍,这样就将一个难以测量的高频正弦波信号转换为便于测量的直流信号。电路的三极管是用来给电容放电的,当信号频率改变时应该打开三极管将电容上的电压放掉,不然电容上的电压总是最大信号的峰值电压(虽然会因为各种漏电流,电容上的电压还是会变化)。
      虽然理论分析的很正确,但是实际总是受各种因素的影响,比赛时我采用的也是这个测量方案,但是电路使用我发现电路输出的电压大小和信号幅值关系在频率较低时线性度较好,但是频率增大到几十k时输出的直流电压发生明显的衰减,不是线性变化。现在虽然电路图上还留着这个测量方案,但是实际使用中并没有用到这个电路,最终的测量实现都是采用的上面的加法电路配合软件上的扫描法测量高频信号来实现。
      现在还留这着这个电路呢,主要是想要现在在仔细的研究一下如何将这个电路实用化,可以在一个很宽的频率中保持较好的线性度。有兴趣的同学也可以研究一下,有成果的可以留言分享或者群里讨论。(后续如果有时间的话会研究一下这个电路,如何使其在一个较宽的频域内(几百~几百k)上都有较好的效果,会在这篇博客下进行更新。)

    三、继电器驱动电路设计
    在这里插入图片描述
      继电器的驱动电路较为常见,就是将三极管作为开关器件,三极管工作在饱和状态,控制信号为高电平时三极管导通,继电器吸合。由于继电器线圈是感性负载,需要一个反向并联二极管做为续流回路。
    选择继电器做为切换开关的理由
      为什么选择继电器而不选择模拟开关做为回路切换器件主要有以下几个理由:
      1.模拟开关的导通电阻较大达到几百欧姆,并且导通电阻随温度的变化较大,测量输出电阻和输入电阻时不可忽视(即使可以校准,但是每个通道的Ron都不同,校准工作量较大。),继电器触点的导通电阻通常在1欧姆以下,可以忽略不计。
      2.虽然模拟开关的导通时间较短,但是现在的继电器的导通时间也在10ms以下,并且切换之后需要考虑到信号建立到稳定的时间,信号稳定之后再进行测量,这里的时间一般都有几十毫秒,所以选择继电器来作为切换开关,也不会明显的增加信号的测量时间。

           至此测量电路的讲解就这么多了,不懂的同学可以留言或群里讨论。这个系列的博客后续会不间断的更新完善内容,多多关注谢谢。

           PS:程序源码和硬件电路图都在之前发的这个系列博文第一篇中,大家可以在那篇博文的最下面,点击网盘链接进行下载。

    展开全文
  • 失真度/功率的问题

    2011-03-30 10:12:37
    有台GTR100的VHF机子,在30%调制度时测得的接收机失真度是1.5%,而当调制度为90%时测得的失真度是22.5%。得查看一下手册,看看GTR100失真度测试的条件! -----低频失真: £10%(90%调制度时测量),...

    有台GTR100的VHF机子,在30%调制度时测得的接收机失真度是1.5%,而当调制度为90%时测得的失真度是22.5%。得查看一下手册,看看GTR100失真度测试的条件! -----低频失真: £10%(90%调制度时测量),看来机子有问题!

    还有当测量DTR100的纯载波功率时,综测仪设置为NB:P=22W;设置为BB:P=48W。纯载波功率测量值相差太大!

    当测量GTR100的纯载波功率时,综测仪设置为NB:P=47W;设置为BB:P=48W。纯载波功率测量值几乎相等,综测仪是同一个,难道是GTR100和DTR100出来的纯载波不一样!未解?

    GTRl00/C手册内容:

    4.3.2 发射机性能

        l.  频偏:                £10´106

        2.  RF输出功率:         50W/20W载波

        3.  低频失真:            £5(1KHz调制于90)

        4.  标准输出阻抗:        50W

        5.  低频频率特性:        300~3400Hz时达到±3dB以内

        6.  邻道功率:            70dB

        7.  杂散功率:            £2.5mW

        8.  残余噪声:            90%调制载波时£45dB

        4.3.3 接收机性能

        l.  输入阻抗:            50W

        2.  灵敏度:              调制度30%,S/Nl0dB时测量£3mV fem

        3.  选择性:              6dB带宽£ ±7.5KHz60dB带宽³ ±18KHz

        4.  抗寄生干扰:          ³70dB

        5.  抗交调:              ³60dB(lmV FEM下接收到频率间隔³0.5MHz的两

                                 个交调信号时测量)

        6.  镜象抑制:            ³80dB

        7.  寄生辐射:           £2mW(57dBm)

        8.  背景噪声:           £10(输入信号lmW,调制度90%,频率IKHz时测量)

        9.  低频失真:           £10%(90%调制度时测量)

        l0. 频率特性:           300~3400Hz调制度变化范围为±3dB

        11. 低频输出电平:       主音频为+10~20dBm,扬声器为0.5W(20W),耳机

                                100mW

        12. 静噪:3~25mV fem可调

        13. AGC射频信号在1V fem下变化l0mV,对应音频变化的最大范围为3dB

     

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7970627/viewspace-691282/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/7970627/viewspace-691282/

    展开全文
  • 在野外射电频谱观察研究中对频谱测量工具的要求愈加严苛,因此设计了一种基于STM32的带有存储功能的频谱测量系统。系统通过ADF4351、环路滤波器及U盘等实现了在不同工作状态下的输出功率信号进行采集和存储,并通过...
  •  高性能的失真度测量仪必须使用高性能的陷渡器,它应能完全滤除基波而不衰减其他谐波。新式失真度测量仪产生的基波衰减或陷波深度可达100 dB甚至更大,而对谐波只产生l dB或更小的衰减。要获得这样高的性能,需要Q...
  • 图13.2-5 用晶体管特性测试仪测量三极管特性 13.3 单管基本放大电路13.3.1 共射放大电路仿真实验 放大是对模拟信号最基本的处理,图13.3-1是单管共射放大电路(NPN型三极管)的仿真电路图。 图13.3-1 单管共射...
  • 多层复合薄膜覆盖,保证色彩失真度、反光性和清晰度达到最佳状态,感应灵敏,定位精度高,有效出没区域高达90%抗磨损,寿命可长达10年,汉字显示,无需外接电脑。即可直接操作,又可用计算机控制。中文菜单式操作...
  • 2019年全国电子设计大赛D题《简易电路特性测试》(二)输入阻抗测量 测量了输入阻抗就完成了前级部分。现在来测输出阻抗。即后级电路。 一、输出阻抗是什么? 输入输出阻抗的概念大家也可以点击这篇:
  • 基于MATLAB的语音信号处理

    万次阅读 多人点赞 2018-07-15 01:21:20
    根据采样定理,当采样频率大于信号的两倍带宽时,采样过程不会丢失信息,利用理想滤波器可从采样信号中不失真地重构原始信号波形。量化是对幅值进行离散化,即将振动幅值用二进制量化电平来表示。量化电平按级数变化...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,139
精华内容 855
关键字:

失真度测量仪