发新帖本帖赏金 50.00元(功能说明)我要提问
返回列表
打印

算一算,为生成正弦信号的DAC选择合适的参数

[复制链接]
2764|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
AC, AD
本帖最后由 纪国圣 于 2022-2-8 18:10 编辑

在平时设计低频正弦波信号源时,一般使用如文氏桥的模拟电路或使用DAC输出的数字电路。用DAC产生正弦波具有使用方便,频率稳定的优点,一般加低通滤波就可以获得较好的正弦波。但在实际使用中,很少有资料说明一个周期的正弦波的采样率和DAC分辨率多少为合适。本帖尝试通过将DAC产生的正弦波进行傅里叶展开,通过谐波分析设置多少采样率和DAC分辨率以及滤波器阶数较为合适。
1. 对实际的DAC产生的正弦波做FFT,查看谐波分量并初步分析
我们先对 的正弦波为例做FFT。首先该正弦波由12位的DAC产生,一个周期被等分为64份:
设置做FFT的采样率为周期150*(512*64)Hz,则有
从以上频谱图可以发现一个很有意思的规律:
对于该正弦波,其具有调制信号的的频谱特性。首先在被等分的频率 的一个整数倍处具有一个相对较小值,在 处出现一个较大值。不过为何两者峰值会出现差异,有待后续分析。
由此可以这样假设,由DAC生成的正弦波可以看成是一个周期为 ,占空比无限趋近于1PWM波对 的正弦波调制而得。只要这个PWM的周期无限大,就可以无限逼近于正弦波
2.理论分析

1)函数定义
其中 表示下取整,例如 d表示DAC的分辨率;V表示DAC的参考电压;m表示正弦波的采样率。
为了后续方便分析,正弦波的范围为 ,也就是如下所示的样子:
2)函数缩放
由于函数中有取整函数,不方便直接做傅里叶展开,因此将函数做一个缩放,通过上下边界来确定我们所要求的参数。
利用以下性质 进行函数缩放:
.
可以看出,函数的谐波成分主要和 有关,随着DAC的分辨率的增加,上下边界逐步靠近函数,但可惜的是这并不能有助于分析DAC的分辨率对生成曲线的影响。这一点后续再分析。
3)傅里叶展开
,则有
其中k=123......未列出部分n谐波系数值为0
在这里可以看到各个n次谐波系数与n次谐波的频率和正弦波被等分的数量有关,同时其系数在以 为中心 处有不为零的值,且两者值并不相等:
这一点与之前的FFT频谱图中看到的现象完全相同。
验证一下:
1>系数验证
注意,在这里求谐波系数时记得在公式里再乘以
2>用系数拼出曲线
syms n;

m = 99;
T = 2*pi;

len = 1000;

k = fix((len-1)/m);

an = zeros(1,len);
bn = zeros(1,len);

an(1) = -m/pi*sin(pi/m)*sin(pi/m);
bn(1) = m/pi*sin(pi/m)*cos(pi/m);
for i = 1:1:k
   an(m*i+1) = (-1)^((m-2)*i+1)*m/((m*i+1)*pi)*sin(pi/m)*sin(pi/m);
   an(m*i-1) = (-1)^((m-2)*i)*m/((m*i-1)*pi)*sin(pi/m)*sin(pi/m);
   bn(m*i+1) = (-1)^((m-2)*i)*m/((m*i+1)*2*pi)*sin(2*pi/m);
   bn(m*i-1) = (-1)^((m-2)*i)*m/((m*i-1)*2*pi)*sin(2*pi/m);
end

% for i = 1:1:len
%     if an(i) ~= 0
%         fprintf('a%d is %f\n',num2str(i),num2str(an(i)))
%     end
%     
%     if bn(i) ~= 0
%         fprintf('b%d is %f\n',num2str(i),num2str(bn(i)))
%     end
% end

k = 1;
for t = -pi:0.01:pi
    sum = 0;
    for n = 1:1:len
        sum = sum + an(n)*cos(2*n*pi*t/T) + bn(n)*sin(2*n*pi*t/T);
    end
    y(k) = sum;
    k = k + 1;
end

