QPSK和时间同步的影响
在现代数字通信系统中,在存在干扰和有限信道带宽的情况下确保信息传输的高可靠性仍然是一项关键任务。 在各种无线通信标准中广泛使用的关键调制方案之一是正交相移键控(qpsk),其通过每个符号传输两位信息来确保频谱的高效使用。
本文提出了一个采用QPSK调制的通信系统的综合模型,研究了采样定时对系统抗扰度的影响。 该模型包括完整的信号传输路径:从随机数据生成和调制到加性白高斯噪声(AWGN)条件下的解调过程。
该实现的一个关键特征是研究时间同步参数(Select_index)对误码概率(BER)的影响。 发射机的升高的余弦滤波器将每个符号的采样数从1增加到8,而接收机滤波器保留这种增加的采样数。 选择器的功能是从八个可能的采样点中选择一个用于后续解调。

该模型实现了以下信号处理的关键阶段:
-生成随机整数数据并将其转换为QPSK字符
-凸起的余弦滤波阶段(每个字符8个计数)
-用给定的Eb/No比添加高斯噪声
-在保持过采样的同时对接收信号进行一致的滤波
-通过Select_index参数选择最佳采样时刻(1-8)
-Qpsk解调和误码概率的计算
现在,让我们使用模型启动函数使用初始参数运行模型,并查看BER结果。
下面的代码实现了该功能 run_model() 来管理在Engee环境中模型的启动。 功能执行:
-检查内核中已加载的模型
-如果不存在,则从扩展名的文件加载模型 .engee
-使用执行进度的输出运行模型
-执行后自动关闭模型
function run_model(name_model)
    Path = string(@__DIR__) * "/" * name_model * ".engee"
    
    if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
        model = engee.open( name_model ) # Открыть модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
    else
        model = engee.load( Path, force=true ) # Загрузить модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
        engee.close( name_model, force=true ); # Закрыть модель
    end
    return model_output
end
主要参数:
- Eb_No = 13-每位信噪比(13分贝)
- Select_index = 1-采样时刻选择索引
Eb_No = 13;
Select_index = 1;
run_model("QPSK_timing_sync"); # Запуск модели.
println(simout)
println()
println("BER: $(collect(BER_QPSK).value[end][1])")
执行结果:
-模型正在按部就班地成功编译
-结构显示 SimulationResult 带输出信号:
- RX_out-接收机滤波器后的接收信号
- Выбор.1-用于解调的选定计数
- ber_qpsk-计算的比特错误概率
 -计算的BER值为0.0065(0.65%)对于指定的条件
获得的BER值在选定的Eb/No比率和第一采样时刻表现出良好的通信质量。
接下来,我们将分析QPSK信号的能谱,下面的代码在具有升高余弦的发射机的滤波器之后执行信号的能谱的计算和可视化。
关键处理步骤:
- 
信号提取-在传输滤波器后接收复数信号 
- 
谱功率密度的计算: -FFT信号的计算 
 -信号长度和采样频率(800Hz)归一化
 -转换为对数标度(dB)
- 
平滑频谱: -应用具有20个计数窗口的移动平均线 
 -消除卷积的边缘效应
- 
密谋: -使频率轴相对于零居中 
 -在±400Hz范围内显示(采样频率的一半)
# Подключение библиотек
neededLibs = ["FFTW", "DSP", "Statistics"]
for lib in neededLibs
    try
        eval(Meta.parse("using $lib"))
    catch ex
        Pkg.add(lib)
        eval(Meta.parse("using $lib"))
    end
end
Out_Transmit_Filter_value = vcat(simout["QPSK_timing_sync/RX_out"].value...)
fs = 800  
power_spectrum_raw = abs.(fft(Out_Transmit_Filter_value)).^2 / (length(Out_Transmit_Filter_value) * fs)
power_spectrum_db_raw = 10*log10.(power_spectrum_raw)
window_size = 20  
kernel = ones(window_size) / window_size 
power_spectrum_smoothed = conv(power_spectrum_db_raw, kernel)[window_size÷2+1:end-window_size÷2]
freqs = fftfreq(length(power_spectrum_smoothed), fs)
plot(fftshift(freqs), fftshift(power_spectrum_smoothed),
     title="Энергетический спектр (скользящее среднее, окно $window_size)",
     xlabel="Частота, Гц",
     ylabel="Спектральная плотность мощности, дБ/Гц",
     legend=false,
     linewidth=2,
     grid=true)
