📄 ammodulate.m
字号:
tz=0.001; %采样时间
fz=1/tz;
df=0.2; %频率分辨率
snr=20; %定义信噪比,用dB表示
snr_lin=10^(snr/10); %信噪比的数值
t0=0.5; %定义t0信号的持续时间的值
fc=50; %载波频率
a=0.8; %定义调制系数
t=[0:tz:t0]; %定义出采样点数据
t1=[-8.190*t0-tz:tz:8.190*t0];
%定义信号m
m=zeros(1,501);
for i=1:1:125
m(i)=i;
end
for i=126:1:375
m(i)=m(125)-i+125;
end
for i=376:1:501
m(i)=m(375)+i-375;
end
m=m/100;
c=cos(2*pi*fc.*t); %载波
c1=cos(2*pi*fc.*t1); %载波
m_n=m/max(abs(m));
[M,m,df1]=fftseq(m,tz,df); %傅里叶变换
M=M/fz; %频率缩放,便于作图
f=[0:df1:df1*(length(m)-1)]-fz/2;%定义频率向量
u=(1+a*m_n).*c;
[U,u,df1]=fftseq(u,tz,df); %对已调信号作傅里叶变换
U=U/fz; %频率缩放
carry_power=ampower(c(1:length(t)));%计算载波功率
pmn=ampower(m(1:length(t))); %计算信号功率
signal_power=carry_power+pmn %计算已调信号功率
eta=pmn/signal_power; %计算调制效率
noise_power=signal_power/snr_lin;%计算噪声功率
noise_std=sqrt(noise_power); %噪声标准差
noise=noise_std*randn(1,length(u));%产生高斯分布的噪声
r=u+noise; %总接受信号
v=r.*c1;
[V,v,df1]=fftseq(v,tz,df); %对已调信号作傅里叶变换
V=V/fz; %频率缩放
[R,r,df1]=fftseq(r,tz,df); %对总信号进行弗里叶变换
R=R/fz; %频率缩放
Vg=zeros(1,501);
for i=1:1:501
Vg(i)=V(i+3846);
end
result=ifft((fftshift(Vg)))*1000;
%以下为结果显示
%pause使结果暂停,用户按任意健后继续执行
subplot(5,2,1)
plot(t,m(1:length(t))) %作出调制信号曲线
axis([0 0.5 -2.1 2.1]);
xlabel('Time');
title('The message signal');
subplot(5,2,3)
plot(t,u(1:length(t))) %作出已调制信号曲线
axis([0 0.5 -2.1 2.1]);
xlabel('Time');
title('The ammodulated signal');
subplot(5,2,7)
plot(t,c(1:length(t))) %作出载波曲线
axis([0 0.5 -2.1 2.1]);
xlabel('Time');
title('The carrier');
subplot(5,2,2)
plot(f,abs(fftshift(M))) %作出频域调制信号曲线
xlabel('Frequency');
title('Spectrum of the message signal');
subplot(5,2,4)
plot(f,abs(fftshift(U))) %作出频域已调制信号曲线
xlabel('Frequency');
title('Spectrum of the ammodulated signal');
subplot(5,2,8)
plot(t,noise(1:length(t))) %作出噪声信号曲线
axis([0 0.5 -1.5 1.5]);
xlabel('Time');
title('noise sample');
subplot(5,2,5)
plot(t,r(1:length(t))) %作出时域总信号曲线
axis([0 0.5 -2.1 2.1]);
xlabel('Time');
title('signal and noise');
subplot(5,2,6)
plot(f,abs(fftshift(R))) %作出频域总信号曲线
xlabel('Frequency');
title(' signal and noise Spectrum ');
subplot(5,2,9)
plot(t1+4.1,v(1:length(t1))) %作出时域总信号曲线
axis([0 0.5 -2.1 2.1]);
xlabel('Time');
title('乘以载波');
subplot(5,2,10)
plot(f,abs(fftshift(V))) %作出频域总信号曲线
xlabel('Frequency');
title(' 频谱 ');
signal_power %显示信号功率
eta %显示调制效率
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -