Main Content

更改信号采样率

此示例说明如何更改信号的采样率。此示例有两个部分。第一部分将正弦输入的采样率从 44.1 kHz 改为 48 kHz。此工作流在音频处理中很常见。光盘上使用的采样率是 44.1 kHz,而数字音频磁带上使用的采样率是 48 kHz。第二部分将录制的语音样本的采样率从 7418 Hz 更改为 8192 Hz。

创建一个由多个正弦波组成的输入信号,采样率为 44.1 kHz。这些正弦波的频率为 2 kHz、4 kHz 和 8 kHz。

Fs = 44.1e3;
t = 0:1/Fs:1-1/Fs;
x = cos(2*pi*2000*t) + 1/2*sin(2*pi*4000*(t-pi/4)) + ...
    1/4*cos(2*pi*8000*t);

要将采样率从 44.1 kHz 更改为 48 kHz,您必须确定一个有理数(整数之比)P/Q,使得 P/Q 与原始采样率 44100 之积在某个指定容差内等于 48000。

要确定这些因子,请使用 rat。输入新采样率 48000 与原始采样率 44100 之比。

[P,Q] = rat(48e3/Fs);
abs(P/Q*Fs-48000)
ans = 7.2760e-12

您可以看到,P/Q*Fs 与所需采样率 48000 相差的数量级仅为 10-12

将使用 rat 求得的分子和分母因子作为 resample 的输入,输出以 48 kHz 采样的波形。

xnew = resample(x,P,Q);

如果您的计算机可以播放音频,您可以播放这两种波形。在播放信号前,请将音量设置为舒适的水平。对两种采样率的信号分别执行 sound 命令并收听。

% sound(x,44100)
% sound(xnew,48000)

将语音样本的采样率从 7418 Hz 更改为 8192 Hz。语音信号是说话者朗读 "MATLAB®" 的录音。

加载该语音样本。

load mtlb

加载文件 mtlb.mat 会将语音信号 mtlb 和采样率 Fs 加载到 MATLAB 工作区中。

确定新采样率 8192 与原始采样率之比的有理近似值。使用 rat 确定近似值。

[P,Q] = rat(8192/Fs);

以新采样率对语音样本进行重采样。绘制两个信号。

mtlb_new = resample(mtlb,P,Q);

subplot(2,1,1)
plot((0:length(mtlb)-1)/Fs,mtlb)
subplot(2,1,2)
plot((0:length(mtlb_new)-1)/(P/Q*Fs),mtlb_new)

如果您的计算机能够输出音频,您可以将这两个波形以其各自的采样率播放以进行比较。在播放声音前,请将计算机上的音量设置为舒适的聆听水平。分别执行 sound 命令,比较不同采样率下的语音样本。

% sound(mtlb,Fs)
% sound(mtlb_new,8192)

另请参阅