2PSK的调制解调,编码解码,还有它的误码率,功率谱(语音信号的)
现成录制
%% --通信原理大作业-- %%
clear;
clc;
close all;
%% 音频录制
% 44100表示采样为44100Hz(可改为8000, 11025, 22050)等,此数值越大,录入的音质越好
% 8为用8bits存储,2为两通道即立体声(也可以改为1即单声道)
voice = audiorecorder(44100,8,2);
Rtime = 5; %录制时间
fprintf("录制倒计时:");pause(1);
fprintf('1...');pause(1);
fprintf('2...');pause(1);
fprintf('3...');pause(1);
fprintf("\n开始录制...");
recordblocking(voice,Rtime);
fprintf("\n结束录制...\n");MyRecording=getaudiodata(voice); %得到以n*2列数字矩阵存储的刚录制的音频信号
filename='myspeech.wav';
audiowrite(filename,MyRecording,44100);%MyRecording表示要存入的波形矩阵,44100表采样率,'myspeech'为存储的文件名
clear voice;
%% 信号预处理
Fs_low = 8e3; %降采样频率
[x,fs]=audioread(filename); %打开语音信号
x1 = x(:,2); %取单声道
Xn = resample(x1,Fs_low,fs); %降采样率
%% 预设参数
Eb_N0 = 1:10; %信道信噪比
Ts_low = 1/Fs_low; %降采样后的采样间隔
fc = 1e5; %载波频率
Fs = 8e6; %总采样率
Ts = 1/Fs;
T_end = length(x1)/fs; %采样时间终点
Time = Ts:Ts:T_end; %传输总时间片
N_sample = length(Time); %总采样点数
sig_rate = length(Xn)*8/T_end;%信号传输速率设定
t_sig = 1/sig_rate;
%% 原始信号处理
PCM_code = PCMencoding(Xn); %抽样信号编码
PCM_code = int8(reshape(PCM_code,1,[])); %变换为向量
PCM_len = length(PCM_code);DBNRZ_code = 2*PCM_code-1; %将PCM后的01码变为双极性不归零码%% 统一时间轴/对所有信号进行等采样率采样
NRZ_sample = zeros(1,N_sample);
msg_sample = zeros(1,N_sample);
carrier_sample = zeros(1,N_sample);
BPSK_sig = zeros(1,N_sample);idx1 = 1; %创建索引号
for i = 1:N_sampleidx1 = ceil(Time(i)/t_sig);if(idx1>PCM_len)idx1 = PCM_len;endNRZ_sample(i) = PCM_code(idx1);msg_sample(i) = DBNRZ_code(idx1);carrier_sample(i) = cos(2*pi*fc*Time(i)); %生成载波BPSK_sig(i) = msg_sample(i)*carrier_sample(i); %BPSK调制
end
%% 信号在AWGN信道中传输后被接收、解调、译码
demodu_sig = zeros(1,N_sample);
bit_error = zeros(1,length(Eb_N0));
str_error = zeros(1,length(Eb_N0));
SNR = zeros(1,length(Eb_N0));
for indx = 1:length(Eb_N0)%************信号通过AWGN信道*************%transf_sig = awgn(BPSK_sig,Eb_N0(indx),'measured'); %使信号在AWGN信道下传输%************将接收的信号解调*************%demodu_sig = transf_sig.*carrier_sample; %载波剥离%*****************信号累加****************%sum_Decode = sum_decode(demodu_sig,Time,t_sig,PCM_len);%*****************抽样判决****************%Judge_code = My_Judge(sum_Decode);%*******************译码******************%absolute_decode = (1+Judge_code)/2; %还原单极性01码temp_decode = reshape(absolute_decode,[],8); %矩阵变换便于PCM解码PCM_decode = PCMdecoding(temp_decode); %PCM解码Xn_decode = (PCM_decode/max(abs(PCM_decode)))'; %解码后归一化(数据还原)%****BPSK调制信号在AWGN信道下的性能分析****%SNR(indx) = mean(Xn.^2)/mean((Xn_decode-Xn).^2); %PCM量噪比[error1,bit_error(indx)] = biterr(PCM_code,absolute_decode); %传输信号误比特率
end
snr = 10.^(Eb_N0/10); %%信噪比转换为线性值
str_err_theo = 2*qfunc(sqrt(snr)*sin(pi/2)); %%理论误符号率
bit_err_theo = 1/log2(2)*str_err_theo; %%理论误比特率
%% 语音播放
sound(x,fs); %播放原始语音信号
pause(T_end);
sound(Xn_decode,Fs_low); %播放解码译码后的语音信号%% ------------------------- 画图部分 ---------------------------- %%
%%
%----------------画原始音频信号图-------------%
figure;
[F1,M1]=My_FFT(x,fs); %对原始信号做FFT变换
Ty = 1/fs;
Time_y = Ty:Ty:T_end;
subplot(2,1,1);
plot(Time_y,x); %做原始语音信号的时域波形图
title('原始语音信号时域图');
xlabel('时间(t/s)');ylabel('幅值');
subplot(2,1,2);
plot(F1,M1);title('原始语音信号频谱'); %做原始语音信号的频谱图
xlabel('频率(f/Hz)');ylabel('幅度');
clear F1 M1;
%%
%----------画基带信号的双极性不归零信号--------%
[F3,M3] = My_FFT(msg_sample,Fs);
figure;
subplot(211);
plot(Time,msg_sample);title('基带信号双极性不归零码波形');
axis([5e-3 10e-3 -2 2]);
xlabel('时间(t/s)');ylabel('幅值');
subplot(212);
plot(F3,M3);title('基带信号双极性不归零码的频谱图');
xlabel('频率(f/Hz)');ylabel('幅度');
clear F3 M3;
%%
%----------画基带信号的单极性不归零信号--------%
[F4,M4] = My_FFT(NRZ_sample,Fs);
figure;
subplot(211);
plot(Time,NRZ_sample);title('基带信号单极性不归零码波形');
axis([5e-3 10e-3 -1 2]);
xlabel('时间(t/s)');ylabel('幅值');
subplot(212);
plot(F4,M4);title('基带信号单极性不归零码的频谱图');
xlabel('频率(f/Hz)');ylabel('幅度');
clear F4 M4;
%%
%----------画基带信号的单极性RNZ和双极性NRZ功率谱--------%
[Am1,Freq1] = pwelch(NRZ_sample,[],[],[],Fs,'centered','power');
[Am2,Freq2] = pwelch(msg_sample,[],[],[],Fs,'centered','power');
figure;
Am1_db = 10*log10(Am1);
Am2_db = 10*log10(Am2);
subplot(211);
plot(Freq1,Am1_db);
title('基带信号单极性不归零码的功率谱');
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');grid;
subplot(212);
plot(Freq2,Am2_db);
title('基带信号双极性不归零码的功率谱');
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');grid;
%%
%--------绘制BPSK已调信号的时域图和频谱图------%
[F6,M6] = My_FFT(BPSK_sig,Fs);
[Am4,Freq4] = pwelch(BPSK_sig,[],[],[],Fs,'centered','power');
Am4_db = 10*log10(Am4);
figure;
subplot(311);
plot(Time,BPSK_sig);
axis([5e-5 10e-5 -2 2]);title('BPSK调制后的信号时域图');
xlabel('时间(t/s)');ylabel('幅值');
subplot(312);
plot(F6,M6);title('BPSK调制后的信号的频谱');
xlabel('频率(f/Hz)');ylabel('幅度');
subplot(313);
plot(Freq4,Am4_db);
title('BPSK调制后的信号的功率谱');
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');grid;
%clear F6 M6 Am4 Am4_db Freq4;% Phase = phase(F6); %相位
% figure;
% plot(F6,Phase);title('BPSK调制后的频谱(相位谱)');
% xlabel('频率(f/Hz)');ylabel('相位');
%%
%---------绘制单载波信号的时域图和频谱图--------%
[F7,M7] = My_FFT(carrier_sample,Fs);
[Am5,Freq5] = pwelch(carrier_sample,[],[],[],Fs,'centered','power');
Am5_db = 10*log10(Am5);
figure;
subplot(211);
plot(Time,carrier_sample);
axis([5e-5 10e-5 -2 2]);title('单载波信号时域波形图');
xlabel('时间(t/s)');ylabel('幅值');
subplot(212);
plot(Freq5,Am5_db);
title('单载波信号的功率谱');
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');grid;
subplot(313);
plot(F7,M7);title('单载波信号的频谱');
xlabel('频率(f/Hz)');ylabel('幅度');
clear F7 M7 Am5_db Am5 Freq5;
%%
%---绘制叠加高斯白噪声的已调信号的时域图和频谱图---%
[F8,M8] = My_FFT(transf_sig,Fs);
[Am6,Freq6] = pwelch(transf_sig,[],[],[],Fs,'centered','power');
Am6_db = 10*log10(Am6);
figure;
subplot(311);
plot(Time,transf_sig);
axis([5e-5 10e-5 -2 2]);title('叠加高斯白噪声的已调信号时域波形图');
xlabel('时间(t/s)');ylabel('幅值');
subplot(312);
plot(F8,M8);title('叠加高斯白噪声的已调信号的频谱');
xlabel('频率(f/Hz)');ylabel('幅度');
subplot(313);
plot(Freq6,Am6_db);
title('叠加高斯白噪声的已调信号的功率谱');
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');grid;
clear F8 M8 Am6_db Am6 Freq6;
%%
%--------绘制BPSK解调后信号的时域图和频谱图------%
[F9,M9] = My_FFT(demodu_sig,Fs);
[Am7,Freq7] = pwelch(demodu_sig,[],[],[],Fs,'centered','power');
Am7_db = 10*log10(Am7);
figure;
subplot(311);
plot(Time,demodu_sig);
axis([5e-3 10e-3 -2 2]);title('解调后信号时域波形图');
xlabel('时间(t/s)');ylabel('幅值');
subplot(312);
plot(F9,M9);title('解调后信号的频谱');
xlabel('频率(f/Hz)');ylabel('幅度');
subplot(313);
plot(Freq7,Am7_db);
title('解调后信号的功率谱');
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');grid;
clear F9 M9 Freq7 Am7_db Am7;
%%
recover_sig = zeros(1,N_sample);
idx2 = 1; %创建索引号
for i = 1:N_sampleidx2 = ceil(Time(i)/t_sig);if(idx2>PCM_len)idx2 = PCM_len;endrecover_sig(i) = Judge_code(idx2);
end
%----------解调、抽样判决后恢复信号--------%
[F4,M4] = My_FFT(recover_sig,Fs);
figure;
subplot(211);
plot(Time,recover_sig);title('抽样判决后恢复信号波形');
axis([5e-3 10e-3 -2 2]);
xlabel('时间(t/s)');ylabel('幅值');
subplot(212);
plot(F4,M4);title('抽样判决后恢复信号的频谱图');
xlabel('频率(f/Hz)');ylabel('幅度');
clear F4 M4;
%%
%--------------数字通信系统性能分析-------------%
% figure;
% semilogy(Eb_N0,bit_error,'-k*',Eb_N0,bit_err_theo,'-bp');
% title('BPSK载波调制信号在AWGN信道下的传输性能');
% xlabel('信噪比Eb/N0'); ylabel('误比特率/误码率');
% legend('仿真误比特率','理论误比特率');
%% 自定义函数
%%-------------自定义函数求fft便于画图-----------%%
function [f,m] = My_FFT(yt,fs)
Fw = abs(fft(yt));
if(iscolumn(yt) || isrow(yt))Fw = reshape(Fw,1,[]); %变换为行向量便于处理
elseif(size(yt,1)>size(yt,2))Fw = reshape(Fw,size(yt,2),[]);
end
n = length(yt); %采样点数
if(mod(n,2)==0)m = [Fw(fix(length(Fw)/2):-1:1),Fw(1:fix(length(Fw)/2))]; %双边谱
elsem = [Fw(fix(length(Fw)/2):-1:1),Fw(1:fix(length(Fw)/2)+1)]; %双边谱
end
m = reshape(m,1,[]);
f = (-n/2:n/2-1)*(fs/n); % 频率范围
end
%% 累加译码函数
function out_code = sum_decode(demodule_sig,Time,bit_period,bit_len)out_code = zeros(1,bit_len);temp = 0;idx_ex = 1;N_sample = length(Time);for k = 1:N_sampleidx = ceil(Time(k)/bit_period);if(idx > bit_len)idx = bit_len;endif(idx == 0) idx = 1;endif(idx > idx_ex)out_code(idx_ex) = temp;temp = 0;idx_ex = idx;elsetemp = temp + demodule_sig(k);endif(k == N_sample) out_code(idx) = temp;endend
end
%% PCM编码函数(非均匀量化)
function code = PCMencoding(speech)
% PCM编码
speech1=speech./max(abs(speech)).*2048; %数据量化
speech2=speech1;
LengthOfSpeech=length(speech2);
code = zeros(LengthOfSpeech,8);
for i=1:LengthOfSpeechif speech2(i)>0 %确定极性码B1=1;elseB1=0;endspeech2(i)=abs(speech2(i));C=[0 16 32 64 128 256 512 1024 2048];%A律13折现非均匀区间for j=1:length(C)-1if speech2(i)>=C(j)&&speech2(i)<=C(j+1)L=j-1;L1=dec2bin(L,3);B2=L1(1);B2=str2double(B2);B3=L1(2);B3=str2double(B3);B4=L1(3);B4=str2double(B4);endenda=C(L+1);%确定段内码b=C(L+2);[B5,a1,b1]=judge(speech2(i),a,b);[B6,a2,b2]=judge(speech2(i),a1,b1);[B7,a3,b3]=judge(speech2(i),a2,b2);[B8,~,~]=judge(speech2(i),a3,b3);code(i,1)=B1;code(i,2)=B2;code(i,3)=B3;code(i,4)=B4;code(i,5)=B5;code(i,6)=B6;code(i,7)=B7;code(i,8)=B8;
end
end%%
function decode = PCMdecoding(code)
% PCM译码
C2=[0,16;16,32;32,64;64,128;128,256;256,512;512,1024;1024,2048];
step=[1,1,2,4,8,16,32,64];
LengthOfSpeech=size(code,1);
temp = zeros(LengthOfSpeech,3);
for i=1:LengthOfSpeechtemp(i,1)=code(i,1);temp(i,2)=bin2dec(num2str(code(i,2:4)));temp(i,3)=bin2dec(num2str(code(i,5:8)));
end
decode = zeros(1,LengthOfSpeech);
for i=1:LengthOfSpeechdecode(i)=C2(temp(i,2)+1,1)+(temp(i,3)+0.5)*step(temp(i,2)+1);if temp(i,1)==0decode(i)=-decode(i);end
end
end
%% 抽样判决函数(硬判决)
function Judge_code = My_Judge(demodule_code)Judge_code = zeros(1,length(demodule_code));for i = 1:length(demodule_code)if(demodule_code(i)>0)Judge_code(i) = 1;elseJudge_code(i) = -1;endend
end
%% PCM编码函数判决
function [B,m1,n1]=judge(I,m,n)if I>=m&&I<(m+n)/2B=0;m1=m;n1=(m+n)/2;elseB=1;m1=(m+n)/2;n1=n;end
end
固定语音
%% --通信原理大作业-- %%
clear;
clc;
close all;filename='myspeech.wav'; % 填音频文件名
%% 信号预处理
Fs_low = 8e3; %降采样频率
[x,fs]=audioread(filename); %打开语音信号
x1 = x(:,2); %取单声道
Xn = resample(x1,Fs_low,fs); %降采样率
%% 预设参数
Eb_N0 = 1:10; %信道信噪比
Ts_low = 1/Fs_low; %降采样后的采样间隔
fc = 1e5; %载波频率
Fs = 4*fc; %总采样率
Ts = 1/Fs;
T_end = length(x1)/fs; %采样时间终点
Time = Ts:Ts:T_end; %传输总时间片
N_sample = length(Time); %总采样点数
sig_rate = length(Xn)*8/T_end;%信号传输速率设定
t_sig = 1/sig_rate;
%% 原始信号处理
PCM_code = PCMencoding(Xn); %抽样信号编码
PCM_code = int8(reshape(PCM_code,1,[])); %变换为向量
PCM_len = length(PCM_code);DBNRZ_code = 2*PCM_code-1; %将PCM后的01码变为双极性不归零码%% 统一时间轴/对所有信号进行等采样率采样
NRZ_sample = zeros(1,N_sample);
msg_sample = zeros(1,N_sample);
carrier_sample = zeros(1,N_sample);
BPSK_sig = zeros(1,N_sample);idx1 = 1; %创建索引号
for i = 1:N_sampleidx1 = ceil(Time(i)/t_sig);if(idx1>PCM_len)idx1 = PCM_len;endNRZ_sample(i) = PCM_code(idx1);msg_sample(i) = DBNRZ_code(idx1);carrier_sample(i) = cos(2*pi*fc*Time(i)); %生成载波BPSK_sig(i) = msg_sample(i)*carrier_sample(i); %BPSK调制
end
%% 信号在AWGN信道中传输后被接收、解调、译码
demodu_sig = zeros(1,N_sample);
bit_error = zeros(1,length(Eb_N0));
str_error = zeros(1,length(Eb_N0));
SNR = zeros(1,length(Eb_N0));
for indx = 1:length(Eb_N0)%************信号通过AWGN信道*************%transf_sig = awgn(BPSK_sig,Eb_N0(indx),'measured'); %使信号在AWGN信道下传输%************将接收的信号解调*************%demodu_sig = transf_sig.*carrier_sample; %载波剥离%*****************信号累加****************%sum_Decode = sum_decode(demodu_sig,Time,t_sig,PCM_len);%*****************抽样判决****************%Judge_code = My_Judge(sum_Decode);%*******************译码******************%absolute_decode = (1+Judge_code)/2; %还原单极性01码temp_decode = reshape(absolute_decode,[],8); %矩阵变换便于PCM解码PCM_decode = PCMdecoding(temp_decode); %PCM解码Xn_decode = (PCM_decode/max(abs(PCM_decode)))'; %解码后归一化(数据还原)%****BPSK调制信号在AWGN信道下的性能分析****%SNR(indx) = mean(Xn.^2)/mean((Xn_decode-Xn).^2); %PCM量噪比[error1,bit_error(indx)] = biterr(PCM_code,absolute_decode); %传输信号误比特率
end
snr = 10.^(Eb_N0/10); %%信噪比转换为线性值
str_err_theo = 2*qfunc(sqrt(snr)*sin(pi/2)); %%理论误符号率
bit_err_theo = 1/log2(2)*str_err_theo; %%理论误比特率
%% 语音播放
sound(x,fs); %播放原始语音信号
pause(T_end);
sound(Xn_decode,Fs_low); %播放解码译码后的语音信号%% ------------------------- 画图部分 ---------------------------- %%
%%
%----------------画原始音频信号图-------------%
figure;
[F1,M1]=My_FFT(x,fs); %对原始信号做FFT变换
Ty = 1/fs;
Time_y = Ty:Ty:T_end;
subplot(2,1,1);
plot(Time_y,x); %做原始语音信号的时域波形图
title('原始语音信号时域图');
xlabel('时间(t/s)');ylabel('幅值');
subplot(2,1,2);
plot(F1,M1);title('原始语音信号频谱'); %做原始语音信号的频谱图
xlabel('频率(f/Hz)');ylabel('幅度');
clear F1 M1;
%%
%----------画基带信号的双极性不归零信号--------%
[F3,M3] = My_FFT(msg_sample,Fs);
figure;
subplot(211);
plot(Time,msg_sample);title('基带信号双极性不归零码波形');
axis([5e-3 10e-3 -2 2]);
xlabel('时间(t/s)');ylabel('幅值');
subplot(212);
plot(F3,M3);title('基带信号双极性不归零码的频谱图');
xlabel('频率(f/Hz)');ylabel('幅度');
clear F3 M3;
%%
%----------画基带信号的单极性不归零信号--------%
[F4,M4] = My_FFT(NRZ_sample,Fs);
figure;
subplot(211);
plot(Time,NRZ_sample);title('基带信号单极性不归零码波形');
axis([5e-3 10e-3 -1 2]);
xlabel('时间(t/s)');ylabel('幅值');
subplot(212);
plot(F4,M4);title('基带信号单极性不归零码的频谱图');
xlabel('频率(f/Hz)');ylabel('幅度');
clear F4 M4;
%%
%----------画基带信号的单极性RNZ和双极性NRZ功率谱--------%
[Am1,Freq1] = pwelch(NRZ_sample,[],[],[],Fs,'centered','power');
[Am2,Freq2] = pwelch(msg_sample,[],[],[],Fs,'centered','power');
figure;
Am1_db = 10*log10(Am1);
Am2_db = 10*log10(Am2);
subplot(211);
plot(Freq1,Am1_db);
title('基带信号单极性不归零码的功率谱');
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');grid;
subplot(212);
plot(Freq2,Am2_db);
title('基带信号双极性不归零码的功率谱');
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');grid;
%%
%--------绘制BPSK已调信号的时域图和频谱图------%
[F6,M6] = My_FFT(BPSK_sig,Fs);
[Am4,Freq4] = pwelch(BPSK_sig,[],[],[],Fs,'centered','power');
Am4_db = 10*log10(Am4);
figure;
subplot(311);
plot(Time,BPSK_sig);
axis([5e-5 10e-5 -2 2]);title('BPSK调制后的信号时域图');
xlabel('时间(t/s)');ylabel('幅值');
subplot(312);
plot(F6,M6);title('BPSK调制后的信号的频谱');
xlabel('频率(f/Hz)');ylabel('幅度');
subplot(313);
plot(Freq4,Am4_db);
title('BPSK调制后的信号的功率谱');
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');grid;
%clear F6 M6 Am4 Am4_db Freq4;% Phase = phase(F6); %相位
% figure;
% plot(F6,Phase);title('BPSK调制后的频谱(相位谱)');
% xlabel('频率(f/Hz)');ylabel('相位');
%%
%---------绘制单载波信号的时域图和频谱图--------%
[F7,M7] = My_FFT(carrier_sample,Fs);
[Am5,Freq5] = pwelch(carrier_sample,[],[],[],Fs,'centered','power');
Am5_db = 10*log10(Am5);
figure;
subplot(211);
plot(Time,carrier_sample);
axis([5e-5 10e-5 -2 2]);title('单载波信号时域波形图');
xlabel('时间(t/s)');ylabel('幅值');
subplot(212);
plot(Freq5,Am5_db);
title('单载波信号的功率谱');
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');grid;
subplot(313);
plot(F7,M7);title('单载波信号的频谱');
xlabel('频率(f/Hz)');ylabel('幅度');
clear F7 M7 Am5_db Am5 Freq5;
%%
%---绘制叠加高斯白噪声的已调信号的时域图和频谱图---%
[F8,M8] = My_FFT(transf_sig,Fs);
[Am6,Freq6] = pwelch(transf_sig,[],[],[],Fs,'centered','power');
Am6_db = 10*log10(Am6);
figure;
subplot(311);
plot(Time,transf_sig);
axis([5e-5 10e-5 -2 2]);title('叠加高斯白噪声的已调信号时域波形图');
xlabel('时间(t/s)');ylabel('幅值');
subplot(312);
plot(F8,M8);title('叠加高斯白噪声的已调信号的频谱');
xlabel('频率(f/Hz)');ylabel('幅度');
subplot(313);
plot(Freq6,Am6_db);
title('叠加高斯白噪声的已调信号的功率谱');
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');grid;
clear F8 M8 Am6_db Am6 Freq6;
%%
%--------绘制BPSK解调后信号的时域图和频谱图------%
[F9,M9] = My_FFT(demodu_sig,Fs);
[Am7,Freq7] = pwelch(demodu_sig,[],[],[],Fs,'centered','power');
Am7_db = 10*log10(Am7);
figure;
subplot(311);
plot(Time,demodu_sig);
axis([5e-3 10e-3 -2 2]);title('解调后信号时域波形图');
xlabel('时间(t/s)');ylabel('幅值');
subplot(312);
plot(F9,M9);title('解调后信号的频谱');
xlabel('频率(f/Hz)');ylabel('幅度');
subplot(313);
plot(Freq7,Am7_db);
title('解调后信号的功率谱');
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');grid;
clear F9 M9 Freq7 Am7_db Am7;
%%
recover_sig = zeros(1,N_sample);
idx2 = 1; %创建索引号
for i = 1:N_sampleidx2 = ceil(Time(i)/t_sig);if(idx2>PCM_len)idx2 = PCM_len;endrecover_sig(i) = Judge_code(idx2);
end
%----------解调、抽样判决后恢复信号--------%
[F4,M4] = My_FFT(recover_sig,Fs);
figure;
subplot(211);
plot(Time,recover_sig);title('抽样判决后恢复信号波形');
axis([5e-3 10e-3 -2 2]);
xlabel('时间(t/s)');ylabel('幅值');
subplot(212);
plot(F4,M4);title('抽样判决后恢复信号的频谱图');
xlabel('频率(f/Hz)');ylabel('幅度');
clear F4 M4;
%%
%--------------数字通信系统性能分析-------------%
figure;
semilogy(Eb_N0,bit_error,'-k*',Eb_N0,bit_err_theo,'-bp');
title('BPSK载波调制信号在AWGN信道下的传输性能');
xlabel('信噪比Eb/N0'); ylabel('误比特率/误码率');
legend('仿真误比特率','理论误比特率');
%% 自定义函数
%%-------------自定义函数求fft便于画图-----------%%
function [f,m] = My_FFT(yt,fs)
Fw = abs(fft(yt));
if(iscolumn(yt) || isrow(yt))Fw = reshape(Fw,1,[]); %变换为行向量便于处理
elseif(size(yt,1)>size(yt,2))Fw = reshape(Fw,size(yt,2),[]);
end
n = length(yt); %采样点数
if(mod(n,2)==0)m = [Fw(fix(length(Fw)/2):-1:1),Fw(1:fix(length(Fw)/2))]; %双边谱
elsem = [Fw(fix(length(Fw)/2):-1:1),Fw(1:fix(length(Fw)/2)+1)]; %双边谱
end
m = reshape(m,1,[]);
f = (-n/2:n/2-1)*(fs/n); % 频率范围
end
%% 累加译码函数
function out_code = sum_decode(demodule_sig,Time,bit_period,bit_len)out_code = zeros(1,bit_len);temp = 0;idx_ex = 1;N_sample = length(Time);for k = 1:N_sampleidx = ceil(Time(k)/bit_period);if(idx > bit_len)idx = bit_len;endif(idx == 0) idx = 1;endif(idx > idx_ex)out_code(idx_ex) = temp;temp = 0;idx_ex = idx;elsetemp = temp + demodule_sig(k);endif(k == N_sample) out_code(idx) = temp;endend
end
%% PCM编码函数(非均匀量化)
function code = PCMencoding(speech)
% PCM编码
speech1=speech./max(abs(speech)).*2048; %数据量化
speech2=speech1;
LengthOfSpeech=length(speech2);
code = zeros(LengthOfSpeech,8);
for i=1:LengthOfSpeechif speech2(i)>0 %确定极性码B1=1;elseB1=0;endspeech2(i)=abs(speech2(i));C=[0 16 32 64 128 256 512 1024 2048];%A律13折现非均匀区间for j=1:length(C)-1if speech2(i)>=C(j)&&speech2(i)<=C(j+1)L=j-1;L1=dec2bin(L,3);B2=L1(1);B2=str2double(B2);B3=L1(2);B3=str2double(B3);B4=L1(3);B4=str2double(B4);endenda=C(L+1);%确定段内码b=C(L+2);[B5,a1,b1]=judge(speech2(i),a,b);[B6,a2,b2]=judge(speech2(i),a1,b1);[B7,a3,b3]=judge(speech2(i),a2,b2);[B8,~,~]=judge(speech2(i),a3,b3);code(i,1)=B1;code(i,2)=B2;code(i,3)=B3;code(i,4)=B4;code(i,5)=B5;code(i,6)=B6;code(i,7)=B7;code(i,8)=B8;
end
end%%
function decode = PCMdecoding(code)
% PCM译码
C2=[0,16;16,32;32,64;64,128;128,256;256,512;512,1024;1024,2048];
step=[1,1,2,4,8,16,32,64];
LengthOfSpeech=size(code,1);
temp = zeros(LengthOfSpeech,3);
for i=1:LengthOfSpeechtemp(i,1)=code(i,1);temp(i,2)=bin2dec(num2str(code(i,2:4)));temp(i,3)=bin2dec(num2str(code(i,5:8)));
end
decode = zeros(1,LengthOfSpeech);
for i=1:LengthOfSpeechdecode(i)=C2(temp(i,2)+1,1)+(temp(i,3)+0.5)*step(temp(i,2)+1);if temp(i,1)==0decode(i)=-decode(i);end
end
end
%% 抽样判决函数(硬判决)
function Judge_code = My_Judge(demodule_code)Judge_code = zeros(1,length(demodule_code));for i = 1:length(demodule_code)if(demodule_code(i)>0)Judge_code(i) = 1;elseJudge_code(i) = -1;endend
end
%% PCM编码函数判决
function [B,m1,n1]=judge(I,m,n)if I>=m&&I<(m+n)/2B=0;m1=m;n1=(m+n)/2;elseB=1;m1=(m+n)/2;n1=n;end
end
2PSK的调制解调,编码解码,还有它的误码率,功率谱(语音信号的)相关推荐
- 基于FPGA的2ASK、2FSK、2PSK的调制解调
文章目录 前言 一.顶层原理图 二.signalTap II 上的仿真图 三.部分代码贴出 总结 前言 这是自己的毕设总结,主要就是基于FPGA的调制解调器的设计.涉及到2ASK.2FSK.2PSK的 ...
- MATLAB实现2psk,2dpsk调制解调
目录 2psk 设计流程 代码 结果 2dpsk 设计流程 代码 结果 2psk 设计流程 (1)利用rand随机产生一组元素为10的数字序列. (2)根据2psk调制原理画调制信号. (3)根据相干 ...
- 基于64QAM调制解调的LDPC编译码算法误码率matlab仿真
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 LDPC译码从译码算法的实现角度可以将译码类型分为硬判决译码和软判决译码两种类型.其中,硬判决译码方 ...
- 西电B测——基于simulink的2PSK和2DPSK调制解调系统实现
这是学校的B级测试实验,仅供学习交流使用 误码率曲线绘制需要用到bertool工具: bertool工具教程: 通信专业Simulink---画误码率曲线(使用bertool工具)_Enpiyahh的 ...
- 4fsk调制matlab_数字调制解调技术的MATLAB与FPGA实现
<数字调制解调技术的MATLAB与FPGA实现>包含2个版本.Xilinx/VHDL版的设计平台为ISE14.7/VHDL,配套开发板为CXD301:Altera/Verilog版的设计平 ...
- QPSK调制解调过程,包括串并转换,电平转换,载波调制,相干解调,抽样判决等
目录 一.理论基础 二.核心程序 三.仿真结论 一.理论基础 QPSK是英文Quadrature Phase Shift Keying的缩略语简称,意为正交相移键控,是一种数字调制方式.在19世纪80 ...
- 正交解调 matlab,正交相位偏移键控(qpsk)调制解调系统simulink(matlab)建模分析毕业论文...
正交相位偏移键控(qpsk)调制解调系统simulink(matlab)建模分析毕业论文 重庆邮电大学本科毕业设计(论文)- I -编 号: 审定成绩: 设计(论文)题目: 正交相位偏移键控(QPSK ...
- 2ASK的调制解调,编码解码,还有它的误码率,功率谱(语音信号的)
%% --通信原理大作业-- %% clear; clc; close all;filename='myspeech.wav'; % 填音频文件名 %% 信号预处理 Fs_low = 8e3; %降采 ...
- DVB信道编解码与调制解调
DVB信道编解码与调制解调(一) 经过信源编码和系统复接后生成的节目传送码流,通常需要通过某种传输媒介才能到达用户接收机.传输媒介可以是广播电视系统(如地面电视广播系统.卫星电视广播系统或有线电视广播 ...
最新文章
- 真惨!连各大编程语言都摆起地摊了!
- Google Chrome 增加拦截恶意下载的支持
- 基于python的随机森林回归实现_随机森林理论与python代码实现
- 2012.2.9日晚亚马逊的一个错误链接截图
- 第二阶段冲刺第八天(6月7号)
- python mockito arg_that_编程高阶用法–开发者高频词汇
- 为什么我的眼里常含泪水,因为Mysql让我变的深沉(2021最新版mysql安装)
- 满足客户的需求是要有前提的!
- python 折线图 excel_如何使用python读取excel数据并绘制折线图
- msdn原版系统和原版office
- 纸鸢|物联设备PLC梯形图编程
- android椭圆形形框_什么是计算机硬件上的椭圆形Kong?
- BT级别的IC项目验证基本流程
- 宾果消消消鸿蒙版,宾果消消消官方版
- 5oSf6KeJ5Lul5ZCO5Y+v5Lul55SoYmFzZTY05Yqg5a+G6ZqP56yU
- 大班音乐机器人反思_大班音乐活动lbrack;机器人rsqb;
- Jersey框架和springmvc框架
- linux命令iconv_linux下命令——iconv用法
- MyEclipse老是提示 resetting selection 长耗时的问题
- [C语言编程练习][01]输入ASCII码值,输出对应的字符