语音信号的调制即为频分复用的频谱搬移过程,该过程的关键是对各路语音信号载波频率的选取。
其定义为:
对应已调信号的幅度谱为:
为了解调出原始语音信号,需要在接收端设计三个带通滤波器,为了达到较好的效果,将采用哈明窗设计FIR带通滤波器。本系统采用滤出上边频的方式,因fc1 = 5K,fc2 = 11.8K,fc3 = 18.6K,取第一路[fp1,fp2,fs1,fs2] = [5000,8400,4950,8450];第二路[fp1,fp2,fs1,fs2] = [11800,15200,11750,15
250];第三路[fp1,fp2,fs1,fs2] = [18600,22000,18550,22050];其中,fp1为通带下限边界频率,fp2为通带上限边界频率,fs1为阻带下限截止频率,fs2为阻带上限截止频率。
将复用信号分别通过三个带通滤波器得到三路已调信号。
语音信号的解调过程分为两个过程,分别为与载波相乘和低通滤波。
①与载波相乘
由于带通滤波器,本系统滤出的是上边频,因此其公式为:
经过第(5)步得到的信号即为采样信号,要听到原始信号的复原还需将采样信号转换成模拟信号;本系统使用MATLAB自带的audioplayer()函数直接还原出模拟信号,最后使用play()函数将信号播出。
%------------------------------------------------------------------------
% File name: getaudio
% Last modified Date: 2021年6月7日10点59分
% Author: Jasmine
% Descriptions: 函数getaudio(),获取语音信号函数
% Parameter: 输入参数fresam为采样频率,sto为存储方式,met为1时为
% 一通道是单声道,为2时为两通道是立体声
%------------------------------------------------------------------------
function str = getaudio(fresam,sto,met)
disp('按下任意键开始录音:');
pause
audio = audiorecorder(fresam,sto,met);
disp('开始录音!');
%录音时间为10s
recordblocking(audio, 10);
disp('录音结束!');
% 获取录音数据
str = getaudiodata(audio);
end
%------------------------------------------------------------------------
% File name: bandpass
% Last modified Date: 2021年6月7日10点59分
% Author: Jasmine
% Descriptions: 函数bandpass(),使用哈明窗设计带通滤波器
% Parameter: 输入参数分别为:fp1通带下限边界频率,fp2通带上限边界频率
% fs1阻带下限截止频率,fs2阻带上限截止频率;输出参数为a即所设计的FIR滤波器
%------------------------------------------------------------------------
function a = bandpass(fp1,fp2,fs1,fs2)
fs = 44100;
%将各频率转换成相应的数字滤波器频率
wp1 = 2*pi*fp1/fs;wp2 = 2*pi*fp2/fs;
ws1 = 2*pi*fs1/fs;ws2 = 2*pi*fs2/fs;
%获取过渡带宽度
bt = wp1-ws1;
%求出窗函数窗宽
N = ceil(6.6*pi/bt);M = N-1;
%获得哈明窗
wind = hamming(N);wind = wind';
%求出截止频率
wn = [(wp1+ws1)/2/pi,(wp2+ws2)/2/pi];
%设计FIR滤波器
a = fir1(M,wn,wind);
end
见链接:https://download.csdn.net/download/weixin_44410704/19426606