1、使用SIMULINK或Matlab实现DPCM仿真
1.1 DPCM原理
差分脉冲编码调制,简称DPCM,主要用于将模拟信号转换为数字信号,同时减少数据的冗余度以实现数据压缩。在DPCM中,信号的每个抽样值不是独立编码的,而是通过预测前一个抽样值来计算出一个预测值,然后取当前抽样值和预测值之差进行编码。由于抽样值和预测值非常接近,预测误差的可能取值范围比抽样值变化范围小,因此可以用较少的比特数来对预测误差进行编码,从而降低数据的比特率。DPCM是利用信号的时间相关性来减少所需的编码比特数。需要对模拟信号进行周期性扫描,将时间上连续的信号变成时间上离散的信号,根据前一个抽样值计算出一个预测值,计算当前抽样值和预测值之差,即预测误差,并对其进行量化。然后对量化后的预测误差进行编码。在接收端,根据已知的预测值和预测误差进行解码,恢复原始信号。
DPCM可以有效利用信号的时间相关性来减少数据量,这对于具有强相关性的数据特别有效。
在DPCM系统中,需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此在DPCM编码器中实际内嵌了一个解码器,如编码器中虚线框中所示。在一个DPCM系统中,有两个因素需要设计:预测器和量化器。预测器和量化器应进行联合优化。分别进行线性预测器和量化器的优化设计。
1.2 使用Maltab进行DPCM仿真
代码及注释:
1. 生成输入信号
Fs = 1000; % 采样率 (Hz)
t = 0:1/Fs:0.1; % 时间向量(0.1秒)
x = sin(2pi50*t); % 50 Hz的正弦信号
Fs(采样率):每秒1000个采样点,确保信号足够平滑。
t(时间向量):从0秒到0.1秒的时间步长为1/Fs秒。
x(信号):50 Hz的正弦信号,模拟一个周期性简单的输入信号。
解释:
正弦信号是经典的测试信号,便于观测DPCM的效果。如果希望使用其他信号(如语音数据),可以替换这部分代码。
2. 初始化DPCM变量
N = length(x); % 信号长度
x_pred = zeros(1, N); % 预测信号初始化
e = zeros(1, N); % 预测误差初始化
x_rec = zeros(1, N); % 重建信号初始化
quant_step = 0.1; % 量化步长(控制量化误差)
N:计算信号的长度。
x_pred、e、x_rec:初始化预测信号、预测误差和重建信号,这些变量用于存储逐个采样点的计算结果。
quant_step:量化步长,控制预测误差的量化精度,数值越大意味着压缩越强、但重建误差越大。
解释:
这里假设量化器的步长为0.1,意味着预测误差会被四舍五入到0.1的倍数。步长越大,重建信号的精度越低,失真越明显。
3. DPCM编码与解码过程
for n = 2:N
% 使用上一重建值作为预测值
x_pred(n) = x_rec(n-1);
% 计算预测误差
e(n) = x(n) - x_pred(n);
% 量化误差并传输
e_quant = round(e(n) / quant_step) * quant_step;
% 重建信号:累加量化后的误差
x_rec(n) = x_pred(n) + e_quant;
解释:
DPCM的核心思想是预测当前样本,并只传输预测误差。重建信号在解码端通过累加预测误差实现。这个简单的一阶预测器适合平滑信号,但对于复杂信号可能不够精确。
4. 绘制原始信号、预测误差和重建信号
figure;
% 子图1:原始信号
subplot(3,1,1);
plot(t, x, ‘b’, ‘LineWidth’, 1.5);
title(‘原始信号’);
xlabel(‘时间 (s)’); ylabel(‘幅度’);
grid on;
% 子图2:预测误差
subplot(3,1,2);
stem(t, e, ‘filled’, ‘MarkerSize’, 4, ‘MarkerFaceColor’, ‘r’);
title(‘预测误差 (e[n])’);
xlabel(‘时间 (s)’); ylabel(‘误差幅度’);
grid on;
% 子图3:重建信号
subplot(3,1,3);
plot(t, x_rec, ‘g–’, ‘LineWidth’, 1.2);
title(‘重建信号’);
xlabel(‘时间 (s)’); ylabel(‘幅度’);
grid on;
子图1:绘制原始信号,显示它的基本周期性变化。
子图2:绘制预测误差,使用离散点(stem)展示误差的大小和分布。
子图3:绘制重建信号,与原始信号进行对比。
解释:
将三个重要信号分开绘制,便于观察各自的特征:
原始信号 vs 重建信号:重建信号与原始信号应尽量吻合,若量化步长过大则会出现较明显偏差。
预测误差:误差越小,表示预测器越准确,DPCM压缩效果越好。
5. 计算并显示均方误差 (MSE)
MSE = mean((x - x_rec).^2);
disp(['重建信号的均方误差 (MSE): ', num2str(MSE)]);
MSE(均方误差):衡量原始信号和重建信号之间的平均误差,数值越小表示重建效果越好。
运行结果:
原始信号与解码后的DPCM信号在整体趋势上较为相似,这表明DPCM编码和解码过程在一定程度上能够较好地还原原始信号的特征。两者的波形形状大致相同,说明DPCM算法在保留信号主要信息方面具有较好的效果。此外,误差信号的幅度相对较小,说明DPCM编码和解码过程产生的误差在可接受范围内,并且误差信号没有明显的规律性,表明误差不是由系统性因素引起的,而是随机分布的。自适应量化因子随着样本索引的变化而动态调整,这种自适应调整能够根据信号的变化实时优化量化过程,从而提高编码效率和信号质量。DPCM算法在一定程度上能够有效地对信号进行编码和解码,并且具有自适应量化的优势。
1.3 使用SIMULINK进行DPCM仿真
在Simulink中搭建DPCM(差分脉冲编码调制)仿真电路时,要使用Simulink中的“Random Integer Generator”模块生成信号源数据,它是一个连续或离散的输入信号,用于提供系统的初始数据。信号源向下连接到一个“加法器”(+、-符号)。这个加法器用于计算输入信号与反馈信号之间的差值,起到误差信号生成的作用。从加法器的左下方有一个反馈回路,包含一个“延迟单元”(标记为 ),这意味着系统中使用的是离散时间处理。延迟单元的输出信号被反馈到加法器,生成一个反馈回路,用于差分调制的计算。从加法器的右上角,误差信号输出连接到一个存储模块(类似一个方框)。这个模块可能用于存储或观察差分编码后的误差信号。从加法器右侧输出的信号同时传递到一个新的加法器,该加法器用于累加当前误差信号与前一时刻的信号,在接收端对差分编码信号进行累加,以恢复原始信号。累加器输出通过另一个延迟单元进行反馈,作为下一次累加的输入。这种结构保证了在每次计算时包含上一个累加值,以构建累积反馈。最右端的存储模块用于显示或存储最终的输出信号,以便于对恢复后的信号进行观察和分析。
信号源的Amplitude正弦波的振幅设置为1,Frequency (rad/sec) 正弦波的频率也设置为1,这意味着生成的正弦波将具有1的振幅,0的偏置,1 rad/sec的频率,0的相位,且没有指定采样时间:
设置一个加法器,使其符号为±:
再设置一个加法器,使其符号为++:
分别接上两个延迟单元,使得系统中使用的是离散时间处理,从而生成反馈回路。
以上三个示波器分别观察原始信号,编码信号,解码信号。
观察原始信号波形:
观察编码信号波形:
观察解码信号:
通过以上SIMULINK的仿真,可以看到原始信号经过编码,然后解码以恢复信号。
2、使用SIMULINK或Matlab实现双边带调幅系统仿真
2.1 双边带调幅原理
双边带调制(DSB)通过将基带信号的频谱完整地搬移到载波频率的上下两侧,但这种调制方式的信号包络不恒定,导致发射端的平均功率和峰值功率差异较大。此外,为了避免失真,发射机需要在高功率下保持良好的线性输出,但会增加设备的成本和功耗。
虽然双边带调制在小信号传输时具有良好的线性特性,能够较好地保留基带信号的幅度和波形信息,但其抗噪声性能相对较差。在噪声或干扰严重的环境中,信号的完整性易受影响,导致接收端解调出的信号质量下降。双边带调制常需要采用较高信噪比的信道,或依赖其他抗干扰手段以确保通信质量。此外,DSB 的接收端需要实现同步解调,即载波相位必须与发射端保持一致,这对接收机的设计带来了额外的复杂性。同步解调器不仅需要精确的载波恢复电路,还可能增加额外的信号处理延迟,影响系统的实时性能。
2.2 使用Maltab进行双边带调幅系统仿真
代码及注释:
1. 初始化与参数设置
fs = 1e4; % 采样频率 (Hz)
t = 0:1/fs:3-1/fs; % 时间向量 (3秒,方便观察)
fc = 1000; % 载波频率 (Hz)
fm = 5; % 基带信号频率 (Hz)
fs:采样频率设置为10 kHz,保证信号处理精度和避免混叠。
t:时间向量定义为3秒,步长为1/fs,用于生成离散信号。
fc 和 fm:分别定义载波和基带信号频率。载波频率为1 kHz,而基带频率降低为5 Hz,便于在图上清楚地观察调制后的包络。
2. 基带信号生成
m_t = cos(2pifm*t);
subplot(3, 2, 1);
plot(t, m_t); grid on;
title(‘基带信号 m(t)’);
xlabel(‘时间 (s)’); ylabel(‘幅度’);
基带信号m(t):一个频率为5 Hz的正弦波,代表待传输的低频信息。
绘图:在第一子图显示基带信号,可以看到3秒内基带信号缓慢变化的正弦波形。
3. 载波信号生成
c_t = cos(2pifc*t);
subplot(3, 2, 2);
plot(t(1:500), c_t(1:500)); grid on; % 截取部分数据以方便观察
title(‘载波信号 c(t)’);
xlabel(‘时间 (s)’); ylabel(‘幅度’);
载波信号c(t):一个频率为1 kHz的正弦波,用于调制基带信号。
绘图:由于载波频率较高,绘制了前500个采样点(0.05秒),以方便观察其波形。
4. 双边带调制 (DSB-AM)
s_t = m_t .* c_t;
subplot(3, 2, 3);
plot(t, s_t); grid on;
title(‘调制信号 s(t)’);
xlabel(‘时间 (s)’); ylabel(‘幅度’);
调制信号:s(t) = m(t) * c(t),基带信号与载波相乘,实现双边带调制。
结果:调制信号的包络跟随基带信号的变化(形成包络波形),频率主要集中在载波附近。
5. 调制信号的频谱分析
N = length(t);
S_f = abs(fftshift(fft(s_t)))/N;
f = linspace(-fs/2, fs/2, N);
subplot(3, 2, 4);
plot(f, S_f); grid on;
title(‘调制信号的频谱’);
xlabel(‘频率 (Hz)’); ylabel(‘幅度’);
fft:计算调制信号的快速傅里叶变换 (FFT)。
fftshift:将频谱中心移到零频率处,以对称显示频谱。
频谱内容:可以看到基带信号被完整地搬移到正负载波频率(±1 kHz)两侧。
6. 加入高斯白噪声
snr = 10; % 信噪比 (dB)
s_t_noisy = awgn(s_t, snr, ‘measured’);
subplot(3, 2, 5);
plot(t, s_t_noisy); grid on;
title(‘含噪声的调制信号’);
xlabel(‘时间 (s)’); ylabel(‘幅度’);
噪声生成:
使用awgn函数为调制信号添加高斯白噪声。
snr:信噪比设置为10 dB,模拟噪声环境。
绘图:观察含噪信号的波形,可以看到信号波形有噪声干扰。
7. 同步解调与低通滤波
r_t = s_t_noisy .* c_t; % 乘以相同载波
[b, a] = butter(5, 2*fm/fs); % 设计低通滤波器
m_t_recovered = filter(b, a, r_t); % 滤波提取基带信号
subplot(3, 2, 6);
plot(t, m_t_recovered); grid on;
title(‘解调后的信号’);
xlabel(‘时间 (s)’); ylabel(‘幅度’);
同步解调:
含噪信号r(t)与同频载波相乘,相当于将调制信号搬回基带频率。
低通滤波:
使用巴特沃斯滤波器 (Butterworth) 滤除高频成分,仅保留解调后的基带信号。
滤波器设计:butter(5, 2*fm/fs),5阶滤波器,截止频率为基带信号的两倍。
绘图:在第六子图展示解调后的信号。可通过观察包络波形,验证解调的有效性。
运行结果:
图中第一幅图代表的是基带信号是一个频率为 5 Hz 的正弦波。表示待传输的原始信息,在调制过程中会映射到更高频段。基带信号为低频,直接传输可能不现实,原因包括易受干扰和不易通过无线电传播。需要将其调制到高频载波上。
第二幅图载波信号是频率为 1000 Hz 的高频正弦波。在图中只显示了前500个采样点的载波信号(约0.05秒),因为频率较高,完整展示会显得非常密集。载波的作用是将基带信号搬移到高频段,以适应无线电传播和频分复用需求。
第三幅图调制信号的包络(外轮廓)与基带信号 m(t) 一致,但频率为载波频率的 1000 Hz。DSB-AM调制将基带信号乘以载波信号,包络反映了基带信号的信息。双边带调制同时在载波频率两侧产生对称的频谱。从这张图可以看出调制信号中的包络变化,信号的幅度随基带信号的变化而波动。
第四幅图频谱中显示了两侧的频率成分,分别位于±1000 Hz(载波频率)附近。每侧包含基带信号的频谱信息,形成双边带结构。频谱中显示了两侧的频率成分,分别位于±1000 Hz(载波频率)附近。每侧包含基带信号的频谱信息,形成双边带结构。
第五幅图在添加10dB 信噪比(SNR) 的高斯白噪声后,信号的波形开始变得不规则,受到噪声干扰。虽然波形包络仍然存在,但受到了一些随机噪声的扰动。这部分模拟了真实传输环境中的噪声干扰。信噪比(SNR)越低,噪声干扰越大,传输效果越差。观察这部分的结果可以了解噪声对调制信号的破坏程度。
第六幅图解调后的信号与原始基带信号m(t)非常相似,但可能包含了一些噪声成分和微小失真。这是通过与载波相乘后,经过低通滤波处理的结果。同步解调依赖于载波的精确同步,成功恢复基带信号。如果解调信号失真严重,说明可能存在载波不同步或噪声过大问题。
双边带调幅系统在调制阶段原始低频信号被调制到高频载波上,使其适合无线传播。频谱上体现了双边带特性,两侧频率对称,包络信息与基带信号一致。噪声干扰可以观察模拟传输过程中的噪声影响,观察不同信噪比(SNR)对信号的干扰程度。在理想同步条件下,解调后的信号与原始基带信号接近,说明系统可以成功提取原始信息。
2.3 使用SIMULINK进行双边带调幅系统仿真
在SIMULINK上使用两个正弦波输入信号源,这两个信号源是不同频率的正弦波,用于进行信号的组合处理。两个信号源输入连接到一个乘法器(“×”符号),用于对两个信号进行相乘操作。这个用于信号调制或相位相关操作。在调制系统中,乘法器可以用于实现振幅调制(AM),将载波信号和基带信号相乘生成调制信号。乘法器的输出连接到一个绝对值模块(“|u|”符号),对相乘后的信号取绝对值。绝对值操作用于去掉信号的负值成分,使信号波形保持正向。比如在包络检测中,取绝对值可以得到信号的包络信息。绝对值模块的输出连接到一个传递函数模块。该传递函数相当于一个一阶低通滤波器,可以滤除高频成分,仅保留信号的低频部分。低通滤波器再用于平滑信号或提取信号的包络信息。最右端的模块用于观测和输出最终的信号。将其连接到示波器模块,用于观察经过滤波器处理后的信号波形。在信号的乘法器和绝对值模块的分支位置,有两个存储模块。它们可能用于记录信号在特定节点的输出,以便分析和对比各处理步骤的信号变化。
也就是通过输入的两个正弦信号相乘得到调制信号,再将调制信号取绝对值,用于包络提取或调制信号的整形。绝对值后的信号通过低通滤波器进行平滑,得到低频成分。最终的输出信号是调制信号的包络,经过滤波后可以进行进一步观察。
两个信号源的频率分别如下:
将信号源的振幅(Amplitude)设置为1。这表示正弦波信号的最大值和最小值分别是 1和 -1。再将频率设置为 50 弧度/秒。这表示正弦波每秒完成 50 个周期。
另外一个信号源的振幅(Amplitude)设置为0.5。再将频率设置为 5 弧度/秒。将这两个信号源不同频率的正弦波,用于进行信号的组合处理。
以下是传递函数模块的参数配置窗口,Numerator Coefficients(分子系数)设置为 [1],表示传递函数的分子部分是一个常数,即1。这表明着传递函数的分子是一个常数1的多项式。没有更高次项,用于一阶或简单系统的传递函数。Denominator Coefficients(分母系数)设置为 [1 5] , 该形式对应一个一阶低通滤波器,能够平滑高频成分。Absolute Tolerance(绝对容差)设置为 auto,即Simulink自动选择容差。
最后通过三个示波器进行观察双边带调幅系统的信号:
观察调制信号:
观察条幅信号:
观察解调信号:
其中调幅信号的振幅范围比调制信号小,这是由于调制过程中的放大或衰减。解调信号的振幅进一步减小,这是由于信道噪声或解调器的不完美。总体是原始信号经过调幅处理,然后通过信道传输,最后进行解调以恢复原始信息。