matlab程序估算DDS、DAC输出杂散

这几天注意到DDS输出杂散手算比较麻烦,而且ADIsinDDS又只能算到3阶。本着懒惰是第一驱动力的原则,也为了加深对DDS输出杂散的印象,就用matlab写了一个简单的程序,用于仿真估算在特定采样率下,特定输出频率下的DDS杂散计算,目的是为了在设计时可以简单地对采样频率、输出频率进行规划。

程序目前相对简单,只计算了1~5次镜像和3、5、7、9次谐波,感觉已经够用了,如果不够用后期我会继续更新。

注意,该程序旨在方便估算输出杂散频率,确定不了输出杂散功率

由于matlab2016不允许在代码里直接调用子函数,所以有两个函数打包成.m文件了。完成程序下载链接:DDS输出杂散计算程序matlab.zip

DDS输出杂散计算程序matlab.zip-电信文档类资源-CSDN下载DDS输出杂散计算程序matlab.zip更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/qq770648116/39152277

clear all;
close all
%====================================================%
%               DAC/DDS输出杂散计算
%   Likeng 2021.11.09A
%   该程序用于计算特定输出频率、采样率下DDS输出杂散的估算
%   目前默认算到9次谐波导致的杂散,且分析频率为3.5倍的采样率
%   如需修改,可以修改变量f_stop。
%   注意,该程序旨在方便估算输出杂散频率,确定不了输出杂散功率
%
%   程序需要输入以下参数
%   fc:DDS时钟频率(采样频率)
%   f_rd1:DDS输出频率(即基波)
%   Count:分析点数
%====================================================%
fc=100;%MHz DAC采样时钟频率
f_rd1=30.72;%MHz DAC输出频率
Count=1001;%分析点数
%=====================================================%
f_start=0;%起始频率
f_stop=fc*3.5;%终止频率

%基波、各次谐波计算
f_rd3=3*f_rd1;
f_rd5=5*f_rd1;
f_rd7=7*f_rd1;
f_rd9=9*f_rd1;
A_rd1=Amp(f_rd1,fc);
A_rd3=Amp(f_rd3,fc);
A_rd5=Amp(f_rd5,fc);
A_rd7=Amp(f_rd7,fc);
A_rd9=Amp(f_rd9,fc);

%各次谐波实际出现频率计算
f_rd3_real=Search_frd(f_rd3,fc);
f_rd5_real=Search_frd(f_rd5,fc);
f_rd7_real=Search_frd(f_rd7,fc);
f_rd9_real=Search_frd(f_rd9,fc);

%各次镜像计算
f_img1=fc-f_rd1;
f_img2=fc+f_rd1;
f_img3=2*fc-f_rd1;
f_img4=2*fc+f_rd1;
f_img5=3*fc-f_rd1;
A_img1=Amp(f_img1,fc);
A_img2=Amp(f_img2,fc);
A_img3=Amp(f_img3,fc);
A_img4=Amp(f_img4,fc);
A_img5=Amp(f_img5,fc);

%包络计算
f=linspace(f_start,f_stop,Count);
A1=sin(pi*f/fc);
A2=pi*f/fc;
A=abs(A1./A2);

figure;
%画包络
plot(f,A,'--',...
    [fc/2,fc/2],[0,Amp(fc/2,fc);],'--',...
    [fc*3/2,fc*3/2],[0,Amp(3*fc/2,fc)],'--',...
    [fc*5/2,fc*5/2],[0,Amp(5*fc/2,fc)],'--',...
    [fc*7/2,fc*7/2],[0,Amp(7*fc/2,fc)],'--',...
    'Color',[0 0.447 0.741]);%包络
hold on;

%画基波、各次谐波
plot([f_rd1,f_rd1],[0,A_rd1],'-^','Color',[0.635 0.078 0.184]);
plot([f_rd3,f_rd3],[0,A_rd3],'--',...
     [f_rd5,f_rd5],[0,A_rd5],'--',...
     [f_rd7,f_rd7],[0,A_rd7],'--',...
     [f_rd9,f_rd9],[0,A_rd9],'--',...
     'Color',[0.466 0.674 0.188]);
 
 %画各次镜像
 plot([f_img1,f_img1],[0,A_img1],'-^',...
     [f_img2,f_img2],[0,A_img2],'-^',...
     [f_img3,f_img3],[0,A_img3],'-^',...
     [f_img4,f_img4],[0,A_img4],'-^',...
     [f_img5,f_img5],[0,A_img5],'-^',...
     'Color',[0.635 0.078 0.184]);
 
  %画各次谐波实际位置
  plot([f_rd3_real,f_rd3_real],[0,A_rd3],'-^',...
     [f_rd5_real,f_rd5_real],[0,A_rd5],'-^',...
     [f_rd7_real,f_rd7_real],[0,A_rd7],'-^',...
     [f_rd9_real,f_rd9_real],[0,A_rd9],'-^',...
     'Color',[0.929 0.694 0.125]);
 grid on;
xlabel('频率(MHz)');
ylabel('相对幅度');
title('DAC输出杂散');
 
figure;
%画包络
plot(f,A,'--',...
    [fc/2,fc/2],[0,Amp(fc/2,fc);],'--',...
    [fc*3/2,fc*3/2],[0,Amp(3*fc/2,fc)],'--',...
    [fc*5/2,fc*5/2],[0,Amp(5*fc/2,fc)],'--',...
    [fc*7/2,fc*7/2],[0,Amp(7*fc/2,fc)],'--',...
    'Color',[0 0 0]);%包络
 hold on;
%画基波
plot([f_rd1,f_rd1],[0,A_rd1],'-^');
 hold on;
  %画各次谐波实际位置
  plot([f_rd3_real,f_rd3_real],[0,A_rd3],'-^',...
     [f_rd5_real,f_rd5_real],[0,A_rd5],'-^',...
     [f_rd7_real,f_rd7_real],[0,A_rd7],'-^',...
     [f_rd9_real,f_rd9_real],[0,A_rd9],'-^'...
     );
 axis([0 fc/2 0 1]);%调整图像查看频率
 grid on;
 xlabel('频率(MHz)');
ylabel('相对幅度');
title('DAC输出杂散(第一奈奎斯特区)');
set(gca,'Fontname','Monospaced');%防止中文乱码

本人不才,该代码仅仅与ADIsimDDS对比过几个参数,并且跟资料中的实例相验证,并没有用DDS真实地去一个个试过,代码仅供参考,如有不对之处请指出!

 

 

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值