该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

Digital_Communication.m

这里面y是原始语音信号~yr是接收的语音信号~这里的Q2是单声道采样率为441000的wav文件~可以用wavplay函数来进行播放~~

y=wavread('Q2.wav');%读入信号

%test=zeros(1,length(y));%测试信号

yr=zeros(1,length(y));%接收信号

num=100;%将信号分100段发送

Rb=44100;%码率

fc=Rb*4;%载波频率

sample_num=10;%载波采样数目

Fs=fc*sample_num;%采样频率

multi=fc/Rb*sample_num;%采样频率比码率

y_q=y*2^15+abs(min(y)*2^15);

%%

N_error=0;%误码数目

for j=1:num

data=y_q(floor((j-1)*(length(y_q))/num)+1:floor(j*(length(y_q)/num)));%截取信号作为发送数

%(j-1)*floor((length(y))/num)+1

%j*floor((length(y))/num)

%test(floor((j-1)*(length(y))/num)+1:floor(j*(length(y)/num)))=data(1:end);

%data1=data*2^15;

%data2=data1+abs(min(data1));

dat_bin=dec_bin(data);%将信号量化为比特流

%dat_bin=[1 0 1 0 1 0 1 0 1 0];

dat_bin_i=logical(zeros(1,multi*length(dat_bin)));%插值

for i=1:length(dat_bin)

dat_bin_i((i-1)*multi+1:i*multi)=dat_bin(i);

end

%%

%调制

t=1/Fs:1/Fs:length(dat_bin_i)/Fs;

%产生载波并调制

Cr=sin(2*pi*fc*t);

S_d=dat_bin_i.*Cr;

%%

%加噪

An=0.3;

Noise=An*randn(size(S_d));

S_d=S_d+Noise;

%%

%解调

N=300; %滤波器的阶数为(N+1)

F=[0,fc-1000,fc+1000,Fs/2]*2/Fs;

A=[1,1,0,0];

lpf=firls(N,F,A);

dat_d=S_d.*Cr;%下变频

dat_f=conv(dat_d,lpf);%滤波

dat_temp=2*dat_f(N/2+1:N/2+length(dat_d)); %截断

dat_r=zeros(1,length(dat_bin));%抽取

dat_r=dat_temp(multi-5:multi:length(dat_temp));

dat_bin_r=dat_r>0.5;%判决

[Num1,Rat1]=biterr(dat_bin_r,dat_bin);%计算误码数

data_r=(bin_dec(dat_bin_r(1:end))-abs(min(y)*2^15))/2^15;

%dat_r=dat_temp

yr(floor((j-1)*(length(y))/num)+1:floor(j*(length(y)/num)))=data_r(1:end); N_error=N_error+Num1;

end

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