Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo decodificar DDS mediante software VB

Cómo decodificar DDS mediante software VB

Publique primero el código de análisis del algoritmo matlab y luego publique el código C.

clear;

f = ; % tabla de frecuencia de señal DTMF

t_cpu = 1/8e6; % período de copa

pwm_n = 512 ; % puntos PWM

t_dds = t_cpu*pwm_n; % período de reloj DDS

tab_n = 32; % puntos de tabla sinusoidal

paso = tab_n * f * t_dds ;Tamaño de paso teórico del acumulador de direcciones DDS

step_float_bits = 8; % La longitud de los decimales del tamaño de paso del acumulador de direcciones DDS

step_p = fix(step * 2^step_float_bits) / 2 ^step_float_bits; % Tamaño de paso real del acumulador de direcciones DDS

f0 = 1./(tab_n./step_p . * t_dds % Frecuencia real de la señal generada

err_f = abs( f0-f).

max_err_f = max(err_f)

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

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

n = 1:60e-3/t_dds; /p> p>

for a = 1:8;

addr(a,:) = mod(fix(step_p(a).* n),tab_n)+1; dirección

s(a,:) = sin_tab(addr(a,:)); % señal de dominio de tiempo de 60 milisegundos

end

my_fft(1/ t_dds, s(1,:)+s(5,:),1) % Análisis de espectro para ver el efecto

1

(La unidad de la abscisa en la figura anterior debe ser "Hz")

Como se puede ver en la figura, los dos espectros sintetizados tienen una diferencia de 30 dBm con respecto al estímulo más cercano (-108 dBm), que cumple con los requisitos DTMF