基于DLL的5MHz 2PSK信号频率和相位稳定性分析
以下是一个可能的程序实现:
%% 信号参数
fc = 5e6; % 调制频率
fs = 100e6; % 采样率
T = 1/fc; % 周期
N = 1000; % 信号长度
%% 生成调制信号
data = randi([0,1],1,N); % 2PSK调制数据
mod_sig = exp(1j*(2*pi*fc*(0:N-1)/fs + pi*(data*2-1))); % 2PSK调制信号
%% DLL参数
tau = T/4; % 预设延迟
K = 1.5; % 增益
theta0 = 0; % 初始相位
phi_hat = 0; % 初始相位偏差
theta_hat = 0; % 初始频率偏差
theta = 2*pi*fc/fs; % 真实频率
%% DLL处理
out = zeros(1,N); % DLL输出
for n = 1:N
% 1. 信号乘法混频
x = mod_sig(n) * exp(-1j*theta0);
% 2. 积分
I = K * x * sin(phi_hat);
Q = K * x * cos(phi_hat);
% 3. 延迟
I_delayed = interp1((0:N-1)*T, [0,I(1:end-1)], (n-1)*T+tau);
Q_delayed = interp1((0:N-1)*T, [0,Q(1:end-1)], (n-1)*T+tau);
% 4. 乘法混频
y = I_delayed * sin(phi_hat) - Q_delayed * cos(phi_hat);
% 5. 累加
phi_hat = phi_hat + y;
theta_hat = theta_hat + phi_hat;
% 6. 更新频率和相位
theta0 = theta + theta_hat;
% 7. 记录DLL输出
out(n) = phi_hat;
end
%% 用带通滤波器对调制信号进行处理
[b,a] = butter(4, [4.5e6, 5.5e6]/(fs/2), 'bandpass'); % 带通滤波器
filtered_sig = filter(b,a,mod_sig);
%% 绘图比较
t = (0:N-1)/fs;
subplot(3,1,1);
plot(t, real(mod_sig), 'b', t, imag(mod_sig), 'r');
xlabel('Time (s)');
ylabel('Amplitude');
title('Modulated Signal');
legend('Real Part', 'Imaginary Part');
subplot(3,1,2);
plot(t, out);
xlabel('Time (s)');
ylabel('Phase Error');
title('DLL Output');
subplot(3,1,3);
plot(t, real(filtered_sig), 'b', t, imag(filtered_sig), 'r');
xlabel('Time (s)');
ylabel('Amplitude');
title('Filtered Modulated Signal');
legend('Real Part', 'Imaginary Part');
注意,以上代码仅供参考,可能存在错误或者不完整之处。在实际使用时,请仔细检查并根据需要进行修改。
原文地址: https://www.cveoy.top/t/topic/n9Ry 著作权归作者所有。请勿转载和采集!