正余弦序列发生器的 MATLAB 程序本_第1页
正余弦序列发生器的 MATLAB 程序本_第2页
正余弦序列发生器的 MATLAB 程序本_第3页
正余弦序列发生器的 MATLAB 程序本_第4页
正余弦序列发生器的 MATLAB 程序本_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——正余弦序列发生器的MATLAB程序本

讲座12正余弦序列发生器

在大量实际应用(例如,在DTMF电话通信中),需要使用正余弦序列。这里介绍怎样编制程序以产生这种序列。

在模拟电路中,假使输出端电压/电流对输入端有适合的正反馈量。则经过某种初始触发后,电路便产生等幅振荡。

用数字网络可以很简单通过软件产生各种等幅振荡波形。其中,可以用滤波法产生所希望的信号。下面介绍这种方法。

设需要产生的信号是w(n)。令数字滤波器的冲激响应h(n)?w(n)。系统输入、输出序列分别记为x(n)和

y(n)。由此可知系统函数为

H(z)?W(z)?Y(z)X(z)利用x(n)对系统提供初始触发,即:n?0时,x(n)?1,而在其后的任何瞬间,x(n)?0。所以,x(n)??(n),而?(n)的Z变换是X(z)?1。于是,上式变为Y(z)?W(z),即系统输出我们所希望的波形。

下面用这种方法产生频率为f0、采样率为fS的正弦因果序列。与f0相应的数字频率是2?f0/fS。令系统的冲激响应为h(n)?Rnsin(?0n)u(n)(12.1)故系统函数为

Rsin?0z?1H(z)?(12.2)

1?2Rcos?0z?1?R2z?2若0?R?1,则所产生的正弦序列是衰减的。R?1时,振荡是等幅的。

类似地,令系统的冲激响应为h(n)?Rncos(?0n)u(n)(12.3)相应的系统函数为

1?Rcos?0z?1H(z)?(12.4)?12?21?2Rcos?0z?Rz由此可以得到数字频率为?0的余弦因果序列。

图12.1和图12.2分别示出数字正弦发生器和数字余弦发生器的结构。图中,w0、w1和w2是便于程序设计而设定的状态变量。

1

图12.1数字正弦发生器图12.2数字余弦发生器

图12.3DTMF信号发生器

图12.3示出DTMF信号发生器。它由两个并联的正弦发生器组成。其中,ωL和ωH分别是低频组和高频组的频率。在程序控制下,可以改变二者的值。

式(12.2)和式(12.4)代表两个系统函数,都有两个复数极点,位于p?Re函数的分母分解因子,得

j?0和p?Re*?j?0处。将系统

1?2Rcos?0z?1?R2z?2?(1?pz?1)(1?p*z?1)(12.5)

222将极点p表示为p?a?jb,则a?Rcosω0,b?Rsinω0,R?a?b,故

1?2Rcos?0z

?1?R2z?2?1?2az?1?(a2?b2)z?2

2

因此,余弦和正弦系统函数可用a和b分别表示为

1?az?1H1(z)?(12.6)?122?21?2az?(a?b)zbz?1H2(z)?(12.7)?122?21?2az?(a?b)z这里,H1(z)和H2(z)分别相应于式(12.4)和式(12.2)。由以上两式得

1?az?1?jbz?11?p*z?1H1(z)?jH2(z)???122?21?2az?(a?b)z(1?pz?1)(1?p*z?1)?11?pz?1j?0n

进行Z反变换,得

h1(n)?jh2(n)?pnu(n)?Rne根据欧拉公式ejω0nu(n)

?cos(ω0n)?jsin(ω0n),得

(0n)u(n)h1(n)?Rncos(ω0n)u(n),h2(n)?Rnsinω这两个式子分别与式(12.3)和式(12.1)一致。

图12.1和图12.2的滤波器系数与极点实部a、虚部b以及模值平方R?a?b有关。在硬件实现中,这些系数必需用有限二进位来量化,而系数a?b所需要的二进位比单个系数所需要的二进位多一倍。

图12.4将正弦和余弦发生器以耦合形式组合在一起。由于滤波系数中只有a和b而没有它们的平方,所以这

