📄 modulate_demodulate.m
字号:
function [R,noise_std]=modulate_demodulate(C,n1)
num=100;
a=1; %滚降系数
fd=2.4*10^3; % 基准采样率
fc=4*fd; % 载波频率.
fs=4*fd; % 信号的采样率 %q=fir1(32,fd*2.5/fsc);
fsc=4*fc; % 载波的采样率
T=1/fd; % 信号的周期
nnn1=floor(fs/fd);% 信号的周期内采样点的数目
%--------------------- 映射-------------------------------------
for i=1:n1
for j=1:n1
x(i,j)=C(i,j)*2-1;
end
end
%-----------------------脉冲成型-------------------------------
%----------------------均方根升弦成型序列----------------------
symbol_delay=8/2;
rscosnum=2*symbol_delay*nnn1+1; %3 定义滤波器长度。
g=rcosine(fd,fs,'fir/sqrt',a,symbol_delay);%FIR类型的均方根升余弦滤波器.输入数字信号抽样频率fd,
%滤波器的抽样频率是Fs,是fir/sqrt型的。
%滚降系数是1,采样延时是4;
pog=sum(g.*g);
g=g/sqrt(pog); %标准化
%----------------------------------------------------------------------
n=0;
for i=1:n1
for j=1:n1
n=n+1;
xx(n)=x(i,j);
end
end
x1=upsample(xx,fs/fd); %内插:将x扩展成4000,原因是成形滤波器的采样速率 200000 80000
%一般要求比输人符号速率要高(通常是其4~8倍)。因此,
%在此要有一个先于脉冲成形的过采样。此处设为4
y1=conv(x1,g); %成形:将X1和G进行卷积,4000个点卷积33个点结果是4032个点 200032 80032
%-----------------------------------载波调制---------------------------
yy=interp(y1,fsc/fs); %为了匹配载波的采样率而进行插值 16128 800128 320128
y_len=length(yy);
t=[1/fsc:1/fsc:y_len/fsc];
y=yy.*cos(2*pi*fc*t); %16128
signal_power=sum(y.*y/y_len*4);
%---------------------加入加性高斯白噪声------------------
snrcount_db=0:1:8;
%for l=1:9
%if snrcount_db(l)<9
snr_lin=10^(snrcount_db(9)/10); %线性SNR
noise_power=signal_power/snr_lin; % 噪声能量
noise_std=sqrt(noise_power); % 计算噪声标准差
pnr=noise_std*randn(1,length(y)); % 产生随即噪声
for n=1:length(y)
x2r(n)=y(n)+pnr(n);
end
%-------------------------------------------------------
%-----------------------------------载波解调----------------------
for i=1:length(x2r)
x3r(i)=x2r(i)*cos(2*pi*fc*i/fsc); % 载波解调,16128 800128 320128
end
q=fir1(32,fd*2.5/fsc); %33 这两句为通过低通滤波器,其实也可以省略
x4r=conv(q,x3r); %16160 fc*2/fsc 800160 320160
signal_6=decimate(x4r,fsc/fs); %对应于interp的插值 4040 200040 80040
%-------------------------------------------------------------------
% if l==1
%zz=eyediagram(signal_6,100); %看眼图
% % ww=scatterplot(signal_6,10); %看散射图
% end
%-----------------------匹配滤波器--------------------------------
g1=g;
x5r=conv(signal_6,g1); %4072 200072 80072
yyy=downsample(x5r,fs/fd); %对应于将1000变成4000的upsample,1018 50018 20018
%----------------------------------------------------------------
yyy_len=length(yyy);
R=yyy(10:yyy_len-9);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -