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