种形式没有上述量化缺点。

22222R?1时,一般不能找到确切地满足a2?b2?1的量化系数a和b。这时,可使R略小于1。

图12.4耦合式正弦/余弦发生器

由于w1(n)?y1(n?1),w2(n)?y2(n?1),故耦合式发生器可以在时域和Z域用差分方程表示如下:

y1(n)?ay1(n?1)?by2(n?1)?x(n)

3

y2(n)?ay2(n?1)?by1(n?1)

Y1(z)?az?1Y1(z)?bz?1Y2(z)?X(z)Y?12(z)?azY?12(z)?bzY1(z)

解出系统函数H1(z)?Y1(z)/X(z)和H2(z)?Y2(z)/X(z)就得到式(12.6)和式(12.7)。图12.4同时产生输出y1和y2。样点处理算法如下:

以下是正、余弦序列发生器的MATLAB程序最新版本

%G078

%正、余弦序列发生器%

h_fig1=figure;

set(h_fig1,'unit','normalized','position',[0.0,0.0,1,1]);set(h_fig1,'defaultuicontrolunits','normalized');

h_text1=uicontrol(gcf,'Style','text','Position',[0.645,0.78,0.33,0.06],...'String','正、余弦序列发生器','FontName','黑体','ForegroundColor','r',...

'FontSize',26,'FontWeight','Bold','BackgroundColor',[0.7,0.9,1]);set(gcf,'color','w');h_text2=uicontrol(gcf,'Style','text','Position',[0.675,0.53,0.28,0.06],...'String','频率f=','FontName','黑体','ForegroundColor','r',...

'FontSize',16,'FontWeight','Bold','BackgroundColor',[0.7,0.9,0.7]);set(gcf,'color','w');h_pushbutton1=uicontrol(h_fig1,'Style','PushButton','Position',[0.78,0.18,0.06,0.06],...

'string','退出','BackgroundColor',[0.80.90.8],'ForegroundColor','r','FontSize',14,'FontWeight','Bold',...'callback','delete(h_fig1)');

h_slider=uicontrol(h_fig1,'style','slider','position',[0.72,0.47,0.2,0.04],'max',12,'min',2,'sliderstep',[0.1,0.1],'Value',6);h_axes0=axes('Box','on','Position',[0.0,0.0,0.9999,0.9999],'FontSize',8,'Color',[0.8,0.8,0.95])h_axes1=axes('Box','on','Position',[0.06,0.6,0.57,0.33],'FontSize',8)h_axes2=axes('Box','on','Position',[0.06,0.15,0.57,0.33],'FontSize',8)ha=get(gcf,'Children');

set(h_slider,'callback',['z=get(gcbo,''value'');','cb37(ha,z)']);%

cb37(ha,6);%未点击slider控件时,调用子程序cb37(ha,6),此时,slider的Value初始值为6%

4

%下面的子程序作为一个文件,不能与G78.m文件合二为一,这两个文件应分开存放在同一个目录里。%子程序cb37

functioncb37(ha,v)k=v;

str1=strcat('数字频率w0=0.00',strcat(num2str(k),'pi'));set(ha(6),'string',str1);%正弦序列发生器

w0=v*0.001*pi;%正弦序列的数字频率(每个周期的点数为1/0.004=250)s0=1;s1=0;s2=0;R=1;

fori=1:2000ifi==1s0=1;else

s0=s1*2*R*cos(w0)-s2*R^2;end

y(i)=s1*R*sin(w0);s2=s1;s1=s0;end

h=subplot(ha(2))

plot(0:length(y)-1,y);grid;axis([0,2000,-1,1]);

xlabel('n','FontSize',12,'FontWeight','Bold');ylabel('y(n)','FontSize',12,'FontWeight','Bold');str1=strcat(num2str(k),'pi');

str2=strcat('y(n)=sin(w*n)w=0.00',str1);title(str2,'FontSize',12,'FontWeight','Bold');str1='每个周期的点数=2pi/w:';

text(550,0.5,str1,'FontSize',14,'FontWeight','Bold')

text(1400,0.5,num2str(2/(0.001*k)),'FontSize',14,'FontWeight','Bol

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论