2015年北邮数字信号处理软件实验报告
北邮通信原理软软件实验报告
实验八:一、实验目的假设基带信号为m(t)=sin(2000*pi*t)+2cos(1000*pi*t),载波频率为20kHz,请仿真出AM,DSB-SC、SSB信号,观察已调信号的波形和频谱。
二、实验模型基带信号m(t)可以分成两个信号的叠加,分别记为m1(t),m2(t)。
借助公式s DSB-SC=m(t)cos(2*pi*fc*t),S AM=(1+m(t))cos(2*pi*fc*t),s SSB=m(t)cos(2*pi*fc*t)+H[m(t)]sin(2*pi*fc*t)分别仿真出m1(t)和m2(t)的信号波形,然后叠加便可以得到m(t)的波形和频谱三、仿真设计设计程序时先确定采样点、采样频率,然后分别表示出m1(t)和m2(t)的表达式,然后表示出后面仿真SSB信号所需要的两个信号的希尔伯特变换表达式。
其中表示希尔伯特变换时,采用的方法是先表示出频域的形式MH1和MH2,然后再傅里叶反变换得出对应的mh1和mh2。
对应代码如下:m1=sin(2*pi*fm1*t);M1=t2f(m1,fs);MH1=-j*sign(f).*M1;mh1=real(f2t(MH1,fs));m2(t)信号做相同的处理。
处理完信号后,就利用上述的三个公式,表示出AM、DSB-SC和SSB信号s1、s2和s3和其对应傅里叶变换得到其频谱S1 、S2、S3。
为了方便实验结果的观察与对比,将这三组图处理在一张图内,利用的函数是subplot。
四、实验结果五、分析讨论由实验结果可见,AM与DSB-SC相比,频谱多了一个离散的大载波直流分量,而且DSB-SC信号波形会有相位翻转的现象出现;而DSB-SC和SSB相比,SSB信号的频谱是DSB-SC的一个边带,本实验中采用的上边带滤波。
可见实验结果与理论结果是相一致的。
六、思考题1.如何仿真VSB系统?答:将残留边带滤波器用M文件实现,然后当做函数使用,在程序中调用。
北邮-DSP数字信号处理 实验-实验报告
北京邮电大学电子工程学院电子实验中心<数字信号处理实验>实验报告班级: xxx学院: xxx实验室: xxx 审阅教师:姓名(班内序号): xxx 学号: xxx 实验时间: xxx评定成绩:目录一、常规实验 (3)实验一常用指令实验 (3)1.试验现象 (3)2.程序代码 (3)3.工作原理 (3)实验二数据储存实验 (4)1.试验现象 (4)2.程序代码 (4)3.工作原理 (4)实验三I/O实验 (5)1.试验现象 (5)2.程序代码 (5)3.工作原理 (5)实验四定时器实验 (5)1.试验现象 (5)2.程序代码 (6)3.工作原理 (9)实验五INT2中断实验 (9)1.试验现象 (9)2.程序代码 (9)3.工作原理 (13)实验六A/D转换实验 (13)1.试验现象 (13)2.程序代码 (14)3.工作原理 (18)实验七D/A转换实验 (19)1.试验现象 (19)2.程序代码 (19)3.工作原理 (37)二、算法实验 (38)实验一快速傅里叶变换(FFT)算法实验 (38)1.试验现象 (38)2.程序代码 (38)3.工作原理 (42)实验二有限冲击响应滤波器(FIR)算法实验 (42)1.试验现象 (42)2.程序代码 (42)3.工作原理 (49)实验三无限冲击响应滤波器(IIR)算法实验 (49)1.试验现象 (49)2.程序代码 (49)3.工作原理 (56)作业设计高通滤波器 (56)1.设计思路 (56)2.程序代码 (57)3.试验现象 (64)一、常规实验实验一常用指令实验1.试验现象可以观察到实验箱CPLD右上方的D3按一定频率闪烁。
2.程序代码.mmregs.global _main_main:stm #3000h,spssbx xf ;将XF置1,D3熄灭call delay ;调用延时子程序,延时rsbx xf ;将XF置0,D3点亮call delay ;调用延时子程序,b _main ;程序跳转到"_MAIN"nopnop;延时子程序delay:stm 270fh,ar3 ;将0x270f(9999)存入ar3loop1:stm 0f9h,ar4 ;将0x0f9(249)存入ar4loop2:banz loop2,*ar4- ;*ar4自减1,不为0时跳到loop2的位置banz loop1,*ar3- ;*ar3自减1,不为0时跳到loop1的位置ret ;可选择延迟的返回nopnop.end3.工作原理主程序循环执行:D3熄灭→延时→D3点亮→延时。
北京邮电大学_dsp_matlab实验报告
数字信号处理实验报告实验名称:数字信号处理实验学生姓名:班级:班内序号:1.实验要求假设信号x(n) 由下述信号组成:请选择合适的长度N 和窗函数,用DFT 分析其频谱,得到清楚的三根谱线。
2.实验代码和实验结果N = 1000; % Length of DFTn = [0:1:N-1];xn = 0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4);Xk = fft(xn,N);k=[0:1:N-1];subplot(5,1,1);stem(k,abs(Xk(1:1:N)));title('DFT x(n)');xlabel('k');axis([140,240,0,6])subplot(5,1,2);stem(k, abs(Xk(1:1:N)),'r');%画出sin(0.3npi)-cos(0.302npi-pi/4) axis([140,160,0,6]);title('sin(0.3*pi*n)-cos(0.302*pi*n) ');xlabel('k');subplot(5,1,3);stem(k, 1000*abs(Xk(1:1:N)),'g');%画出0.001*cos(0.45npi)axis([220,230,0,6]);title('cos(0.45*pi*n) ');xlabel('k');subplot(5,1,4);stem(k,0.01*abs(Xk(1:1:N)),'k');%画%sin(0.3npi)-cos(0.302npi-pi/4)axis([140,160,0,6]);title('sin(0.3*pi*n)-cos(0.302*pi*n) ');xlabel('k');subplot(5,1,5);stem(k, 10*abs(Xk(1:1:N)),'m');%画出0.001*cos(0.45npi)axis([220,230,0,6]);title('cos(0.45*pi*n) ');xlabel('k');结论:由上图及过程可知,当DFT变换长度为1000时所得到的谱线非常理想。
北邮 DSP 实验二实验报告
实验二:数字信号的 FFT 分析题目1假设信号 x(n) 由下述信号组成:()0.001*cos(0.45)sin(0.3)cos(0.302)4x n n n n ππππ=+-- 这个信号有两根主谱线 0.3pi 和 0.302pi 靠的非常近,而另一根谱线 0.45pi 的幅度很小,请选择合适的长度 N 和窗函数,用 DFT 分析其频谱,得到清楚的三根谱线。
步骤:1.编写离散傅里叶变换DFT 函数:function [Xk] = dft(xn,N)% Computes Discrete Fourier Transform Coefficients% [Xk] = dft(xn,N)% Xk = DFT coeff. array over 0 <= k <= N-1% xn = input signal% N = length of DFTn = [0:1:N-1]; % row vector for nk = [0:1:N-1]; % row vecor for kWN = exp(-j*2*pi/N); % Wn factornk = n'*k; % creates a N by N matrix of nk valuesWNnk = WN .^ nk; % DFT matrixXk = xn * WNnk; % row vector for DFT coefficients2.代码实现:n=0:1:999;x=0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-0.25*pi);stem(n,x);title('signal x(n), 0<=n<=999');xlabel('n');X=dft(x,1000);% 计算1000点DFT magX=abs(X(1:1:501));% 镜像对称,只画出一半 k=0:1:500;w=2*pi*k/1000;stem(w/pi,magX);title('DTFT Magnitude');xlabel('frequency in pi units');axis([0.29,0.31,0,500]);xlabel('frequency between 0.29pi and 0.31pi');axis([0.44,0.46,0,0.5]);xlabel('frequency between 0.44pi and 0.46pi');3.图片:4.分析:x(n)由3个正弦函数叠加而成,周期分别是40, 20, 1000。
数字信号处理实验报告
数字信号处理实验报告引言数字信号处理(Digital Signal Processing,DSP)是一门研究数字信号的获取、分析、处理和控制的学科。
在现代科技发展中,数字信号处理在通信、图像处理、音频处理等领域起着重要的作用。
本次实验旨在通过实际操作,深入了解数字信号处理的基本原理和实践技巧。
实验一:离散时间信号的生成与显示在实验开始之前,我们首先需要了解信号的生成与显示方法。
通过数字信号处理器(Digital Signal Processor,DSP)可以轻松生成和显示各种类型的离散时间信号。
实验设置如下:1. 设置采样频率为8kHz。
2. 生成一个正弦信号:频率为1kHz,振幅为1。
3. 生成一个方波信号:频率为1kHz,振幅为1。
4. 将生成的信号通过DAC(Digital-to-Analog Converter)输出到示波器上进行显示。
实验结果如下图所示:(插入示波器显示的正弦信号和方波信号的图片)实验分析:通过示波器的显示结果可以看出,正弦信号在时域上呈现周期性的波形,而方波信号则具有稳定的上下跳变。
这体现了正弦信号和方波信号在时域上的不同特征。
实验二:信号的采样和重构在数字信号处理中,信号的采样是将连续时间信号转化为离散时间信号的过程,信号的重构则是将离散时间信号还原为连续时间信号的过程。
在实际应用中,信号的采样和重构对信号处理的准确性至关重要。
实验设置如下:1. 生成一个正弦信号:频率为1kHz,振幅为1。
2. 设置采样频率为8kHz。
3. 对正弦信号进行采样,得到离散时间信号。
4. 对离散时间信号进行重构,得到连续时间信号。
5. 将重构的信号通过DAC输出到示波器上进行显示。
实验结果如下图所示:(插入示波器显示的连续时间信号和重构信号的图片)实验分析:通过示波器的显示结果可以看出,重构的信号与原信号非常接近,并且能够还原出原信号的形状和特征。
这说明信号的采样和重构方法对于信号处理的准确性有着重要影响。
数字信号处理实验报告_完整版
实验1 利用DFT 分析信号频谱一、实验目的1.加深对DFT 原理的理解。
2.应用DFT 分析信号的频谱。
3.深刻理解利用DFT 分析信号频谱的原理,分析实现过程中出现的现象及解决方法。
二、实验设备与环境 计算机、MATLAB 软件环境 三、实验基础理论1.DFT 与DTFT 的关系有限长序列 的离散时间傅里叶变换 在频率区间 的N 个等间隔分布的点 上的N 个取样值可以由下式表示:212/0()|()()01N jkn j Nk N k X e x n eX k k N πωωπ--====≤≤-∑由上式可知,序列 的N 点DFT ,实际上就是 序列的DTFT 在N 个等间隔频率点 上样本 。
2.利用DFT 求DTFT方法1:由恢复出的方法如下:由图2.1所示流程可知:101()()()N j j nkn j nN n n k X e x n eX k W e N ωωω∞∞----=-∞=-∞=⎡⎤==⎢⎥⎣⎦∑∑∑ 由上式可以得到:IDFTDTFT( )12()()()Nj k kX e X k Nωπφω==-∑ 其中为内插函数12sin(/2)()sin(/2)N j N x eN ωωφω--= 方法2:实际在MATLAB 计算中,上述插值运算不见得是最好的办法。
由于DFT 是DTFT 的取样值,其相邻两个频率样本点的间距为2π/N ,所以如果我们增加数据的长度N ,使得到的DFT 谱线就更加精细,其包络就越接近DTFT 的结果,这样就可以利用DFT 计算DTFT 。
如果没有更多的数据,可以通过补零来增加数据长度。
3.利用DFT 分析连续信号的频谱采用计算机分析连续时间信号的频谱,第一步就是把连续信号离散化,这里需要进行两个操作:一是采样,二是截断。
对于连续时间非周期信号,按采样间隔T 进行采样,阶段长度M ,那么:1()()()M j tj nT a a a n X j x t edt T x nT e ∞--Ω-Ω=-∞Ω==∑⎰对进行N 点频域采样,得到2120()|()()M jkn Na a M kn NTX j T x nT eTX k ππ--Ω==Ω==∑因此,可以将利用DFT 分析连续非周期信号频谱的步骤归纳如下: (1)确定时域采样间隔T ,得到离散序列(2)确定截取长度M ,得到M 点离散序列,这里为窗函数。
北邮 数字信号处理硬件实验实验报告
数字信号处理硬件实验实验报告学院:电子工程学院一、5416常规实验(一)实验一常用指令实验1.代码及注释2.代码实现过程首先,为堆栈分配地址,然后输出端口置为1,灯亮,延时,累加器对此累加,如此循环。
(二)实验二数据存储实验1.代码及注释2.代码实现过程首先设定辅助寄存器ar1的地址,然后将数据存储到ar1中,每次完成操作后ar1指向下一地址,重复8次后结束。
3.相关截图(1)查看内存单元,将之修改为“0x0000”(2)run后,内存单元全部变成了“0xAAAA”3)查看CPU Registers单元(三)实验三I/O实验1.代码及注释2.代码实现过程开始后,读入I/O数据,写出I/O数据,结束。
3.实验结果图拨动开关前拨动开关后(四)实验四定时器实验1.代码及注释exp04.c2.代码实现过程开始后,系统初始化,计时器初始化。
随后输出端口赋值,LED灯开始闪烁。
定时器中断,跳到C程序中断子函数,依次计数,判断是否达到设定的时间,若达到,灯亮灭状态相反,若没有,继续亮灭,并且再次判断。
直到达到设定时间后,重新计数,定时器中断,跳到C程序中断子函数,依次计数,如此反复。
3.实验结果图交替闪烁:(五)实验五INT2中断实验1.代码及注释int2.cPORT.ASMVECTORS.ASMINITIAL.ASM2. 代码实现过程开始后,系统初始化,并中断子程序,八个LED灯在S5的控制下亮灭。
3.实验结果图反复按S5键,灯亮灭变化(六)实验六A/D转换实验1.代码及注释2.代码实现过程开始后,系统初始化并中断子程序。
将采样数据存入数组,并读取出来。
3.相关截图断点处停止A/D转化后的数据波形变化频率调节幅度调节观察memory点击animate,数据变成红色(七)实验七D/A转换实验1.代码及注释DA7303.C/*;***********************************************************************;* 北京达盛科技有限公司;* 研发部;*;* ;*;*--------------------------------------------- 文件信息 --------------- ;*;* 文件名称 : DA7303.C;* 文件功能 : 该文件为测试AD7303的测试程序,CPU=TMS320VC5402LF2407;* 接口说明: CS = SPISTE(IOPC5)-- 配置成IO模式CLK = SPICLK -- 配置成SPI模式DATA = SPIMOSI -- 配置成SPI模式;*-------------------------------------------- 最新版本信息 ------------;* 文件作者 : 迟利刚;* 创建日期 : 2005/01/19;* 版本声明 : v1.0.0;*-----------------------------------------------------------------------//------------------头文件--------------------------------------/*******************************************************************/#include "lf2407.h"#include "math.h"/*******************************************************************///----------------------------------------------------------// --------------- 宏定义 ---------------------------------///----------------------------------------------------------#define UCHAR unsigned char#define UINT16 unsigned int#define UINT32 unsigned long#define TRUE 1#define FALSE 0#define pi 3.1415926#define LEN 1024//--------------- AD7303 控制字 --------------------------------// 15--------14-------13-----12-----11-----10------9-------8-----// INT/EXT---X--------LDAC---PDB---PDA-----A/B-----CR1-----CR0---// 参考电压--保留---- -B省电--A省电----0/A-1/B-//-------------------------------------------------------------//---------------------------------------------------------/* 端口定义 *///---------------------------------------------------------ioport UINT16 port8001; //定义输出io端口为0x8001;//----------------------------------------------------------/* 全局变量定义 *///---------------------------------------------------------int data_buff[LEN]; //数据缓冲UINT16 show = 0x00aa; //LED显示的数值/************************************************************************************** 所使用的函数原型 ****************************************************************************************/void cpu_init(void); //初始化CPUvoid xint1_init(void); //外部中断1初始化子程序void iopc_init(void); //初始化IOPC设置寄存器void spi_init(void); //初始化SPI设置寄存器interrupt void PHANTOM(void); //伪中断程序interrupt void int1(void); //中断1中断子程序void delay_3us(void); //3us延迟void Delay(UINT16 numbers); //长延迟//-------------------------------------------------------------------/************************************************************************************************ 函数定义 *******************************************************************************************///--------------------------------------------------------------------// 函数名称 : void cpu_init(void)// 函数说明 : 初始化CPU// 输入参数 : 无// 输出参数 : 无//--------------------------------------------------------------------void cpu_init(){asm(" nop ");asm(" nop ");asm(" nop ");asm(" setc INTM"); //禁止所有中断 ST0.9=INTMasm(" clrc SXM"); //抑制符号位扩展asm(" clrc OVM"); //累加器中结果正常溢出asm(" clrc CNF"); //配置 B0为数据储存器/*** Configure the System Control and Status registers ***/* SCSR1=0x00FD; //配置时钟锁相为4倍频CLKOUT=4*10MHZ=40MHZ,MAX CPU freq/*bit 15 0: reservedbit 14 0: CLKOUT = CPUCLKbit 13-12 00: IDLE1 selected for low-power mode when execute IDLE instructionbit 11-9 000: PLL x1 modebit 8 0: reservedbit 7 1: 1 = enable ADC module clockbit 6 1: 1 = enable SCI module clockbit 5 1: 1 = enable SPI module clockbit 4 1: 1 = enable CAN module clockbit 3 1: 1 = enable EVB module clockbit 2 1: 1 = enable EVA module clockbit 1 0: reservedbit 0 1: clear the ILLADR bit*/*SCSR2 = (*SCSR2 | 0x000B) & 0x000F;/*bit 15-7 0's: reservedbit 6 0: Input Qualifier Clocks=5 clockbit 5 0: D'ont write this bit.allows user to disable WD through the WDDIS bit in the WDCR.bit 4 0: XMIF_HI-Z, 0=normal mode, 1=Hi-Z'dbit 3 1: disable the boot ROM, enable the FLASHbit 2 no change MP/MC* bit reflects state of MP/MC* pin bit 1-0 11: 11 = SARAM mapped to prog and data*//*** Disable the watchdog timer ***/* WDCR=0x00EF; //禁止看门狗/*bits 15-8 0's: reservedbit 7 1: clear WD flagbit 6 1: disable the dogbit 5-3 101: must be written as 101bit 2-0 111: WDCLK divider = 64 WDCLK= CLKOUT/512*//*** Setup external memory interface for LF2407 ***/WSGR = 0x001F;/*bit 15-11 0's: reservedbit 10-9 00: bus visibility offbit 8-6 111: 7 wait-state for I/O spacebit 5-3 111: 7 wait-state for data spacebit 2-0 111: 7 wait state for program space*//*** Setup shared I/O pins ***/*MCRA = 0x0000; /* group A pins *//*bit 15 0: 0=IOPB7, 1=TCLKINAbit 14 0: 0=IOPB6, 1=TDIRAbit 13 0: 0=IOPB5, 1=T2PWM/T2CMPbit 12 0: 0=IOPB4, 1=T1PWM/T1CMPbit 11 0: 0=IOPB3, 1=PWM6bit 10 0: 0=IOPB2, 1=PWM5bit 9 0: 0=IOPB1, 1=PWM4bit 8 0: 0=IOPB0, 1=PWM3bit 7 0: 0=IOPA7, 1=PWM2bit 6 0: 0=IOPA6, 1=PWM1bit 5 0: 0=IOPA5, 1=CAP3bit 4 0: 0=IOPA4, 1=CAP2/QEP2bit 3 0: 0=IOPA3, 1=CAP1/QEP1bit 2 0: 0=IOPA2, 1=XINT1bit 1 0: 0=IOPA1, 1=SCIRXDbit 0 0: 0=IOPA0, 1=SCITXD*/*MCRB = 0xFE03; /* group B pins *//*bit 15 1: 0=reserved, 1=TMS2 (always write as 1) bit 14 1: 0=reserved, 1=TMS (always write as 1) bit 13 1: 0=reserved, 1=TD0 (always write as 1) bit 12 1: 0=reserved, 1=TDI (always write as 1) bit 11 1: 0=reserved, 1=TCK (always write as 1) bit 10 1: 0=reserved, 1=EMU1 (always write as 1) bit 9 1: 0=reserved, 1=EMU0 (always write as 1) bit 8 0: 0=IOPD0, 1=XINT2/ADCSOCbit 7 0: 0=IOPC7, 1=CANRXbit 6 0: 0=IOPC6, 1=CANTXbit 5 0: 0=IOPC5, 1=SPISTEbit 4 0: 0=IOPC4, 1=SPICLKbit 3 0: 0=IOPC3, 1=SPISOMIbit 2 0: 0=IOPC2, 1=SPISIMObit 1 1: 0=IOPC1, 1=BIO*bit 0 1: 0=IOPC0, 1=W/R**/*MCRC = 0x0001; /* group C pins *//*bit 15 0: reservedbit 14 0: 0=IOPF6, 1=IOPF6bit 13 0: 0=IOPF5, 1=TCLKINBbit 12 0: 0=IOPF4, 1=TDIRBbit 11 0: 0=IOPF3, 1=T4PWM/T4CMPbit 10 0: 0=IOPF2, 1=T3PWM/T3CMPbit 9 0: 0=IOPF1, 1=CAP6bit 8 0: 0=IOPF0, 1=CAP5/QEP4bit 7 0: 0=IOPE7, 1=CAP4/QEP3bit 6 0: 0=IOPE6, 1=PWM12bit 5 0: 0=IOPE5, 1=PWM11bit 4 0: 0=IOPE4, 1=PWM10bit 3 0: 0=IOPE3, 1=PWM9bit 2 0: 0=IOPE2, 1=PWM8bit 1 0: 0=IOPE1, 1=PWM7bit 0 1: 0=IOPE0, 1=CLKOUT*//*** Configure IOPA pin as an INPUT ***/*PADATDIR = *PADATDIR & 0x00FF;/*** Configure IOPB pin as an INPUT ***/*PBDATDIR = *PBDATDIR & 0x00FF;/*** Configure IOPC pin as an INPUT ***/*PCDATDIR = *PCDATDIR & 0x00FF;/*** Configure IOPD pin as an INPUT ***/*PDDATDIR = *PDDATDIR & 0xFEFF;/*** Configure IOPE pin as an INPUT ***/*PEDATDIR = *PEDATDIR & 0x00FF;/*** Configure IOPF pin as an INPUT ***/*PFDATDIR = *PFDATDIR & 0x7FFF;/*** Setup timers 1 and 2, and the PWM configuration ***/*T1CON = 0x0000; /* disable timer 1 */*T2CON = 0x0000; /* disable timer 2 */*GPTCONA = 0x0000; /* configure GPTCONA */*GPTCONB = 0x0000; /* configure GPTCONB *//*bit 15 0: reservedbit 14 0: T2STAT, read-onlybit 13 0: T1STAT, read-onlybit 12-11 00: reservedbit 10-9 00: T2TOADC, 00 = no timerX event starts ADCbit 8-7 00: T1TOADC, 00 = no timerX event starts ADCbit 6 0: TCOMPOE, 0 = Hi-z all timer compare outputs bit 5-4 00: reservedbit 3-2 00: TXPIN, 00 = forced lowbit 1-0 00: TXPIN, 00 = forced low*/* IMR=0x0000;/*bit 15-6 0: reservedbit 5 0: Level INT6 is maskedbit 4 0: Level INT5 is maskedbit 3 0: Level INT4 is maskedbit 2 0: Level INT3 is maskedbit 1 0: Level INT2 is maskedbit 0 0: Level INT1 is masked*/* IFR=0xFFFF; //清除所有中断标志,"写1清0"}//--------------------------------------------------------------------// 函数名称 : void xint1_init(void)// 函数说明 : 初始化XINT1// 输入参数 : 无// 输出参数 : 无//--------------------------------------------------------------------void xint1_init() //外部中断1初始化子程序{* IMR=0x0001; //使能int1中断 --SPI Peripheral Interrupt Vector 0005h //when SPI INT IS high-priority mode/*bit 15-6 0: reservedbit 5 0: Level INT6 is maskedbit 4 0: Level INT5 is maskedbit 3 0: Level INT4 is maskedbit 2 0: Level INT3 is maskedbit 1 0: Level INT2 is maskedbit 0 0: Level INT1 is masked*/asm(" clrc INTM"); //开总中断}//--------------------------------------------------------------------// 函数名称 : void iopc_init(void)// 函数说明 : 初始化IOPC设置寄存器// 输入参数 : 无// 输出参数 : 无//--------------------------------------------------------------------void iopc_init(){// *MCRB = *MCRB | 0x003C; // 配置SPISTE为IO,SPICLK、SPISOMI、SPISIMO为SPI口 *MCRB = *MCRB | 0x001C;/*bit 15 1: 0=reserved, 1=TMS2 (always write as 1)bit 14 1: 0=reserved, 1=TMS (always write as 1)bit 13 1: 0=reserved, 1=TD0 (always write as 1)bit 12 1: 0=reserved, 1=TDI (always write as 1)bit 11 1: 0=reserved, 1=TCK (always write as 1)bit 10 1: 0=reserved, 1=EMU1 (always write as 1)bit 9 1: 0=reserved, 1=EMU0 (always write as 1)bit 8 0: 0=IOPD0, 1=XINT2/ADCSOCbit 7 0: 0=IOPC7, 1=CANRXbit 6 0: 0=IOPC6, 1=CANTXbit 5 0: 0=IOPC5, 1=SPISTEbit 4 0: 0=IOPC4, 1=SPICLKbit 3 0: 0=IOPC3, 1=SPISOMIbit 2 0: 0=IOPC2, 1=SPISIMObit 1 1: 0=IOPC1, 1=BIO*bit 0 1: 0=IOPC0, 1=W/R**/*PCDATDIR = *PCDATDIR | 0x2020; /*** ConfigureSPISTE as an OUTPUT ***//****output high ******************//*bit 15-8 0: EnDIR 1 = output, 0 = inputbit 7-0 0: IOPEn in--1=high,0=low; out--1=high,0=low*/}//--------------------------------------------------------------------// 函数名称 : void spi_init(void)// 函数说明 : 初始化SPI设置寄存器// 输入参数 : 无// 输出参数 : 无//--------------------------------------------------------------------void spi_init(){* SPICCR = * SPICCR & 0xFF7F; //复位SPI/*bit 7 0: reset SPI*/* SPICCR = 0x004f;/*bit 15-8 0: reservedbit 7 0: reset SPIbit 6 1: Data is output on falling edge and input on rising edge bit 5-4 0: reservedbit 3-0 1: Character Length 16bit*/* SPICTL = 0x000e;/*bit 15-5 0: reservedbit 4 0: Disable RECEIVER OVERRUN Flag bitbit 3 1: SPICLK signal delayed by one half-cycle;bit 2 1: SPI configured as a master.bit 1 1: Enables transmissionbit 0 0: Disables interrupt*/* SPIBRR = 0x0003;/*bit 15-7 0: reservedbit 6-0 3: 10MHZ Baud-Rate*/* SPIPRI = 0x0000;/*bit 15-7 0: reservedbit 6 0: Interrupts are high-priority requestsbit 5-4 0: Immediate stop on suspendbit 3-0 0: Reserved.*/* SPICCR=* SPICCR | 0x0080; //启动spi工作/*bit 7 1: start SPI}//-------------------------------------------------------------------- // 函数名称 : void int1(void)// 函数说明 : 中断1的子程序// 输入参数 : 无// 输出参数 : 无//-------------------------------------------------------------------- interrupt void int1() //中断1中断子程序{UINT16 temp;temp = *PVIR;* IFR=0xFFFF; //清除所有中断标志,"写1清0"asm(" clrc INTM"); //开总中断return;}/************************************************************- 函数名称 : void Delay(int numbers)- 函数说明 : 延时- 输入参数 : numbers- 输出参数 : 无************************************************************/void Delay(UINT16 numbers){UINT16 i,j;for(i=0;i<40000;i++);for(j=0;j<numbers;j++);}/************************************************************- 函数名称 : interrupt void PHANTOM(void)- 函数说明 : 伪中断子程序- 输入参数 : 无- 输出参数 : 无*********************************************************** */interrupt void PHANTOM(void){* IFR=0xFFFF; //清除所有中断标志,"写1清0"asm(" clrc INTM"); //开总中断return;}/************************************************************* ****************** 主函数 ******************************************************************************* */void main(){UINT16 temp,i;//----------系统初始化-------------------------------asm(" nop ");cpu_init(); //初始化CPUasm(" nop ");iopc_init(); //初始化IOPE设置寄存器asm(" nop ");xint1_init(); //外部中断1初始化子程序asm(" nop ");spi_init(); //初始化SPI设置寄存器asm(" nop ");//----------产生正弦波的数据------------------------for(i=0; i<LEN;i++){data_buff[i] = 127 + (int)(127.0*sin(2*pi*i/(LEN-1)));data_buff[i] = data_buff[i] & 0x00ff;}asm(" nop ");//---------发送给AD7303-----------------------------for(;;){for(i=0; i<LEN;i++){*PCDATDIR = *PCDATDIR & 0xffdf; /*** ConfigureSPISTE as an OUTPUT ***//****output low ******************//*bit 15-8 0: EnDIR 1 = output, 0 = inputbit 7-0 0: IOPEn in--1=high,0=low; out--1=high,0=low*///----------------------------------------------------------------* SPITXBUF = data_buff[i] & 0x00ff; //发送控制字、数据给AD7303//AD7303的控制字高8位// 15--------14-------13-----12-----11-----10------9-------8-----// INT/EXT---X--------LDAC---PDB---PDA-----A/B-----CR1-----CR0---// 0 0 0 0 0 0 0 0//内部参考电压源,DAC-A、B DAC-A、B工作//----------------------------------------------------------------while((* SPISTS & 0x0040) == 0x0); //判断 SPISTS.6(SPI Interrupt Flag) //等于 1 ,说明SPITXBUF中数据发送完 //可以写入数据//等于0,不能再写入数据*PCDATDIR = *PCDATDIR | 0x0020; /*** ConfigureSPISTE as an an OUTPUT ***/ temp = *SPIRXBUF; // 读接收缓冲寄存器,清除SPI Interrupt Flagdelay_3us(); //延迟等待DA转换结束/****output high ******************/}} //----------- 等待SPI中断----------------------------------------while(1){port8001 = show;}}DA7303_54.c/*************************************************************;* 北京达盛科技有限公司;* 研发部;*;* ;*************************************************************//*;* 文件名称 : da7303_54.c;* 适用平台 : EXPIII+实验系统;* CPU类型 : DSP TMS320VC54X;* 软件环境 : CCS3.1 (5000系列);* 试验接线 : 1、实验箱的拨码开关SW2.4置OFF(54x的译码有效);54x CPU板的跳线J2的1、2短接;* (HPI 8位模式);SW1的2、6置ON,其余置OFF(HPI使能;DSP工作微处理器方式;;* CPU_CS=0);SW2全部置ON(FLASH工作在数据空间,LED灯D5的工作状态处于灭状态);;* 试验现象 : 用示波器检测D/A转换单元的2号孔接口"输出1"输出一个正弦波;;*************************************************************///------------------头文件--------------------------------------#include "DspRegDefine.h" //VC5402 寄存器定义#include "math.h"//---------------------------------------------------------------/* ****************** 宏定义 ****************************************************************************/#define UCHAR unsigned char#define UINT16 unsigned int#define UINT32 unsigned long#define TRUE 1#define FALSE 0#define pi 3.1415926#define LEN 256//--------------- AD7303 控制字 --------------------------------// 15--------14-------13-----12-----11-----10------9-------8-----// INT/EXT---X--------LDAC---PDB---PDA-----A/B-----CR1-----CR0---// 参考电压--保留---- -B省电--A省电----0/A-1/B-//-------------------------------------------------------------//---------------------------------------------------------/* 端口定义 *///---------------------------------------------------------ioport UINT16 port8001; //定义输出io端口为0x8001;//----------------------------------------------------------//----------------------------------------------------------/* 全局变量定义 *///---------------------------------------------------------int data_buff[LEN]; //数据缓冲UINT16 show = 0x00aa; //LED显示的数值/*********************************************************************** *************** 所使用的函数原型 *************************************************************************************** */void cpu_init(void); //初始化CPUvoid Delay(UINT16 numbers); //延迟extern void delay_3us(void); //3us延迟void mcbsp0_write_rdy(UINT16 out_data);//MCBSP0发送一个数据void mcbsp0_init_SPI(void);//MCBSP0设置为SPI模式void mcbsp0_close(void);//MCBSP0关闭//-------------------------------------------------------------------/************************************************************************************************ 函数定义 *******************************************************************************************///--------------------------------------------------------------------// 函数名称 : void cpu_init(void)// 函数说明 : 初始化CPU// 输入参数 : 无// 输出参数 : 无//--------------------------------------------------------------------void cpu_init(void){asm(" nop ");asm(" nop ");asm(" nop ");//-------------------------------------------------------------------//CLKMD DEFINITIONS:// PLLMUL (bit 15-12) - 0000 PLL multiplier = 0 (mult by 1)// PLLDIV (bit 11) - 0 PLL divider = 0 (div by 1)// PLLCOUNT (bit 10-3)- 11111111 PLL counter set to max// PLLONOFF (bit 2) - 1 PLL on// PLLNDIV (bit 1) - 1 Select PLL mode// PLLSTATUS (bit 1) - x PLL Status (read only)// ------------------// 0000011111111111 = 0x07ff CLKMD=1 X CLKIN//--------------------------------------------------------------------*(unsigned int*)CLKMD=0x0; //switch to DIV mode clkout= 1/2 clkinwhile(((*(unsigned int*)CLKMD)&01)!=0);*(unsigned int*)CLKMD=0x37ff; //switch to PLL X 4 mode//--------------------------------------------------------------------// ST0 DEFINITIONS:// ARP (bit 15-13) - 000 Auxiliary register pointer// TC (bit 12) - 1 Test/control flag// C (bit 11) - 1 Carry is set to 1 if the result of an addition generates a carry; it is cleared to 0 if the// result of a subtraction generates a borrow.// OVA (bit 10) - 0 Overflow flag for accumulator A// OVB (bit 9) - 0 Overflow flag for accumulator B// DP (bit 8-0) - 00000000 Data-memory page pointer// --------------------// 0001 1000 0000 0000 =0x1800 Reset value//--------------------------------------------------------------------// *(unsigned int*)ST0=0x1800;//--------------------------------------------------------------------// ST1 DEFINITIONS:// BRAF (bit 15) - 0 Block-repeat active flag// CPL (bit 14) - 1 Compiler mode CPL=0 DP;CPL=1 SP// XF (bit 13) - 1 XF status// HM (bit 12) - 0 Hold mode// INTM (bit 11) - 1 Interrupt mode INTM=0,All unmasked interrupts are enabled// Reser (bit 10) - 0 Always read as 0// OVM (bit 9) - 0 Overflow mode// SXM (bit 8) - 1 Sign-extension mode// C16 (bit 7) - 0 Dual 16-Bit/double-precision arithmetic mode// FRCT (bit 6) - 0 Fractional mode// CMPT (bit 5) - 0 Compatibility mode// ASM (bit 4-0) - 00000 Accumulator shift mode// --------------------// 0110 1001 0000 0000 =0x2900 Reset value//--------------------------------------------------------------------// *(unsigned int*)ST1=0x6900;//--------------------------------------------------------------------//IPTR DEFINITIONS?// IPTR (bit 15-7) - 001111111 Run-time Interrupt vector location = 0x3f80 (for now)// MP/~MC (bit 6) - 1 Turn off internal Instruction ROM (use RAM)// OVLY (bit 5) - 1 Turn on internal RAM// AVIS (bit 4) - 1 Address visibility on// DROM (bit 3) - 0 Data ROM of FF00~FFFF is external// CLKOFF (bit 2) - 0 Clockout enabled,only for use clkout=cpu clock// SMUL (bit 1) - 1 Saturate before multiply on MAC// SST (bit 0) - 0 Do not saturate before store// -----------------// 0011 1111 1111 0010 = 0x3ff2/*---------------------------------------------------------------------*/*(unsigned int*)PMST=0x3FF2;//---------------------------------------------------------------------// SWWSR DEFINITIONS?// XPA (bit 15) - 0 Extended program address control bit. XPA is used in conjunctionwith the program space fields// (bits 0 through 5) to select the address range for program spacewait states// I/O (bits 14-12) - 111 set to max wait states for seven// Data1 (bits 11-9) - 111 Seven Wait state for Upper data space(0x8000-0xFFFF)// Data2 (bits 8-6) - 111 Seven Wait states for Lower data space (0x0000 - 0x7FFF)// Prog1 (bits 5-3) - 111 Seven Wait state for Upper program space. (xx8000-xxFFFF)// Prog2 (bits 2-0) - 111 Seven Wait states for Program space. (xx0000-xx7FFF)// -----------------// 1 111 111 111 111 111 - 0x7fff/*--------------------------------------------------------------------*/*(unsigned int*)SWWSR=0x7fff;//--------------------------------------------------------------------//SWCR DEFINITIONS?// Reserved (bits 15-1)// SWSM (bit 0) - 1 wait-state base values are mulitplied by 2// for a maximum of 14 wait states.// --------------------------// 0000 0000 0000 0001//--------------------------------------------------------------------*(unsigned int*)SWCR=0x0001;//--------------------------------------------------------------------//BSCR DEFINITIONS?// BNKCMP (bit 15-12) - 1111 Bank compare. Determines the external memory-bank size. BNKCMP is used to maskthe four MSBs of// an address.// 1111 4k// 1110 8k// 1100 16k// 1000 32k// 0000 64k// PS-DS (bit 11) - 1 One extra cycle is inserted between consecutive data and program reads. // Reserved (bits 10-3) - 00000000// HBH (bit 2) - 0 The hpi bus holder is disabled// BH (bit 1) - 0 The data bus holder is disabled// EXIO (bit 0) - 0 The external bus interface functions as usual// ------------------------------------// 1111 1000 0000 0000//--------------------------------------------------------------------*(unsigned int*)BSCR=0xf800;//--------------------------------------------------------------------asm(" ssbx intm "); //Disable all mask interrupts//--------------------------------------------------------------------// IMR DEFINITIONS// Writing a 1 to any IMR bit position enables the corresponding interrupt (when INTM = 0)// Reserved (bits 15-14) - xx// DMAC5 (bit 13) - 0 DMA channel 5 interrupt mask bit// DMAC4 (bit 12) - 0 DMA channel 4 interrupt mask bit// BXINT1/DMAC3 (bit 11) - 0 McBSP1 transmit interrupt mask bit, or the DMA channel 3// BRINT1/DMAC2 (bit 10) - 0 McBSP1 receive interrupt mask bit, or the DMA channel 2// HPINT (bit 9) - 0 Host to ’54x interrup /mask// INT3 (bit 8) - 0 External interrupt 3 mask// TINT1/DMAC1 (bit 7) - 0 timer1 interrupt mask bit, or the DMA channel 1 interrupt mask bit// DMAC0 (bit 6) - 0 reserved, or the DMA channel 0 interrupt mask bit// BXINT0 (bit 5) - 0 McBSP0 transmit interrupt mask bit// BRINT0 (bit 4) - 0 McBSP0 receive interrupt mask bit// TINT0 (bit 3) - 0 Timer 0 interrupt mask bit// INT2 (bit 2) - 0 External interrupt 2 mask bit// INT1 (bit 1) - 0 External interrupt 1 mask bit// INT0 (bit 0) - 0 External interrupt 0 mask bit// ------------------------------// 0000 0000 0000 0000//--------------------------------------------------------------------*(unsigned int*)IMR=0x0;//--------------------------------------------------------------------// IFR DEFINITIONS// Writing a 1 to any IFR bit position clear the corresponding interrupt mask ,when corresponding interrupt occur IFR corresponding bit=1// Reserved (bits 15-14) - xx// DMAC5 (bit 13) - 1 DMA channel 5 interrupt flag bit// DMAC4 (bit 12) - 1 DMA channel 4 interrupt flag bit// BXINT1/DMAC3 (bit 11) - 1 McBSP1 transmit interrupt flag bit, or the DMA channel 3// BRINT1/DMAC2 (bit 10) - 1 McBSP1 receive interrupt flag bit, or the DMA channel 2// HPINT (bit 9) - 1 Host to ’54x interrutpflak// INT3 (bit 8) - 1 External interrupt 3 flag// TINT1/DMAC1 (bit 7) - 1 timer1 interrupt flag bit, or the DMA channel 1 interrupt mask bit// DMAC0 (bit 6) - 1 reserved, or the DMA channel 0 interrupt flag bit// BXINT0 (bit 5) - 1 McBSP0 transmit interrupt flag bit// BRINT0 (bit 4) - 1 McBSP0 receive interrupt flag bit// TINT0 (bit 3) - 1 Timer 0 interrupt flag bit// INT2 (bit 2) - 1 External interrupt 2 flag bit// INT1 (bit 1) - 1 External interrupt 1 flag bit// INT0 (bit 0) - 1 External interrupt 0 flag bit// ------------------------------// 1111 1111 1111 1111/*--------------------------------------------------------------------*/ *(unsigned int*)IFR=0xffff;//--------------------------------------------------------------------asm(" nop ");asm(" nop ");asm(" nop ");}/************************************************************- 函数名称 : void Delay(int numbers)- 函数说明 : 延时- 输入参数 : numbers- 输出参数 : 无************************************************************/void Delay(UINT16 numbers){UINT16 i,j;for(i=0;i<4000;i++)for(j=0;j<numbers;j++);}/************************************************************************** - 函数名称 : void mcbsp0_write_rdy(UINT16 out_data);- 函数说明 : MCBSP0发送一个数据- 输入参数 : data- 输出参数 : 无- 补充说明 : 内部带是否发送完成的判断************************************************************************** */void mcbsp0_write_rdy(UINT16 out_data){UINT16 j;*(unsigned int*)McBSP0_SPSA=0x0001; //McBSP0_SPSA 指向 SPCR2while ((*(unsigned int *)McBSP0_SPSD&0x0002)==0);//mask XRDY bit,XRDY = 1 Transmitter is ready for new data in DXR[1,2].for(j=0;j<20;j++); //delay*(unsigned int *)McBSP0_DXR1= out_data;}/**************************************************************************- 函数名称 : void mcbsp0_init_SPI(void);- 函数说明 : MCBSP0设置为SPI模式- 输入参数 : 无- 输出参数 : 无- 补充说明 :***************************************************************************/void mcbsp0_init_SPI(void){//--------------------------------------------------------//复位 McBSP0*(unsigned int*)McBSP0_SPSA=0x0000;//SPCR1*(unsigned int*)McBSP0_SPSD=0x0000;//设置SPCR1.0(RRST=0)*(unsigned int*)McBSP0_SPSA=0x0001;//SPCR2*(unsigned int*)McBSP0_SPSD=0x0000;//设置SPCR1.0(XRST=0)//---------------------------------------------------------//延迟Delay(0); //延迟 4000*CPU 时钟周期//等待复位稳定//--------------------------------------------------------- //配置 McBSP0为 SPI 模式*(unsigned int*)McBSP0_SPSA=0x0000;//SPCR1*(unsigned int*)McBSP0_SPSD=0x1800;//DLB (bit 15) 0 Digital loop back mode disabled//RJUST (bit 14-13) 00 Right-justify and zero-fill MSBs in DRR[1,2] //CLKSTP (bit 12-11) 11//X (bit 10-8) 000 Reserved//DXENA (bit 7) 0 data transmit delay bit.DX enabler is off//ABIS (bit 6) 0 A-bis mode is disabled//RINTM (bit 5-4) 00 RINT driven by RRDY。
北邮通信原理软件实验报告
北邮通信原理软件实验报告一、实验目的本次实验的目的是通过使用软件进行通信原理实验,探究数字通信系统的原理和性能。
二、实验内容1.利用软件计算并绘制理想低通滤波器的频率响应曲线。
2.通过软件模拟并比较维纳滤波器与理想低通滤波器的频率响应曲线。
3.仿真带通调制器和解调器在理想信道中的性能。
三、实验步骤1.理想低通滤波器的设计:(1)利用软件,设置滤波器参数,如截止频率和滤波器类型。
(2)计算并绘制理想低通滤波器的频率响应曲线。
2.维纳滤波器与理想低通滤波器的比较:(1)利用软件设置维纳滤波器参数,如截止频率和信噪比。
(2)仿真并比较维纳滤波器与理想低通滤波器的频率响应曲线。
3.带通调制器和解调器的性能仿真:(1)设置带通调制器和解调器的参数,如载波频率和调制系数。
(2)仿真并分析带通调制器和解调器的性能,如频率响应和误码率。
四、实验结果五、实验分析通过本次实验,我们对数字通信系统的原理和性能有了更深入的了解。
首先,理想低通滤波器的频率响应曲线能够更清晰地展现滤波器的特性,帮助我们更好地了解滤波器的设计和应用。
其次,维纳滤波器相对于理想低通滤波器而言,频率响应存在一定的失真,但对于噪声有一定的抑制作用。
在实际应用中,需要根据具体需求选择适合的滤波器类型。
最后,带通调制器和解调器的性能仿真结果能够帮助我们评估系统的性能,如误码率和频率响应。
通过调整调制系数和载波频率,可以使系统在一定范围内具有较好的性能。
六、实验结论通过本次实验的软件仿真,我们探究了数字通信系统的原理和性能。
实验结果显示,理想低通滤波器具有良好的频率响应特性;维纳滤波器能对噪声进行一定的抑制,但频率响应存在一定的失真;带通调制器和解调器在适当的调制系数和载波频率下能够获得较低的误码率和良好的频率响应。
总之,本次实验通过软件仿真,使我们更好地理解了通信原理中的数字通信系统及其性能分析方法,提高了我们的实践能力和理论知识水平。
数字信号处理实验报告
一、实验目的1. 理解数字信号处理的基本概念和原理。
2. 掌握离散时间信号的基本运算和变换方法。
3. 熟悉数字滤波器的设计和实现。
4. 培养实验操作能力和数据分析能力。
二、实验原理数字信号处理(Digital Signal Processing,DSP)是利用计算机对信号进行采样、量化、处理和分析的一种技术。
本实验主要涉及以下内容:1. 离散时间信号:离散时间信号是指时间上离散的信号,通常用序列表示。
2. 离散时间系统的时域分析:分析离散时间系统的时域特性,如稳定性、因果性、线性等。
3. 离散时间信号的变换:包括离散时间傅里叶变换(DTFT)、离散傅里叶变换(DFT)和快速傅里叶变换(FFT)等。
4. 数字滤波器:设计、实现和分析数字滤波器,如低通、高通、带通、带阻滤波器等。
三、实验内容1. 离散时间信号的时域运算(1)实验目的:掌握离散时间信号的时域运算方法。
(2)实验步骤:a. 使用MATLAB生成两个离散时间信号;b. 进行时域运算,如加、减、乘、除等;c. 绘制运算结果的时域波形图。
2. 离散时间信号的变换(1)实验目的:掌握离散时间信号的变换方法。
(2)实验步骤:a. 使用MATLAB生成一个离散时间信号;b. 进行DTFT、DFT和FFT变换;c. 绘制变换结果的频域波形图。
3. 数字滤波器的设计和实现(1)实验目的:掌握数字滤波器的设计和实现方法。
(2)实验步骤:a. 设计一个低通滤波器,如巴特沃斯滤波器、切比雪夫滤波器等;b. 使用MATLAB实现滤波器;c. 使用MATLAB对滤波器进行时域和频域分析。
4. 数字滤波器的应用(1)实验目的:掌握数字滤波器的应用。
(2)实验步骤:a. 采集一段语音信号;b. 使用数字滤波器对语音信号进行降噪处理;c. 比较降噪前后的语音信号,分析滤波器的效果。
四、实验结果与分析1. 离散时间信号的时域运算实验结果显示,通过MATLAB可以方便地进行离散时间信号的时域运算,并绘制出运算结果的时域波形图。
数字信号处理实验报告
数字信号处理实验报告一、实验目的本次数字信号处理实验的主要目的是通过实际操作和观察,深入理解数字信号处理的基本概念和方法,掌握数字信号的采集、处理和分析技术,并能够运用所学知识解决实际问题。
二、实验设备与环境1、计算机一台,安装有 MATLAB 软件。
2、数据采集卡。
三、实验原理1、数字信号的表示与采样数字信号是在时间和幅度上都离散的信号,可以用数字序列来表示。
在采样过程中,根据奈奎斯特采样定理,为了能够准确地恢复原始信号,采样频率必须大于信号最高频率的两倍。
2、离散傅里叶变换(DFT)DFT 是将时域离散信号变换到频域的一种方法。
通过 DFT,可以得到信号的频谱特性,从而分析信号的频率成分。
3、数字滤波器数字滤波器是对数字信号进行滤波处理的系统,分为有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器。
FIR 滤波器具有线性相位特性,而 IIR 滤波器则在性能和实现复杂度上有一定的优势。
四、实验内容与步骤1、信号的采集与生成使用数据采集卡采集一段音频信号,或者在 MATLAB 中生成一个模拟信号,如正弦波、方波等。
2、信号的采样与重构对采集或生成的信号进行采样,然后通过插值算法重构原始信号,观察采样频率对重构信号质量的影响。
3、离散傅里叶变换对采样后的信号进行DFT 变换,得到其频谱,并分析频谱的特点。
4、数字滤波器的设计与实现(1)设计一个低通 FIR 滤波器,截止频率为给定值,观察滤波前后信号的频谱变化。
(2)设计一个高通 IIR 滤波器,截止频率为给定值,比较滤波前后信号的时域和频域特性。
五、实验结果与分析1、信号的采集与生成成功采集到一段音频信号,并在MATLAB 中生成了各种模拟信号,如正弦波、方波等。
通过观察这些信号的时域波形,对不同类型信号的特点有了直观的认识。
2、信号的采样与重构当采样频率足够高时,重构的信号能够较好地恢复原始信号的形状;当采样频率低于奈奎斯特频率时,重构信号出现了失真和混叠现象。
北邮dsp实验报告
北邮dsp实验报告北邮DSP实验报告一、引言数字信号处理(Digital Signal Processing,简称DSP)是一门研究如何对数字信号进行分析、处理和合成的学科。
作为一门重要的电子信息科学与技术专业的实验课程,北邮DSP实验旨在让学生通过实践掌握DSP的基本理论和实际应用。
本实验报告将对北邮DSP实验进行详细介绍和总结。
二、实验目的北邮DSP实验的主要目的是让学生通过实际操作,深入理解数字信号处理的基本概念和方法,并掌握DSP实验的基本流程和技巧。
具体目标包括:1. 熟悉DSP实验平台的硬件结构和软件环境;2. 掌握数字信号的采样、量化和编码方法;3. 学习常见的数字滤波器设计和实现方法;4. 理解信号频谱分析和频域滤波的原理和应用;5. 实现音频信号的处理和效果增强。
三、实验内容北邮DSP实验主要包括以下内容:1. DSP实验平台的介绍:包括硬件结构和软件环境的说明,学生需要了解DSP实验平台的基本构成和使用方法。
2. 数字信号的采样与重构:学生需要通过实际操作,了解采样定理的原理和应用,以及数字信号的重构方法。
3. 数字信号的量化与编码:学生需要学习数字信号的量化误差和编码方法,并通过实验验证量化误差的影响。
4. FIR数字滤波器设计与实现:学生需要学习FIR滤波器的设计原理和方法,并通过实验实现低通、高通和带通滤波器。
5. IIR数字滤波器设计与实现:学生需要学习IIR滤波器的设计原理和方法,并通过实验实现巴特沃斯和切比雪夫滤波器。
6. 音频信号的处理与效果增强:学生需要学习音频信号的基本特性和处理方法,包括均衡器、混响器和压缩器等效果器的实现。
四、实验过程北邮DSP实验的具体过程如下:1. 实验准备:学生需要提前熟悉实验平台的硬件结构和软件环境,并准备好实验所需的音频信号和滤波器设计参数。
2. 实验操作:学生按照实验指导书的步骤进行实验操作,包括采样与重构、量化与编码、滤波器设计与实现等。
北邮《数字信号处理》Matlab实验——梳状滤波器的应用
实验题目3:梳状滤波器的应用实验目的:录制一段自己的话音,时间长度及取样频率自定;对该段声音加入一次反射、三次反射和无穷多次反射。
试验内容:1、对试验原理的说明回声可以认为是由原始声音衰减后的多个延迟叠加组成的,因此回声可以用延迟单元来生成。
x(n)表示原始声音信号,a为衰减系数,T为延迟周期,回声信号Y(n)=X(n)+a*x(n‐T)+a^2*x(n‐2T)+……+a^k*x(n‐kT)。
Z变换后的系统函数H(z)可由梳状滤波器实现。
本实验用MATLAB中的filter(b,a,x)函数可用来仿真差分方程a(1)*y(n)=b(1)*x(n)+b(2)*x(n‐1)+...+b(nb+1)*x(n‐nb)‐a(2)*y(n‐1)‐...‐a(na+1)*y(n‐na)。
2、在同一张图上,绘制原声音序列x(n)、加入一次反射后的声音序列x1(n)、加入三次反射后的声音序列x3(n)和加入无穷多次反射后的声音序列x I(n)。
[x, fs] = wavread('a.wav');% sound(x, fs);a = 0.6; T = 0.2;y1 = filter([1, zeros(1,T*fs-1), a], 1, x);% sound(y1, fs); wavwrite(y1, fs, 'echo1.wav');y2 = filter([1, zeros(1,T*fs-1), a, zeros(1,T*fs-1), a^2, zeros(1,T*fs-1), a^3], 1, x);% sound(y2, fs); wavwrite(y2, fs, 'echo2.wav');y3 = filter(1, [1, zeros(1,T*fs-1), a], x);% sound(y3, fs); wavwrite(y3, fs, 'echo3.wav');plot(y3, 'm');hold on; plot(y2, 'r');hold on; plot(y1, 'g');hold on; plot(x, 'b');其中蓝色为原声音序列x(n),粉红色为加入一次反射后的声音序列x1(n),绿色为加入三次反射后的声音序列x3(n),红色为加入无穷多次反射后的声音序列x I(n)。
数字信号处理实验报告
实验报告实验课程:数字信号处理学生姓名:张祝祥学号:20134277专业班级:自动化13082015年 5 月 22 日实验内容与要求在MATLAB下实现信号的频谱分析与滤波器设计(1)频谱分析确定实验数据(可自行选择或选用BB上“课程文档”下“DATA”下的数据),可以是语音信号,生物电信号,图像等,对该信号进行频谱分析,说明频谱分析时参数选择的依据,给出频谱分析结果。
改变参数,重新进行频谱分析,讨论参数选择对频谱分析结果的影响;(2)滤波器设计给出设计指标,分别设计IIR数字滤波器和FIR数字滤波器,绘制滤波器的幅频特性,证明所设计的滤波器满足性能指标要求。
对滤波后的信号进行频谱分析,并对结果进行说明与讨论。
实验要求:自行完成,并将实验内容整理成一份实验报告,要求有数据说明,参数与指标的选择,实验结果的分析与讨论。
数据选用说明:我选用老师所给的信号marimba.wav,它是一个双声道信号。
一信号的频谱分析1.1参数选择对所选信号进行读取操作,由读取的数据得知,采样频率fs=48000频率分辨率选择∆f=1Hz,那么最小数据记录Tpmin=1s,频率采样点数N>=48000/1=48000,因为N为2倍数,所以选择N=65536,即是进行FFT的点数。
我们由下面的工作区x的值以及原始音频信号图看到,信号为二维信号,即是双声道的音频信号,为方便分析,对它进行处理,得到单声道的信号x_left。
图1.1MATLAB工作区图1.2由对原始的信号进行频谱分析的结果,可以看出信号的幅值基本上集中在频率f=5000以内,并且峰值在f=2000Hz以内。
图1.3原始双声道音频信号分出单音频信号后的结果:分出单声道后的信号与原信号相比在信号图以及频谱分析上并没有明显变化,因此我认为之后对于双声道的处理都放在单声道上。
图1.4图1.5接下来,我们尝试改变参数,重新进行频谱分析,讨论参数选择对频谱分析结果的影响:1.首先分别选择改变作FFT的点数N,分别取N=32768、16384、8192、4096、1024、256。
北邮信息工程信号与信息处理综合实验DSP实验二报告(FFT实现)
北邮信息工程信号与信息处理综合实验DSP实验二报告(FFT实现)信息与通信工程学院信号与信息处理综合实验报告(DSP部分)班级:姓名:学号:序号:日期:信号与信息处理综合实验报告实验二 FFT实现一、实验目的进一步熟悉CCS v5的开发环境,掌握调试的要素,并理解FFT的过程。
二、程序功能1、基本功能本程序的基本要求是:将FFT结果写入SDRAM后,并读取出来。
2、拓展功能(1)其他点数的FFT;(2)FFT后再进行IFFT,验证是否与原数据一致。
三、程序基本信息(一)、程序模块描述:1、FFT程序(实现基本功能):(1)FFT部分:1?主函数(main):初始化输入序列、旋转因子、FFT点数,负责其它功能函数的调用,并完成一些基本操作。
2?void DSP_radix2(int n, short *restrict xy, const short *restrict w):完成FFT运算(基2频域抽选)。
参数说明:n是输入序列的长度,short xy是输入序列(复数),const short w为旋转因子。
3? void bitrev_index(short *index, int n):计算得到重新排序表,n 为序列长度。
4? void DSP_bitrev_cplx(int *x, short *index, int nx):根据bitrev_index计算的排序表,把FFT输出的复数序列x重新排序为自然顺序。
DSP_bitrev_cplx:(2)SDRAM配置与写入部分:主函数(main):负责其它功能的调用,执行SDRAM写入、读取和检测,并点亮对应的LED。
EMIFA_config(&MyEmifaConfig):实现对EMIFA总线的12个接口寄存器的配置。
具体配置信息在MyEmifaConfig结构体中。
第1页信号与信息处理综合实验报告 #pragmaDATA_SECTION(sdram_data,".off_ram");数据段定义,定义要写入的数据位置,需要在CMD文件中建立对应的section。
数字信号处理实验报告
数字信号处理实验报告数字信号处理实验报告一、实验目的本实验旨在通过数字信号处理的方法,对给定的信号进行滤波、频域分析和采样率转换等操作,深入理解数字信号处理的基本原理和技术。
二、实验原理数字信号处理(DSP)是一种利用计算机、数字电路或其他数字设备对信号进行各种处理的技术。
其主要内容包括采样、量化、滤波、变换分析、重建等。
其中,滤波器是数字信号处理中最重要的元件之一,它可以用来提取信号的特征,抑制噪声,增强信号的清晰度。
频域分析是指将时域信号转化为频域信号,从而更好地理解信号的频率特性。
采样率转换则是在不同采样率之间对信号进行转换,以满足不同应用的需求。
三、实验步骤1.信号采集:首先,我们使用实验室的信号采集设备对给定的信号进行采集。
采集的信号包括噪声信号、含有正弦波和方波的混合信号等。
2.数据量化:采集到的信号需要进行量化处理,即将连续的模拟信号转化为离散的数字信号。
这一步通常通过ADC(模数转换器)实现。
3.滤波处理:将量化后的数字信号输入到数字滤波器中。
我们使用不同的滤波器,如低通、高通、带通等,对信号进行滤波处理,以观察不同滤波器对信号的影响。
4.频域分析:将经过滤波处理的信号进行FFT(快速傅里叶变换)处理,将时域信号转化为频域信号,从而可以对其频率特性进行分析。
5.采样率转换:在进行上述处理后,我们还需要对信号进行采样率转换。
我们使用了不同的采样率对信号进行转换,并观察采样率对信号处理结果的影响。
四、实验结果及分析1.滤波处理:经过不同类型滤波器处理后,我们发现低通滤波器可以有效抑制噪声,高通滤波器可以突出高频信号的特征,带通滤波器则可以提取特定频率范围的信号。
这表明不同类型的滤波器在处理不同类型的信号时具有不同的效果。
2.频域分析:通过FFT处理,我们将时域信号转化为频域信号。
在频域分析中,我们可以更清楚地看到信号的频率特性。
例如,对于噪声信号,我们可以看到其频率分布较为均匀;对于含有正弦波和方波的混合信号,我们可以看到其包含了不同频率的分量。
北邮dsp软件实验报告
Matlab仿真实验实验报告学院:电子工程学院专业:电子信息科学与技术班级:学号:姓名:时间:2015年12月23日实验一:数字信号的FFT分析1.实验目的通过本次试验,应该掌握:(a)用傅里叶变换进行信号分析时基本参数的选择(b)经过离散时间傅里叶变换和有限长度离散傅里叶变换后信号频谱上的区别,前者DTFT时间域是离散信号,频率域还是连续的,而DFT在两个域中都是离散的。
(c)离散傅里叶变化的基本原理、特性,以及经典的快速算法(基2时间抽选法),体会快速算法的效率。
(d)获得一个高密度频谱和高分辨率频谱的概念和方法,建立频率分辨率和时间分辨率的概念,为将来进一步进行时频分析(例如小波)的学习和研究打下基础。
(e)建立DFT从整体上可看成是由窄带相邻滤波器组成的滤波器组的概念,此概念的一个典型应用时数字音频压缩中的分析滤波器,例如DVD AC3和MPEG Audio。
2.实验内容、要求及结果。
(1)离散信号的频谱分析:设信号x(n)=0.001*cos(0.45nπ)+sin(0.3nπ)-cos(0.302nπ-π)4此信号的0.3π和0.302π两根谱线相距很近,谱线0.45π的幅度很小,请选择合适的序列长度N和窗函数,用DFT分析其频谱,要求得到清楚的三根谱线。
【实验代码】:k=2000;n=[1:1:k];x=0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4);subplot(2,1,1);stem(n,x,'.');title(‘时域序列');xlabel('n');ylabel('x(n)');xk=fft(x,k);w=2*pi/k*[0:1:k-1];subplot(2,1,2);stem(w/pi,abs(xk));axis([0 0.5 0 2]);title('1000点DFT');xlabel('数字频率');ylabel('|xk(k)|');【实验结果图】:(2)DTMF信号频谱分析用计算机声卡采集一段通信系统中电话双音多频(DTMF)拨号数字0~9的数据,采用快速傅里叶变换(FFT)分析这10个号码DTMF拨号时的频谱。
北航数字信号处理实验报告
实验名称幅度调制和解调实验科目数字信号与处理院系名称专业名称学号学生姓名年月日实验三:幅度调制和解调一、实验目的了解几种基本的调制解调原理,掌握用数字信号处理的方法实现模拟电路中信号的调制与解调的方法。
通过理论推导得出相应结论,再利用Matlab作为编程工具进行计算机验证实现,从而加深理解,建立概念。
二、实验内容1.利用Matlab实现信号的调制,过调制,欠调制等状态。
2.用高频正弦信号分别实现对(1)低频周期方波信号,(2)低频正弦信号(3)低频周期三角波信号的调制,观察调制后频率分布状态,实现抑制载波的幅度调制。
3.设计实验,实现含有载波的幅度调制。
观察调制和解调的结果,与抑制载波的幅度调制有何不同。
4.设计实验,观察待调制波信号幅度变化对调幅系数的影响。
5.模拟峰值检测(包络检波)电路中的二极管的功能。
6.了解峰值检波(包络检波)的原理,并编程实现。
7.了解同步检波的原理,并编程实现。
三、实验原理1.幅度调制用一个信号(称为调制信号)去控制另一个信号(称为载波信号),让后者的某一特征参数如幅值、频率、相位,按前者变化的过程,就叫调制。
调制的作用是把消息置入消息载体,便于传输或处理。
调制是各种通信系统的重要基础,也广泛用于广播、电视、雷达、测量仪等电子设备。
在通信系统中为了适应不同的信道情况(如数字信道或模拟信道、单路信道或多路信道等),常常要在发信端对原始信号进行调制,得到便于信道传输的信号,然后在收信端完成调制的逆过程──解调,还原出原始信号。
用来传送消息的信号叫作载波或受调信号,代表所欲传送消息的信号叫作调制信号,调制后的信号叫作已调信号。
用调制信号控制载波的某些参数,使之随调制信号而变化,就可实现调制。
受调信号可以是正弦波或脉冲波,所欲传送的消息可以是话音、图像或其他物理量,也可以是数据、电报和编码等信号。
前者是模拟信号,后者是数字信号。
调制是一种非线性过程。
载波被调制后产生新的频率分量,通常它们分布在载频f C的两边,占有一定的频带,分别叫做上边带和下边带。
北邮 DSP 实验一
6.1
使用printf语句输出 。
6.2
首先初始化板子初始函数以及LED及DIP,然后设置while循环,在循环之中读取CPLD寄存器的八比特数值。若检测到数值为0XE0,即表示只有DIP0按下,则设置CPLD寄存器八比特数值为0XEF,即表示四盏灯全亮,延迟一段时间之后,设置CPLD寄存器八比特数值为0XE0,即表示四盏灯全灭,并延迟相同时间;否则设置CPLD寄存器八比特数值为0XE0,即表示四盏灯全灭。
3)跑马灯顺序亮灭
只按下DIP1并如上图所示设置断点,单步运行后查看寄存器的值,低八位的值为D1,与所赋的值相同,此时第一盏灯亮,如下图所示:
4)跑马灯加速亮灭
同时按下DIP1及DIP2并如上图所示设置断点,单步运行后查看寄存器的值,低八位的值为90,与所赋的值相同,此时四盏灯全灭,如下图所示:
九.
十.心得体会
总体来说第一次DSP实验比较简单,主要是学习DSP芯片的基本知识,熟悉DSK开发板以及Code Composer Studio v5集成开发环境,掌握利用CPLD的USER_REG寄存器配置LED和DIP开关的方法,了解程序优化的原理和基本操作。感觉编程能力方面要求不高,在原来的编程基础上需要掌握DSK6416相关函数、LED相关函数和4DIP开关相关函数的使用就可以。除了在熟悉软件和开发板上遇到了一些问题以外,实验的其他方面进行得非常顺利,在基本功能实现后我们很快就完成了其他扩展功能,比如实现了LED全亮全灭,跑马灯及变速等功能。另外根据实验课件教程,我们进行了多次的断点调试,使用软件更加熟练,为之后的实验做充足的准备。
DSK6416_waitusec(delay1);
}
else
{
DSK6416_rset(DSK6416_USER_REG,0XE0);
北邮DSP数字信号处理硬件实验报告
一、常用指令实验一、实验目的熟悉DSP开发系统的连接,了解DSP开发系统的组成,结构和应用系统构成;熟悉常用C54X系列指令的用法。
二、实验设备计算机,CCS 3.3版软件,DSP仿真器,EXPIII+试验箱。
三、实验步骤与内容进行DSP实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如下所示:观察实验现象实验结果:可见XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF 灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁;四、名词解释及相关学习(1)、通用 I/O 引脚每一种C54x 芯片都有两个通用I/O 引脚,BIO 和XF。
BIO 是用来监测外部设备状态的输入引脚。
在对时间要求很严格的循环不能被外部中断所打断的时候,可以用BIO 脚来代替中断与外设相连。
根据BIO 输入的状态来执行一个转移。
XF 用于发信号给外部设备,通过软件进行控制。
(2)STM #1K,MMR [1.MMR=#1K 2.mmr(MMR) =#1K] 累加器的低端存放到存储器映射寄存器中(3)16 位直接寻址方式主要应用于程序的调用(CALL pmad)、跳转指令(GOTO pmad)和块重复指令((d)blockrepeat)中1)pmad 指的是16 位程序计数器PC 的内容,它代表的是程序存储空间的地址(program memoryaddress);2)CALL 指令和GOTO 指令包括无条件的CALL 和GOTO 与有条件的CALL 和GOTO。
(4)BANZ[D] pmad AR(ARP)不为0 时转移,可选择延迟。
(5)AR3 辅助寄存器3 ;AR4 辅助寄存器4五、实验代码及注释二、数据存储实验一、实验目的:掌握TMS320C54的程序空间的分配,掌握TMS320C54的数据空间的分配,熟悉其数据空间的指令二、实验设备计算机,CCS3.3,DSP仿真器,EXPIII+试验箱三、实验步骤与内容本实验指导书是以TMS32OVC5410为例,介绍相关的内部和外部内存资源。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字信号处理软件实验MATLAB 仿真2015年12月16日实验一:数字信号的 FFT 分析● 实验目的通过本次实验,应该掌握:(a) 用傅立叶变换进行信号分析时基本参数的选择。
(b) 经过离散时间傅立叶变换(DTFT )和有限长度离散傅立叶变换(DFT )后信号频谱上的区别,前者 DTFT 时间域是离散信号,频率域还是连续的,而 DFT 在两个域中都是离散的。
(c) 离散傅立叶变换的基本原理、特性,以及经典的快速算法(基2时间抽选法),体会快速算法的效率。
(d) 获得一个高密度频谱和高分辨率频谱的概念和方法,建立频率分辨率和时间分辨率的概念,为将来进一步进行时频分析(例如小波)的学习和研究打下基础。
(e) 建立 DFT 从整体上可看成是由窄带相邻滤波器组成的滤波器组的概念,此概念的一个典型应用是数字音频压缩中的分析滤波器,例如 DVD AC3 和MPEG Audio 。
● 实验内容及要求⏹ 离散信号的频谱分析设信号 此信号的0.3pi 和 0.302pi 两根谱线相距很近,谱线 0.45pi 的幅度很小,请选择合适的序列长度 N 和窗函数,用 DFT 分析其频谱,要求得到清楚的三根谱线。
⏹ DTMF 信号频谱分析用计算机声卡采用一段通信系统中电话双音多频(DTMF )拨号数字 0~9的数据,采用快速傅立叶变换(FFT )分析这10个号码DTMF 拨号时的频谱。
00010450303024().*cos(.)sin(.)cos(.)x n n n n ππππ=+--●MATLAB代码及结果⏹离散信号的频谱分析clf;close all;N=1000;n=1:1:N;x=0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4);y=fft(x,N);mag=abs(y);w=2*pi/N*[0:1:N-1];stem(w/pi,mag);axis([0.25 0.5 0 2]);xlabel('频率');ylabel('X(k)');grid on;DTMF 信号频谱分析clear;close all;column=[1209,1336,1477,1633];line=[697,770,852,941]fs=10000;N=1024;ts=1/fs;n=0:N-1;f=0:fs/N:fs/N*(N-1);key=zeros(16,N);key(1,:)=cos(2*pi*column(1)*n*ts)+cos(2*pi*line(1)*n*ts);key(2,:)=cos(2*pi*column(2)*n*ts)+cos(2*pi*line(1)*n*ts);key(3,:)=cos(2*pi*column(3)*n*ts)+cos(2*pi*line(1)*n*ts);key(4,:)=cos(2*pi*column(1)*n*ts)+cos(2*pi*line(2)*n*ts);key(5,:)=cos(2*pi*column(2)*n*ts)+cos(2*pi*line(2)*n*ts);key(6,:)=cos(2*pi*column(3)*n*ts)+cos(2*pi*line(2)*n*ts);key(7,:)=cos(2*pi*column(1)*n*ts)+cos(2*pi*line(3)*n*ts);key(8,:)=cos(2*pi*column(2)*n*ts)+cos(2*pi*line(3)*n*ts);key(9,:)=cos(2*pi*column(3)*n*ts)+cos(2*pi*line(3)*n*ts);key(10,:)=cos(2*pi*column(2)*n*ts)+cos(2*pi*line(4)*n*ts);figure (1);for i=1:5subplot(1,5,i)plot(f,abs(fft(key(i,:))));grid;endfigure (2);for i=1:5subplot(1,5,i)plot(f,abs(fft(key(i+5,:))));grid;end0-9数字故障分析和解决方法对于取样点数N难以确定。
分别尝试了N=500、N=1000、N=1500、N=2000通过查阅资料后才选定了N=1000。
在显示图像时难以确定比例,使用axis 函数来控制波形的显示比例,从而确定了比例。
实验二:DTMF 信号的编码●实验目的(a)复习和巩固IIR 数字滤波器的基本概念;(b)掌握 IIR 数字滤波器的设计方法;(c)掌握 IIR 数字滤波器的实现结构;(d)能够由滤波器的实现结构分析滤波器的性能(字长效应);(e)了解通信系统电话 DTMF 拨号的基本原理和 IIR 滤波器实现方法。
●实验内容及要求⏹把联系电话号码通过DTMF编码生成为一个.wav文件技术指标:根据 ITU Q.23 建议,DTMF 信号的技术指标是:传送/接收率为每秒 10 个号码,或每个号码 100ms。
每个号码传送过程中,信号存在时间至少 45ms,且不多于 55ms,100ms 的其余时间是静音。
在每个频率点上允许有不超过±1.5% 的频率误差。
任何超过给定频率±3.5% 的信号,均被认为是无效的,拒绝接收。
(其中关键是不同频率的正弦波的产生。
可以使用查表方式模拟产生两个不同频率的正弦波。
正弦表的制定要保证合成信号的频率误差在±1.5%以内,同时使取样点数尽量少)⏹对所生成的DTMF文件进行解码DTMF 信号解码可以采用 FFT 计算 N 点频率处的频谱值,然后估计出所拨号码。
但 FFT计算了许多不需要的值,计算量太大,而且为保证频率分辨率,FFT的点数较大,不利于实时实现。
因此,FFT 不适合于 DTMF 信号解码的应用。
由于只需要知道 8 个特定点的频谱值,因此采用一种称为 Goertzel 算法的 IIR 滤波器可以有效地提高计算效率。
其传递函数为:● MATLAB 代码及结果⏹ 把联系电话号码通过DTMF 编码生成为一个.wav 文件 x = linspace(0,0,400);n = 0:399;a1 = cos(2*pi*697/8000*n);a2 = cos(2*pi*770/8000*n);a3 = cos(2*pi*852/8000*n);a4 = cos(2*pi*941/8000*n);b1 = cos(2*pi*1209/8000*n);b2 = cos(2*pi*1336/8000*n);b3 = cos(2*pi*1477/8000*n);b4 = cos(2*pi*1633/8000*n);num_1 = a1+b1;num_2 = a1+b2;num_3 = a1+b3;num_4 = a2+b1;num_5 = a2+b2;num_6 = a2+b3;num_7 = a3+b1;num_8 = a3+b2;num_9 = a3+b3;num_0 = a4+b2;y=[num_1,x,num_3,x,num_2,x,num_6,x,num_9,x,num_5,x,num_6,x,num_3,x,num_6,x,num_3,x,num_0,x];plot(y);sound(y,8000);a='numbersound.wav'audiowrite(a,y,8000);2/1121()12cos(2/)j k N k e z H z k N z z ππ-----=-+编码时域音频文件对所生成的DTMF文件进行解码N = 205;fs = 8000;k = [18 20 22 24 31 34 38 42];[x,fs]= audioread('numbersound.wav'); pause(length(x)/fs);y = reshape(x,800,11);%800x11a = zeros(8,11);b = a;c = b;for n = 1 : Na = b;b = c;c = 2*diag(cos(2*pi*k/N))*b - a + ones(8,1)*y(n,:); endXk = c.*c + b.*b - 2*diag(cos(2*pi*(k)/N))*(c.*b)B = sort(Xk);figurefor i = 1:11subplot(2,6,i);stem(Xk(:,i));title([num2str(i),'Signal']);endfor j = 1:11Out(:,j)=find(Xk(:,j)>B(6,j));endjian = [1 2 3 11;4 5 6 12; 7 8 9 13;15 0 16 14];num = zeros(1,11);for i = 1:11num(1,i) = jian(Out(1,i),Out(2,i)-4);endnum解码结果:●故障分析和解决方法在将信号写入声音文件时,上网查得函数wavwrite完成生成音频文件,解码使用函数wavread解码,遇到算法错误提示。
经查资料得知2015版以后,不能使用wavwrite和wavread语句了,需要使用audiowrite和audioread语句。
改正后即可。
实验三:FIR数字滤波器的设计和实现●实验目的1.通过本次实验,掌握以下知识:2.FIR 数字滤波器窗口设计法的原理和设计步骤;3.Gibbs 效应发生的原因和影响;4.不同类型的窗函数对滤波效果的影响,以及窗函数和长度 N 的选择。
●实验内容及要求录制自己的一段声音,长度为 45秒,取样频率 32kHz,然后叠加一个高斯白噪声,使得信噪比为 20dB。
请采用窗口法设计一个 FIR 带通滤波器,滤除噪声提高质量。
提示:滤波器指标参考:通带边缘频率为 4kHz,阻带边缘频率为 4.5kHz,阻带衰减大于 50dB;Matlab 函数 y = awgn(x,snr,'measured') ,首先测量输入信号 x 的功率,然后对其叠加高斯白噪声;MATLAB代码及结果[x,fs]= audioread('b.wav');Fs = 32000;%取样频率为32kfigurestem(abs(fft(x)),'.');title('原信号频率');sound(x,fs);pause(length(x)/fs+0.5);y = awgn(x,20,'measured'); %添加20dB的噪声figurestem(abs(fft(y)),'.');title('加噪后频率');sound(y,fs);pause(length(x)/fs+0.5);A = 0.54;B = 0.46;C = 0;%汉明窗N = ceil(6.6*pi/(2*pi*500/Fs));t = (N-1)/2;n = 0:N-1;wn = A - B*cos(2*pi*n/N) + C*cos(2*pi*n/N);hd = sin((n-t)*(2*pi*4250/Fs))./((n-t)*pi);h = wn.*hd; %FIR冲击响应figurestem(abs(fft(h)),'.');title('滤波器的频率响应');z = filter(h,1,y);figurestem(abs(fft(z)),'.');title('滤波器后的频谱');sound(z,fs);●故障分析和解决方法在选择窗函数时,阅读课本相关章节后选定hamming窗作为滤波器窗函数。