當前位置:編程學習大全網 - 源碼下載 - VB如何軟解碼DDS

VB如何軟解碼DDS

先貼上 matlab算法分析代碼,C代碼隨後就到。

clear;

f = [697,770,852,941,1209,1336,1477,1633]; % DTMF 信號頻率表

t_cpu = 1/8e6; % cup周期

pwm_n = 512; % PWM點數

t_dds = t_cpu*pwm_n; % DDS時鐘周期

tab_n = 32; % 正弦表點數

step = tab_n * f * t_dds; % 理論DDS地址累加器步長

step_float_bits = 8; % DDS地址累加器步長的小數位長度

step_p = fix(step * 2^step_float_bits) / 2^step_float_bits; %實際DDS地址累加器步長

f0 = 1./(tab_n./step_p .* t_dds); % 實際產生信號的頻率

err_f = abs(f0-f)./f*100; % 實際產生信號的頻率與理論頻率誤差百分比(不含數字離散導致)

max_err_f = max(err_f)

t = linspace(0,2*pi,tab_n+1);

t = t(1:tab_n);

sin_tab = fix(sin(t) * pwm_n)/pwm_n;

n = 1:60e-3/t_dds; % 60毫秒

for a = 1:8;

addr(a,:) = mod(fix(step_p(a) .* n),tab_n)+1; % sin表 地址

s(a,:) = sin_tab(addr(a,:)); % 60毫秒的時域信號

end

my_fft(1/t_dds,s(1,:)+s(5,:),1) % 頻譜分析 看效果

1

(上圖中橫坐標單位應該是“Hz”)

從圖中可以看出,合成後的兩個頻譜,離他們最近的雜散(-108dBm)差30dBm,滿足DTMF要求

  • 上一篇:CS1.6服務器如何自動踢出高PING者。我用是AMXX插件
  • 下一篇:為該公司設計合理的會計組織結構(繪制流程圖),並具體說明各崗位的職責;
  • copyright 2024編程學習大全網