function main
% 主函数,用于运行 Delta 调制编解码系统
% 初始化参数
Fs = 100; % 采样频率 (Hz)
duration = 10; % 增加持续时间到2秒
t = 0:1/Fs:duration; % 时间向量 (s)
x = sin(2 * pi * 1 * t); % 示例信号:1Hz 正弦波,降低信号频率
delta = 0.1; % Delta 调制的步长
initial_value = 0; % 编码器和解码器的初始值
% 执行编解码过程
[encodedSignal, prevSampleEncoder] = deltaModulationEncoder(x, delta, initial_value);
decodedSignal = deltaModulationDecoder(encodedSignal, delta, initial_value);
% 计算和打印均方误差
mse = mean((x - decodedSignal).^2);
fprintf('Mean Squared Error: %f\n', mse);
% 绘制图形
plotSignals(t, x, encodedSignal, decodedSignal);
end
function [encodedSignal, prevSample] = deltaModulationEncoder(x, delta, prevSample)
% Delta 调制编码器
% x: 输入信号
% delta: 步长
% prevSample: 初始样本值
% 初始化编码信号向量
encodedSignal = zeros(size(x));
% 进行 Delta 调制编码
for i = 1:length(x)
if x(i) > prevSample
encodedSignal(i) = 1;
prevSample = prevSample + delta;
else
encodedSignal(i) = 0;
prevSample = prevSample - delta;
end
end
end
function decodedSignal = deltaModulationDecoder(encodedSignal, delta, prevSample)
% Delta 调制解码器
% encodedSignal: 编码信号
% delta: 步长
% prevSample: 初始样本值
% 初始化解码信号向量
decodedSignal = zeros(size(encodedSignal));
% 进行 Delta 调制解码
for i = 1:length(encodedSignal)
if encodedSignal(i) == 1
prevSample = prevSample + delta;
else
prevSample = prevSample - delta;
end
decodedSignal(i) = prevSample;
end
end
function plotSignals(t, original, encoded, decoded)
% 绘制原始信号、编码信号和解码信号
figure;
% 原始信号
subplot(3, 1, 1);
plot(t, original, 'LineWidth', 1.5);
title('Original Signal');
xlabel('Time (s)');
ylabel('Amplitude');
grid on;
% 编码信号
subplot(3, 1, 2);
stairs(t, encoded, 'LineWidth', 1.5);
title('Encoded Signal');
xlabel('Time (s)');
ylabel('Amplitude');
grid on;
% 解码信号
subplot(3, 1, 3);
plot(t, decoded, 'LineWidth', 1.5);
title('Decoded Signal');
xlabel('Time (s)');
ylabel('Amplitude');
grid on;
end
Matlab做增量调制
最新推荐文章于 2025-04-30 14:27:27 发布