该图显示了具有以下特性的qpsk信号的几乎完美形成的频谱:
-平顶在带宽(除0)
-基带外陡峭的衰减斜坡
-最小带外辐射是凸起余弦滤波器高效运行的结果
-相对于零频率的对称形状
频谱表现出系统的优异频谱特性,这证实了发射机滤波器的正确操作和频带的有效利用。
接下来,我们继续使用Select_index的不同值进行测试。
ber_qpsk = zeros(8);
RX_out = Vector{Vector{ComplexF64}}(undef, 8)
Selection_data = Vector{Vector{ComplexF64}}(undef, 8) 
fs = 800 
global Select_index
@time for i in 1:8
    println("Запуск модели для Select_index = $i")
    Select_index = Int32(i)
    run_model("QPSK_timing_sync")
    ber_qpsk[i] = collect(BER_QPSK).value[end][1]
    RX_out[i] = vcat(simout["QPSK_timing_sync/RX_out"].value...)
    Selection_data[i] = simout["QPSK_timing_sync/Выбор.1"].value
end
收集的数据:
-8个不同采样点的BER值
-每种情况的接收器输出信号(RX_out)
-用于时间同步分析的选定样本(Selection_data)
该测试已经成功完成,并准备进一步分析BER对采样时刻选择的依赖性,这对于评估时间同步对QPSK系统中通信质量的影响至关重要。
println("\nРезультаты BER:")
for i in 1:8
    println("Select_index = $i: BER = $(ber_qpsk[i])")
end
plot(1:8, ber_qpsk, 
     title="Зависимость BER от Select_index",
     xlabel="Select_index", 
     ylabel="BER",
     marker=:circle,
     linewidth=2,
     grid=true,
     legend=false,
     yscale=:log10)
BER对采样时刻的依赖性分析
对数标度上的图表清楚地表明了偏离最佳采样时刻时通信质量下降的指数性质。 最佳采样时间: Select_index = 2:BER=0.0060(最佳结果)和 Select_index = 1 BER=0.0065(非常接近最佳)。 关键质量下降始于 Select_index = 3 BER=0.0135(比最佳差2倍),最坏的情况是 Select_index = 5-8:BER>0.25(实际上失去连接)
基于此,可以得出以下结论:
- 在索引1和2处实现最佳同步
- 急剧退化从索引3开始
- 指数5-8时的零效率(BER≈0.5-相当于随机猜测)
接下来,让我们仔细看看最好的和最差的结果。
best_idx = argmin(ber_qpsk)
worst_idx = argmax(ber_qpsk)
best_selection = Selection_data[best_idx]
worst_selection = Selection_data[worst_idx]
downsample_factor = 20
best_constellation = best_selection[1:downsample_factor:end]
worst_constellation = worst_selection[1:downsample_factor:end]
function compute_spectrum_q(signal, fs)
    q_signal = imag(signal)
    N = length(q_signal)
    power_spectrum = abs.(fft(q_signal)).^2 / (N * fs)
    power_spectrum_db = 10*log10.(power_spectrum)
    freqs = fftfreq(N, fs)
    return fftshift(freqs), fftshift(power_spectrum_db)
end
freqs_best, spectrum_best = compute_spectrum_q(RX_out[best_idx], fs)
freqs_worst, spectrum_worst = compute_spectrum_q(RX_out[worst_idx], fs)
p_combined = plot(layout=(3,1), size=(800, 900))
t = 1:200
plot!(p_combined[1], t, imag(best_selection[t]), 
      label="Лучший (Index $best_idx)", linewidth=2, color=:blue)
plot!(p_combined[1], t, imag(worst_selection[t]), 
      label="Худший (Index $worst_idx)", linewidth=2, color=:red, linestyle=:dash)
title!(p_combined[1], "Временные данные Q компонента")
plot!(p_combined[2], freqs_best, spectrum_best, 
      label="Лучший", linewidth=2, color=:blue)
plot!(p_combined[2], freqs_worst, spectrum_worst, 
      label="Худший", linewidth=2, color=:red, linestyle=:dash)
title!(p_combined[2], "Спектры Q компонентов")
scatter!(p_combined[3], 1:length(best_constellation), imag(best_constellation), 
         label="Лучший", markersize=4, alpha=0.7, color=:blue,
         markerstrokewidth=0, marker=:circle)
scatter!(p_combined[3], 1:length(worst_constellation), imag(worst_constellation), 
         label="Худший", markersize=4, alpha=0.7, color=:red,
         markerstrokewidth=0, marker=:x)
title!(p_combined[3], "Q компоненты созвездий")
plot!(p_combined, titlefontsize=12, legendfontsize=10)
这些图表显示以下内容:
- 光谱是相同的→过滤在这两种情况下同样有效
- 时间数据不同→采样时刻至关重要
- 星座是不同的→最佳同步(蓝点)导致清晰的集群,差的同步(红色交叉)导致模糊的集群。
由此我们可以得出结论,问题不在于滤波或信号质量,而仅仅在于时间同步的准确性。 系统需要精确的采样定时以进行正确的解调。
结论
该研究证明了BER对采样时刻的选择的显着依赖性,这证实了精确时间同步在真实数字通信系统中的关键重要性。 结果表明,仅前三个采样时刻提供可接受的通信质量,而后续时刻的选择导致系统性能的急剧恶化。