更改信号采样率和测量均值频率、功率、带宽

目录

更改信号采样率        

测量均值频率、功率、带宽


更改信号采样率        

        此示例说明如何更改信号的采样率。此示例有两个部分。第一部分将正弦输入的采样率从 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 相差的数量级仅为 。 

        将使用 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)

测量均值频率、功率、带宽

        生成以 1024 kHz 采样的 chirp 信号的 1024 个采样点。chirp 信号的初始频率为 50 kHz,采样结束时达到 100 kHz。添加高斯白噪声,使信噪比为 40 dB。

nSamp = 1024;
Fs = 1024e3;
SNR = 40;

t = (0:nSamp-1)'/Fs;

x = chirp(t,50e3,nSamp/Fs,100e3);
x = x+randn(size(x))*std(x)/db2mag(SNR);

        估计信号的 99% 占用带宽,并在功率频谱密度 (PSD) 图上进行标注。

obw(x,Fs);

        如图所示:

        计算频带中的功率,并验证它是否占总数的 99%。

[bw,flo,fhi,powr] = obw(x,Fs);

pcent = powr/bandpower(x)*100


pcent = 99.0000

        生成另一个 chirp 信号。指定其初始频率为 200 kHz、最终频率为 300 kHz,幅值为第一个信号的两倍。添加高斯白噪声。

x2 = 2*chirp(t,200e3,nSamp/Fs,300e3);
x2 = x2+randn(size(x2))*std(x2)/db2mag(SNR);

        将两个 chirp 信号相加以形成一个新信号。绘制信号的 PSD,并标注其中值频率。

medfreq([x+x2],Fs);

        如图所示:

        绘制 PSD 并标注其均值频率。

meanfreq([x+x2],Fs);

        如图所示:

        现在假设每个 chirp 信号代表一个单独的通道。估计每个通道的均值频率。在 PSD 图上标注其均值频率。

meanfreq([x x2],Fs)

        如图所示:

ans = 1×2

10^5 ×

    0.7503    2.4999

        估计每个通道的半功率带宽。在 PSD 图上标注 3-dB 带宽。

powerbw([x x2],Fs)

        如图所示:

ans = 1×2

10^4 ×

    4.4386    9.2208

猜你喜欢

转载自blog.csdn.net/jk_101/article/details/124796723