MATLAB|測(cè)試信號(hào)壓縮采樣

1. 問(wèn)題描述

在試驗(yàn)測(cè)試中,為了保證測(cè)試數(shù)據(jù)的精度和可靠性,我們往往提高儀器的采樣頻率。例如預(yù)期測(cè)試信號(hào)的最高頻率為f0,那么試驗(yàn)測(cè)試中,可以選擇儀器支持的最高采樣頻率進(jìn)行測(cè)試,例如取fs = 100*f0。

但是在數(shù)據(jù)處理過(guò)程中,信號(hào)過(guò)長(zhǎng),往往導(dǎo)致運(yùn)算量過(guò)大,難以實(shí)施較為復(fù)雜的信號(hào)處理,例如小波變換。這種情況下,在保證信號(hào)處理結(jié)果精度的情況下,可以通過(guò)壓縮采樣來(lái)降低后續(xù)計(jì)算量。例如將100 Hz的信號(hào)重采樣為10 Hz的信號(hào)。

2. 技術(shù)背景

采用MATLAB內(nèi)置的resample函數(shù)。百度知道的解釋如下:

B=resample(x,90,250); %
采樣從250Hz降到90Hz,如果250在前,就是插值從90到250,可以看B的長(zhǎng)度,250Hz采樣4000個(gè)數(shù)據(jù)等于90hz采樣1440個(gè)數(shù)據(jù),這就是降采樣。

resample是抽取decimate和插值interp的兩個(gè)結(jié)合。具體完成如下操作,

  • 先插值90變成 250*9Hz
  • 然后抽取250變成速率 90Hz

3. 解決方案

根據(jù)數(shù)據(jù)處理的需求,計(jì)算需要降低采樣的倍數(shù),合理設(shè)置參數(shù)即可。

4. 實(shí)施示例

4.1 設(shè)計(jì)原始信號(hào)

%% 基本參數(shù)

N = 5;                                                                          % 激勵(lì)信號(hào)中心頻率,Hz
A  = 1;                                                                         % cycle數(shù),即激勵(lì)信號(hào)波峰數(shù)
fc = 100e3;                                                                     % 激勵(lì)信號(hào)幅值

T0 = 1e-4;                                                                      % 導(dǎo)波傳播時(shí)間
T = 1.0*T0;                                                                     % 激勵(lì)持續(xù)時(shí)長(zhǎng)
dt = 1/(20*fc)/4;                                                               % 時(shí)間步長(zhǎng),在最大步長(zhǎng)基礎(chǔ)上除以2
t = [0:dt:T-dt]';                                                               % 時(shí)間序列

%% 信號(hào)時(shí)域波形

V = A*[heaviside(t)-heaviside(t-N/fc)].*...                                     % 時(shí)域輸入信號(hào)求解         
    (1-cos(2*pi*fc*t/N)).*sin(2*pi*fc*t);

4.2 重采樣

此處對(duì)時(shí)間和數(shù)據(jù)同時(shí)重采樣,重采樣后的頻率是原始信號(hào)頻率的p/q倍,如果降低采樣,即p/q<1,注意p、q均為整數(shù)。

%% 重采樣
p = 1;
q = 4;                                                                         % 壓縮采樣比例
t2 = resample(t,p,q);
V2 = resample(V,p,q);

4.3 信號(hào)對(duì)比

5. 常見(jiàn)問(wèn)題

從低頻向高頻,重采樣實(shí)際不能提高有效成分,往往需要重做試驗(yàn),高頻采集原始數(shù)據(jù)。


示例程序代碼如下:

% 題目: 信號(hào)重采樣測(cè)試
% 作者: 馬騁
% 20161212 @HIT

clc,clear,close all

%% 基本參數(shù)

N = 5;                                                                          % 激勵(lì)信號(hào)中心頻率,Hz
A  = 1;                                                                         % cycle數(shù),即激勵(lì)信號(hào)波峰數(shù)
fc = 100e3;                                                                     % 激勵(lì)信號(hào)幅值

T0 = 1e-4;                                                                      % 導(dǎo)波傳播時(shí)間
T = 1.0*T0;                                                                     % 激勵(lì)持續(xù)時(shí)長(zhǎng)
dt = 1/(20*fc)/4;                                                               % 時(shí)間步長(zhǎng),在最大步長(zhǎng)基礎(chǔ)上除以2
t = [0:dt:T-dt]';                                                               % 時(shí)間序列

%% 信號(hào)時(shí)域波形

V = A*[heaviside(t)-heaviside(t-N/fc)].*...                                     % 時(shí)域輸入信號(hào)求解         
    (1-cos(2*pi*fc*t/N)).*sin(2*pi*fc*t);

figure                                                                          % 原始波形繪制
plot(t,V,'-')
xlabel('t(s)'),ylabel('Mangitude(N)')
title('原始信號(hào)')
xlim([0 T]),grid on
tools.white;

%% 重采樣

p = 1;                                                                         % 壓縮采樣比例
q = 4;
t2 = resample(t,1,pq);
V2 = resample(V,1,pq);

%% 繪圖

figure
subplot(211)
plot(t,V,'-o')
xlabel('t(s)'),ylabel('Mangitude(N)')
title('原始信號(hào)')
xlim([0 T]),grid on

subplot(212)
plot(t2,V2,'-o')
xlabel('t(s)'),ylabel('Mangitude(N)')
title('重采樣信號(hào)')
xlim([0 T]),grid on

tools.white;

本文用時(shí) 20 m

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容