?? 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 + -