写在前面:仅作为个人学习笔记,便于以后查阅,如对你有帮助,荣幸之至,如有错误,欢迎评论指正
编程软件:matlab R2018b
系统: win10
系列文章目录
- chirp信号的生成与接收
- 对接收到的chirp信号进行滤波、分帧处理及端点检测
- 计算原始chirp信号与滤波后chirp信号的相关性
- 绘制接滤波后chirp信号的时域图和频域图
- 从1-4完整走一遍
文章目录
- 系列文章目录
- 时域图
- 频域图
- 参考文献
时域图
直接上代码上图,因为回声信号可能有很多个,所以我只截取了一段回声信号进行展示:
%% 截取一段回声信号
i = 1;
invaildTime = 0.0138; vaildTime = 0.0800; %set the vaild time of real echo % invaildTime = 0.0138; vaildTime = 0.0862;
invaildLen = round(invaildTime * fs); vaildLen = round(vaildTime * fs); %get the real echo' length
startIndex = (voiceseg(i).begin - 1) * inc + invaildLen;
endIndex = startIndex + vaildLen;
% startIndex = (voiceseg(i).begin - 1) * inc;
% endIndex = startIndex + chirpInterval * fs;
% echo = xPoly(startIndex : endIndex); %回声信号
echo = xFilter(startIndex : endIndex);
% echoEnvelop = abs(echo+(1i)*hilbert(echo)); %get the envelop of this echo segment
echoTime = time(startIndex : endIndex);
% figure(2);
subplot(2, 2, 2);
plot(echoTime, echo);
grid;
% ylabel('归一化幅值');
ylabel('幅值');
xlabel(['样本点' 10 '(b)']);
title('一段回声信号');%%% compute the correlation between echo and raw audio signal
corrEcho = matched_filter_compute(echo, sampleSignal);
corrEcho = corrEcho / max(corrEcho);
timeEcho = 0 : length(corrEcho) - 1;
timeEcho = timeEcho/fs;
subplot(2, 2, 3);
plot(timeEcho, corrEcho);
grid;
title('回声的相关性');
% ylabel('归一化幅值');
ylabel('幅值');
xlabel(['样本点' 10 '(c)']);
hold on;
一段回声信号的时域图如下所示,横坐标时样本点序列,横坐标是信号的幅值:
频域图
上代码上图:
%% compute the fft
%%% get the echo array
echoData = echo;
[f_vec, amp] = fftCompute(echoData, fs);
freqArr = zeros(length(f_vec), k); % store echo valid echo data);
freqArr( : , 1) = amp;% for i = 2 : chirpRepeat
for i = 2 : kstartIndex = (voiceseg(i).begin - 1) * inc + invaildLen;endIndex = startIndex + vaildLen;
% echoData = xPoly(startIndex : endIndex);echoData = xFilter(startIndex : endIndex);[f_vec, amp] = fftCompute(echoData, fs);freqArr( : , i) = amp;
end
freqMean = sum(freqArr, 2);
freqMean = freqMean / k;
% freqMean = freqMean / max(abs(freqMean));subplot(2, 2, 4);
plot(f_vec, freqMean);
xlabel(['频率/HZ']);
ylabel('幅度');
title('频域图');
回声信号的平均频域图如下所示,简言之,对每个回声信号都去计算它的频谱,最后取一个平均值,能在一定程度上减弱单个回声信号的误差。横坐标为频率、纵坐标为频率幅值,我们提取出的信号的频域确实分布在18KHZ-20KHZ区间附近,因此,因此可认为我们提取出的回声信号是有效的。
参考文献
- 宋知用.MATLAB语音信号分析与合成(第2版)[M].北京:北京航空航天大学出版社,2017.10.