余弦信号的均匀量化和μ律非均匀量化

基于MATLAB实现的余弦信号的均匀量化和μ律非均匀量化的代码。代码包括信号生成、量化过程以及量化误差的计算和可视化。

1. 参数设置

% 信号参数
fs = 1000; % 采样频率 (Hz)
T = 1; % 信号时长 (秒)
t = 0:1/fs:T-1/fs; % 时间向量
f = 5; % 余弦信号频率 (Hz)
A = 1; % 信号振幅

% 量化参数
numBits = 8; % 量化位数
mu = 255; % μ律参数

2. 生成余弦信号

% 生成余弦信号
x = A * cos(2 * pi * f * t);

3. 均匀量化

% 均匀量化
L = 2^numBits; % 量化级数
xMax = max(x);
xMin = min(x);
delta = (xMax - xMin) / L; % 量化步长
xQuantizedUniform = floor((x - xMin) / delta) * delta + xMin + delta / 2;

4. μ律非均匀量化

% μ律非均匀量化
% μ律压缩
xCompressed = sign(x) * log(1 + mu * abs(x)) / log(1 + mu);

% 均匀量化
xCompressedQuantized = floor((xCompressed - min(xCompressed)) / delta) * delta + min(xCompressed) + delta / 2;

% μ律扩张
xQuantizedMuLaw = sign(xCompressedQuantized) * (exp(abs(xCompressedQuantized) * log(1 + mu)) - 1) / mu;

5. 量化误差计算

% 计算量化误差
errorUniform = x - xQuantizedUniform;
errorMuLaw = x - xQuantizedMuLaw;

% 计算均方误差 (MSE)
mseUniform = mean(errorUniform.^2);
mseMuLaw = mean(errorMuLaw.^2);

6. 可视化结果

% 绘制原始信号和量化信号
figure;
subplot(3, 1, 1);
plot(t, x);
title('原始余弦信号');
xlabel('时间 (s)');
ylabel('幅度');

subplot(3, 1, 2);
plot(t, xQuantizedUniform);
title('均匀量化信号');
xlabel('时间 (s)');
ylabel('幅度');

subplot(3, 1, 3);
plot(t, xQuantizedMuLaw);
title('μ律非均匀量化信号');
xlabel('时间 (s)');
ylabel('幅度');

% 绘制量化误差
figure;
subplot(2, 1, 1);
plot(t, errorUniform);
title('均匀量化误差');
xlabel('时间 (s)');
ylabel('误差');

subplot(2, 1, 2);
plot(t, errorMuLaw);
title('μ律非均匀量化误差');
xlabel('时间 (s)');
ylabel('误差');

% 显示均方误差
disp(['均匀量化均方误差 (MSE): ', num2str(mseUniform)]);
disp(['μ律非均匀量化均方误差 (MSE): ', num2str(mseMuLaw)]);

参考代码 实现对一个余弦信号的均匀量化和μ律非均匀量化 www.youwenfan.com/contentcng/81290.html

说明

  1. 参数设置:定义了信号的采样频率、时长、频率、振幅以及量化参数(量化位数和μ律参数)。
  2. 生成余弦信号:根据给定的参数生成余弦信号。
  3. 均匀量化:将信号均匀量化到指定的量化级数。
  4. μ律非均匀量化:先对信号进行μ律压缩,然后进行均匀量化,最后进行μ律扩张。
  5. 量化误差计算:计算原始信号与量化信号之间的误差,并计算均方误差(MSE)。
  6. 可视化结果:绘制原始信号、均匀量化信号、μ律非均匀量化信号以及量化误差,直观展示量化效果和误差分布。
posted @ 2025-10-17 15:05  荒川之主  阅读(19)  评论(0)    收藏  举报