📄 amodulate.m
字号:
clear
clc
echo on
df=0.2; %频率分辨率
t0=0.5; %定义t0信号的持续时间的值
tz=0.001; %定义采样时间
fz=1/tz;
fa=50; %定义载波频率
snr=10; %定义信噪比,用dB表示
snr_lin=10^(snr/10); %信噪比的数值
a=0.8; %定义调制系数
t=[0:tz:t0]; %定义出采样点数据
%定义信号m
m=zeros(1,501);
%next m(1:501) is generated
echo off
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
echo on
m=m/1000;
c=cos(2*pi*fa*t); %载波信号
m_n=m/max(abs(m)); %m归一化为m_n,以最大值为1
[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; %频率缩放
signal_power=ampower(u(1:length(t))); %信号功率
pmn=ampower(m(1:length(t)))/(max(abs(m)))^2; %调制信号功率 m和m_n对应的差0.125^2倍
eta=(a^2*pmn)/(1+a^2*pmn); %调制效率
noise_power=eta*signal_power/snr_lin;
noise_std=sqrt(noise_power); %噪声标准差
noise=noise_std*randn(1,length(u)); %高斯分布的噪声
r=u+noise;
[R,r,df1]=fftseq(r,tz,df);
R=R/fz; %频率缩放
pause
signal_power
pause
eta
pause
clf
%subplot(2,2,1)
subplot(3,3,1)
plot(t,m(1:length(t))) %调制信号曲线
axis([0 0.15 -2.1 2.1]);
xlabel('Time')
title('The message signal');
pause
%subplot(2,2,2)
subplot(3,3,2)
plot(t,u(1:length(t))) %已调制信号曲线
axis([0 0.15 -2.1 2.1]);
xlabel('Time')
title('The modulated signal');
pause
%subplot(2,2,3)
subplot(3,3,3)
plot(t,c(1:length(t))) %载波曲线
axis([0 0.15 -2.1 2.1]);
xlabel('Time')
title('The carrier');
pause
%subplot(2,1,1)
subplot(3,3,4)
plot(f,abs(fftshift(M))) %频域调制信号
xlabel('Frequency');
title('Spectrum of the message signal')
pause;
%subplot(2,1,2)
subplot(3,3,5)
plot(f,abs(fftshift(U))) %频域已调制信号
title('Spectrum of the modulated signal');
xlabel('Frequency')
pause
%subplot(2,1,1)
subplot(3,3,6)
plot(t,noise(1:length(t))) %噪声曲线
title('noise sample');
xlabel('Time')
pause
%subplot(2,1,2)
subplot(3,3,7)
plot(t,r(1:length(t))) %总信号的时域曲线
title('Signal and noise');
xlabel('Time')
pause
%subplot(2,1,2)
subplot(3,3,8)
plot(f,abs(fftshift(R))) %频域总信号曲线
title('Signal and noise spectrum');
xlabel('Frequency')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -