clc
clear
close all
%获取语音信号
[audio1,fs] = audioread('1.mp3');
audio2 = audioread('2.mp3');
audio3 = audioread('3.mp3');
%等长处理
minlen=min([length(audio1),length(audio2),length(audio3)]);
audio1=audio1(1:minlen,1);
audio2=audio2(1:minlen,1);
audio3=audio3(1:minlen,1);
%等频率处理
fs=44100;
filename='1.wav';
audiowrite(filename,audio1,fs);
filename='2.wav';
audiowrite(filename,audio2,fs);
filename='3.wav';
audiowrite(filename,audio3,fs);
%获取语音信号
audio1 = audioread('1.wav');
audio2 = audioread('2.wav');
audio3 = audioread('3.wav');
%对获得的语音信号进行fft变换
fftaudio1 = fft(audio1);
fftaudio2 = fft(audio2);
fftaudio3 = fft(audio3);
%画出语音信号的时域波形图和fft变换之后的频谱图
N = minlen;k = 0:N-1;t = 0:N-1;
figure;
subplot(3,2,1);plot(t,audio1);title('audio1原始信号时域波形图');xlabel('t');ylabel('audio1');
subplot(3,2,2);stem(k,abs(fftaudio1));title('audio1原始信号幅度谱');xlabel('w/pi');ylabel('fftaudio1');
subplot(3,2,3);plot(t,audio2);title('audio2原始信号时域波形图');xlabel('t');ylabel('audio2');
subplot(3,2,4);stem(k,abs(fftaudio2));title('audio2原始信号幅度谱');xlabel('w/pi');ylabel('fftaudio2');
subplot(3,2,5);plot(t,audio3);title('audio3原始信号时域波形图');xlabel('t');ylabel('audio3');
subplot(3,2,6);stem(k,abs(fftaudio3));title('audio3原始信号幅度谱');xlabel('w/pi');ylabel('fftaudio3');
figure;stem(k,abs(fft(audio3)));title('audio3原始信号幅度谱');xlabel('w/pi');ylabel('fftaudio3');
%各路语音信号分别与各自的高频载波相乘
%audio1的载波为5KHz
audio1modu = audio1'.*cos(2*pi*5000*t/fs);
figure;
subplot(3,1,1);stem(k,abs(fft(audio1modu)));title('audio1频谱搬移后的幅度谱');
xlabel('Hz');ylabel('幅度');
%audio2的载波为11.8KHz
audio2modu = audio2'.*cos(2*pi*11800*t/fs);
subplot(3,1,2);stem(k,abs(fft(audio2modu)));title('audio2频谱搬移后的幅度谱');
xlabel('Hz');ylabel('幅度');
%audio3的载波为18.6KHz
audio3modu = audio3'.*cos(2*pi*18600*t/fs);
subplot(3,1,3);stem(k,abs(fft(audio3modu)));title('audio3频谱搬移后的幅度谱');
xlabel('Hz');ylabel('幅度');
%获得复用信号
audiomodu = audio1modu + audio2modu + audio3modu;
figure;stem(k,abs(fft(audiomodu)));title('三路调制信号叠加后的幅度谱');
xlabel('Hz');ylabel('幅度');
%设计合适的数字带通滤波器,获得各个已调信号
%为第一路语音信号设计带通滤波器
w = 0:0.01:pi;
bandpass1 = bandpassfilter(5000,8400,4950,8450);
%数字滤波器的频谱响应
bandpass1z = freqz(bandpass1,1,w);
%将abs(H)转换成dB单位,方便画图观察
bandpass1Hs = 20*log10(abs(bandpass1z));
%画出第一路带通滤波器的幅度谱
figure;plot(w/pi,bandpass1Hs);title('信号1的数字带通滤波器的幅度谱');
xlabel('Normalized Frequency(*pi rad/sample)');ylabel('Magnitude(dB)');
%为第二路语音信号设计带通滤波器
bandpass2 = bandpassfilter(11800,15200,11750,15250);
%数字滤波器的频谱响应
bandpass2z = freqz(bandpass2,1,w);
%将abs(H)转换成dB单位,方便画图观察
bandpass2Hs = 20*log10(abs(bandpass2z));
%画出第二路带通滤波器的幅度谱
figure;plot(w/pi,bandpass2Hs);title('信号2的数字带通滤波器的幅度谱');
xlabel('Normalized Frequency(*pi rad/sample)');ylabel('Magnitude(dB)');
%为第三路语音信号设计带通滤波器
bandpass3 = bandpassfilter(18600,22000,18550,22050);
%数字滤波器的频谱响应
bandpass3z = freqz(bandpass3,1,w);
%将abs(H)转换成dB单位,方便画图观察
bandpass3Hs = 20*log10(abs(bandpass3z));
%画出第三路带通滤波器的幅度谱
figure;plot(w/pi,bandpass3Hs);title('信号3的数字带通滤波器的幅度谱');
xlabel('Normalized Frequency(*pi rad/sample)');ylabel('Magnitude(dB)');
%将传输信号送至带通滤波器获得各个已调信号
%第一路信号
audio1pass = filter(bandpass1,1,audiomodu);
figure;stem(k,abs(fft(audio1pass)));title('第一路已调信号的幅度谱');
xlabel('Hz');ylabel('幅度');
%第二路信号
audio2pass = filter(bandpass2,1,audiomodu);
figure;stem(k,abs(fft(audio2pass)));title('第二路已调信号的幅度谱');
xlabel('Hz');ylabel('幅度');
%第三路信号
audio3pass = filter(bandpass3,1,audiomodu);
figure;stem(k,abs(fft(audio3pass)));title('第三路已调信号的幅度谱');
xlabel('Hz');ylabel('幅度');
%将获得的各个已调信号解调
%第一路信号
figure;
audio1demodu = audio1pass.*cos(2*pi*5000*t/fs);
subplot(3,1,1);stem(k,abs(fft(audio1demodu)));title('audio1解调后的幅度谱');
xlabel('Hz');ylabel('幅度');
%第二路信号
audio2demodu = audio2pass.*cos(2*pi*11800*t/fs);
subplot(3,1,2);stem(k,abs(fft(audio2demodu)));title('audio2解调后的幅度谱');
xlabel('Hz');ylabel('幅度');
%第三路信号
audio3demodu = audio3pass.*cos(2*pi*18600*t/fs);
subplot(3,1,3);stem(k,abs(fft(audio3demodu)));title('audio3解调后的幅度谱');
xlabel('Hz');ylabel('幅度');
%低通滤波器
wp = 2*pi*3200/fs;ws = 2*pi*3600/fs;
deltaw = ws-wp;Nlow = ceil(6.6*pi/deltaw);Mlow = Nlow-1;
tlow = 0:Nlow-1;windlow = hamming(Nlow);windlow = windlow';
b = fir1(Mlow,(ws+wp)/2/pi,windlow);
w = 0:0.01:pi;
H = freqz(b,1,w);Hs = 20*log10(abs(H));
figure;plot(w/pi,Hs);xlabel('w/pi');ylabel('Fir-low-pass-filter');
title('Fir-low-pass-filter');
%将各已解调信号送至低通滤波器获得语音信号
%第一路
recover1 = filter(b,1,audio1demodu);
%第二路
recover2 = filter(b,1,audio2demodu);
%第三路
recover3 = filter(b,1,audio3demodu);
figure;
subplot(3,2,1);plot(t,recover1);title('audio1恢复信号时域波形图');xlabel('t');ylabel('audio1');
subplot(3,2,2);stem(k,abs(fft(recover1)));title('audio1恢复信号幅度谱');xlabel('w/pi');ylabel('fftaudio1');
subplot(3,2,3);plot(t,recover2);title('audio2恢复信号时域波形图');xlabel('t');ylabel('audio2');
subplot(3,2,4);stem(k,abs(fft(recover2)));title('audio2恢复信号幅度谱');xlabel('w/pi');ylabel('fftaudio2');
subplot(3,2,5);plot(t,recover3);title('audio3恢复信号时域波形图');xlabel('t');ylabel('audio3');
subplot(3,2,6);stem(k,abs(fft(recover3)));title('audio3恢复信号幅度谱');xlabel('w/pi');ylabel('fftaudio3');
%还原波形至音频
%第一路
player1 = audioplayer(recover1,fs);
play(player1);
pause(10);
%%第二路
player2 = audioplayer(recover2,fs);
play(player2);pause(10)
%第三路
player3 = audioplayer(recover3,fs);
play(player3);pause(10);