【转载】使用Simulink构建一个3阶MASH调制器

分类: 信号处理 |
在Delta
无限精度的MASH调制器仿真的模块的连接方法如下图所示,因为所有模块都是数学建模,仿真精度可以达到Matlab内部设定的最高精度。

从图中可以看出,我们需要以下几个模块:
3个小数加法器:构建方法在下面详细介绍
5个单位延迟:Discrete|Unit
2个Sum:Commonly
1个常数发生器:Commonly
1个时域示波器:Sinks|Scope
1个频域示波器:Signal
1.

如图所示,一个理想的小数加法器实现的功能包括A和B两个数相加,取整作为进位位输出Cout,两数和与进位位输出相减得到小数和输出Sout。
两数相加减使用Math
2.

将整个模块连接好之后就可以进行整体仿真了,需要注意的是第一个小数加法器的构建有些不同,如图所示,需要加上一个最低位的dither信号。
实际电路是有精度限制的。我们将小数N看作是二进制数列来处理,因为加法器使用电路实现,所以有精度限制,一个16位精度的仿真模块连接图如下图所示。

从图中可以看出,我们需要以下几个模块:
1个小数译码器:输入是一个小数,输出是16位二进制数列
3个16位全加器:构建方法可以参考:http://hi.baidu.com/critever/blog/item/960225e9b0eb9f3fb80e2d99
5个单位延迟:Discrete|Unit
2个1位加法器:Commonly
2个常数发生器:Commonly
1个时域示波器:Sinks|Scope
1个频域示波器:Signal
1.
首先我们需要构建一个小数译码器。小数译码器的基本思想是将一个小数除以0.5,得到的商取整作为最高位输出,余数除以0.5的一半即0.25,得到的商取整作为第2位输出。如此反复直到得到第16位输出为止。这样我们可以先构造一个译码器单元,如图所示。

其中,Din是输入位,Cin表示除数位,因为每级的除数都要减小0.5,所以从Cin至Cout中间加入一个Gain模块(Math
到此为止我们完成了1位译码器的构建,可以创建一个名为Decoder_Cell的子系统了。

如图所示,将四个Decoder_Cell连接起来。将四个Decoder_Cell的输出经过一个Mux(Commonly

有了4位的Decoder,我们就可以重复上述方法构建一个16位的Decoder了。连接方法如图所示,注意第一个Decoder
2.
将所有的模块连接好以后,我们就可以对MASH调制器进行仿真了。需要注意的是在仿真之前要将Spectrum
将仿真时间设定的长一些,运行仿真我们就可以看到MASH调制器输出的时域波形和频谱了。

