单路DDS与多路DDS

不考虑频率分辨率、量化噪声,仅为验证之用

clc;clear all;close all;

%-- 生成DDS_ROM
N = 16384;
sin_rom = zeros(1,N);
cos_rom = zeros(1,N);
for m=0:N-1
    sin_rom(1,m+1) = sin(m/N*2*pi);
    cos_rom(1,m+1) = sin(m/N*2*pi);
end

%-- 单路DDS输出
FS = 5000;
f  = 1000;
freq_word  = round(f/FS*N);
phase_word = 0;
phase      = 0;
single_dds_sig = zeros(1,N);
for m=0:N-1
    if m== 0
        phase = freq_word + phase_word;
    else
        phase = freq_word + phase;
    end
    phase_addr = mod(phase,N);
    if phase_addr == 0
        phase_addr = 1;
    end
    single_dds_sig(1,m+1) = sin_rom(1,phase_addr);
end
y = abs(fft(single_dds_sig));
figure;
plot(20*log10(y/max(y)));
title('单路DDS输出');

%-- 多路DDS输出
FS  = 5000;
f   = 1000;
NUM = 16;
freq_word  = NUM*round(f/FS*N);
phase_word = linspace(0,NUM-1,NUM)*round(f/FS*N);
phase      = -linspace(1,NUM,NUM)*round(f/FS*N);

multi_dds_sig = zeros(NUM,N/NUM);
for m=1:NUM
    for k=0:N/NUM-1
        if k==0
            phase(1,m) = freq_word + phase_word(1,m);
        else
            phase(1,m) = freq_word + phase(1,m);
        end
        phase_addr = mod(phase(1,m),N);
        if phase_addr == 0
            phase_addr = 1;
        end
        multi_dds_sig(m,k+1) = sin_rom(1,phase_addr);
    end
end
multi_dds_sig_new = reshape(multi_dds_sig,1,N);
y = abs(fft(multi_dds_sig_new));
figure;
plot(20*log10(y/max(y)));
title('多路DDS输出');

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值