plot([-pi:0.01:pi],y)
grid on;
为了得到我们想要的正弦波信号,我们只需设置一个滤波器,将其上述谐波分量滤除即可。实际的滤波器不可能将这些谐波分量清为零,同时将谐波分量清为零也无意义。
我们一般使用THD来衡量正弦波的好坏:
对于本例,只要
就能得到想要的正弦波信号。如果不要求较高的m值,使用滤波器滤除,则有
其中 即为滤波器在 处的衰减量。
4)DAC位数选择(以下部分未给出严格证明,结论有武断的成分,欢迎大家给出严格的证明)
由于我们不能从表达式中直接得出DAC分辨率对正弦波的影响,所以再次仿真查看:
可以看出DAC分辨率越高,其频谱越简洁,其中主要谐波分量越明显,同时其值也没有明显变化。所以可以推断DAC分辨率对DAC生成的正弦波的频谱没有太大的影响,不过为了得到较为干净的频谱,DAC分辨率又不能太低。
其实我们可以从另一个角度看这个问题。在做DAC生成正弦波信号时,一般是先用公式得到一张数据表,然后将表中的数字取整为DAC范围内的编码值,最后通过定时器发送给DAC生成信号。这一过程可以理解为将DAC范围内的编码值由线性规律排列“转换”为正弦规律排列。不过由于DAC范围内的编码值只能是线性规律排列,为了得到“正弦规律排列”,只能通过加大DAC分辨率,让正弦信号有给多选择区间的机会。
贴几张图让大家感受一下:
这里分为两种情况:
1>从正弦信号最密集处考虑
k=1时,DAC分辨率与等分数量的关系如下图所示:

2>从正弦信号最稀疏处考虑
k=1时,DAC分辨率与等分数量的关系如下图所示:
可以看到两种情况下的DAC分辨率不同,第二种情况下DAC分辨率要求比第一种要低很多,这是因为第二种情况不能保证正弦信号最密集点及其他区域的点不会“挤在”一个最小分辨率中。第一种情况下生成的正弦波的精度最高。实际选择DAC分辨率视实际需要而定。
3.实验验证
为了得到一个THD<-55dBc的正弦信号,设置DAC生成的正弦波被64等分,则由 得到DAC的位数为大于5,选择DAC的位数为8,初步计算得到的信号只有-37.4dBc,则需要加滤波器。计算使用2阶巴特沃斯低通滤波器,fc等于正弦信号频率,得到如下仿真结果:
得到DAC的位数为大于10,选择DAC的位数为12,初步计算得到的信号只有-37.4dBc,则需要加滤波器。计算使用2阶巴特沃斯低通滤波器,fc等于正弦信号频率,得到如下仿真结果:
如果不使用滤波器,则根据公式 k=5m999834,显然这么高的等分实际应用中是不可能的,因此滤波必不可少。




使用特权

评论回复

打赏榜单

21小跑堂 打赏了 50.00 元 2022-02-24
理由:恭喜通过原创文章审核!请多多加油哦!

评论
LED2013 2022-2-27 19:02 回复TA
挺好 

相关帖子

沙发
纪国圣|  楼主 | 2022-2-2 09:26 | 只看该作者
本帖最后由 纪国圣 于 2022-2-8 18:12 编辑

使用特权

评论回复
板凳
coody| | 2022-2-3 20:29 | 只看该作者
我用8个点,经过滤波,就可以得比较好的正弦波了,而32点以上则会得到很好的正弦波。

使用特权

评论回复
地板
纪国圣|  楼主 | 2022-2-4 10:02 | 只看该作者
补充一下:当只有k=1时:


当只有k=5时:


可见mf处的谐波对生成的信号影响最大,只要滤除mf~5mf的谐波就可以得到较完美的正弦信号。对于百Hz~千Hz的信号,取小的m值对滤波器设计的难度影响不大,但如果是极低频率的信号,选择较小的m值则谐波频率与基波频率都在极低频率处,这会增大滤波器设计的难度,只能通过增大m值,即加大谐波频率的方法降低滤波器设计的难度。

使用特权

评论回复
5
QuakeGod| | 2022-2-8 16:28 | 只看该作者
我觉得,你研究的这些东西,几十年前就已经有人研究得透透得了。

请参考声卡的 输入输出电路。

另外,你上面得出的有些个结论,是主观臆断。比如说
所以可以推断DAC分辨率对DAC生成的正弦波的频谱没有太大的影响


另外,关于采样率和分辨率,可以互相补偿和转换,请参考 Sigma-Delta DAC.

使用特权

评论回复
6
纪国圣|  楼主 | 2022-2-8 17:33 | 只看该作者
QuakeGod 发表于 2022-2-8 16:28
我觉得,你研究的这些东西,几十年前就已经有人研究得透透得了。

请参考声卡的 输入输出电路。

首先十分感谢您对本帖的批评。确实如您所指出的有些结论比如:关于“DAC分辨率对正弦波频谱没有太大影响”这个结论很武断,因为没有想到合适的建模方法而直接根据仿真结果得出这个结论确实很不合适,对此对各位读者表示歉意。因为网络上这方面资料很零散,所以才会想起写一下这篇班门弄斧的**,让大家讨论一下,结果让您和各位大佬见笑了,十分抱歉 。也希望您能介绍几篇具体的相关文档,让我能更多的了解相关知识,对此十分感谢。

使用特权

评论回复
发新帖 本帖赏金 50.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

405

帖子

5

粉丝