📄 gen_fm.m
字号:
function [x]=gen_dsb(fc,fs,fx,Ns,A,D,SNR)
%产生fm信号
%fc:carrier frequency
%fs:sampple frequency
%fx:bandwidth of message signal
%Ns:number of total samplles per segment
%A:carrier amplitude
%D:fm index
%SNR:snr of signal received
luo=0.98;
n=randn(Ns,1);
xm2=zeros(Ns,1);
for i=2:Ns
xm2(i,:)=luo*xm2(i-1)+n(i);
end;
%filt the message signal
Wn=fx/(fs/2);
fir_coef=fir1(30,Wn);
xm2=fftfilt(fir_coef,xm2);
%确定系数kf
kf=2*pi*fx*D/(max(xm2));
%由xm2计算其积分xm2_int
xm2_int=zeros(Ns,1);
xm2_int(1)=xm2(1)/fs;
xm2_int(2)=(xm2(1)+xm2(2))/(2*fs);
for i=3:Ns
temp=0;
for j=2:i-1
temp=temp+xm2(j);
end;
xm2_int(i)=(xm2(1)+xm2(i)+2*temp)/(2*fs);
end;
%fm modulation
for i=1:Ns
s(i,1)=A* cos(2*pi*fc*i/fs + kf*xm2_int(i));
end;
%band limitation on modulated signal
Wn=[(fc-(D+1)*fx)/(fs/2),(fc+(D+1)*fx)/(fs/2)];
fir_coef = fir1(30, Wn);
s=fftfilt(fir_coef, s);
%%% adding the bandlimited noise;
n=randn(Ns,1);
Wn2=[(fc-1.2*(D+1)*fx)/(fs/2),(fc+1.2*(D+1)*fx)/(fs/2)];
fir_coef2=fir1(30,Wn2);
n=fftfilt(fir_coef2,n);
Sp=sum(diag(s*s'));
Np=sum(diag(n*n'));
Rsn=sqrt(Sp/Np)*10^(-SNR/20);
%received signal
x=s+Rsn*n;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -