Matlab做增量调制

ThistechnicalarticledemonstratestheimplementationofDeltamodulationforencodinganddecodinga1HzsinusoidalsignalinMATLAB,showcasingtheencoder,decoderfunctions,andcalculatingtheMeanSquaredError.
摘要由CSDN通过智能技术生成
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值