%AM信号调制解调
%% 符号说明
%m 调制信号 M 调制信号频谱 %A 直流信号
%c 载波信号 C 载波信号频谱 %noise 信道噪声 noisef 噪声信号频谱 %u 已调信号 U 已调信号频谱 %sam 信道中的信号 samf 信道中信号的频谱
Tm 经过理想带通滤波器后的信号 DEM %dm 经过理想低通滤波器后的信号 dmf %dmd 恢复信号 dmdf %H 理想带通滤波器频谱 %LPF 理想低通滤波器频谱
%% 变量定义 clear;clc;
A = 2; %直流分量
f0 = 1; %信源信号频率(Hz) E0 = 1; %信源信号振幅(V) E = 1; %载波分量振幅(V) fc = 10; %载波分量频率(Hz) t0 = 1; %信号时长
snr = 15; %解调器输入信噪比dB dt = 0.003; %系统时域采样间隔 fs = 1/dt; %系统采样频率
df = 0.001; %所需的频率分辨率 t = 0:dt:t0;
Lt = length(t); %仿真过程中,信号长度 snr_lin = 10^(snr/10);%解调器输入信噪比
%-------------画出调制信号波形及频谱 %产生模拟调制信号 m = E*cos(2*pi*f0*t)+A;
L = min(abs(m));%包络最低点 R = max(abs(m));%包络最高点 %画出调制信号波形和频谱 clf;
figure(1);
%% 调制信号波形及频谱 %画出调制信号波形 subplot(321);
经过理想带通滤波器后信号的频谱 经过理想低通滤波器后信号的频谱 恢复信号频谱 plot(t,m(1:length(t)));
axis([0,t0,L-0.3,R+0.3]);%设置坐标范围 xlabel('t');title('调制信号'); set(gca,'YTick', [0:1:R+0.3]);
[M,m,df1,f] = T2F_new(m,dt,df,fs); %求出调制信号频谱 [Bw_eq] = signalband(M,df,t0); %求出信号等效带宽
subplot(322);
plot(f,fftshift(abs(M))); %画出调制信号频谱 频谱序列
xlabel('f');title('调制信号频谱');
axis([-fc-5*f0,fc+5*f0,0,max(M)+0.3]); set(gca,'XTick',-10:10:10); set(gca,'XGrid','on');
%% 载波信号波形及频谱 %载波及其频谱 subplot(323);
c = cos(2*pi*fc*t); %载波 plot(t,c);
axis([0,t0,-E-0.2,E+0.2]); xlabel('t');title('载波');
subplot(324); %载波频谱 [C,c,df1,f] = T2F_new(c,dt,df,fs);
plot(f,fftshift(abs(C))); %画出载波频谱 xlabel('f');title('载波频谱');
axis([-fc-5*f0,fc+5*f0,0,max(C)+0.3]); set(gca,'XTick',-10:10:10); set(gca,'XGrid','on');
%% 已调信号波形及频谱 %已调信号及其频谱
subplot(325); %画已调信号 u = m(1:Lt).*c(1:Lt); plot(t,u);
axis([0,t0,-max(u)-0.5,max(u)+0.5]); xlabel('t');title('已调信号');
set(gca,'YTick', [-max(u):1:max(u)]);
subplot(326);
[U,u,df1,f] = T2F_new(u,dt,df,fs);
%M:傅里叶变换后的 plot(f,fftshift(abs(U))); %画出已调信号频谱 xlabel('f');title('已调信号频谱');
axis([-fc-5*f0,fc+5*f0,0,max(U)+0.3]); set(gca,'XTick',-10:10:10); set(gca,'XGrid','on');
%% 噪声信号波形及频谱 %将已调信号送入信道
%先根据所给信噪比产生高斯白噪声
signal_power = power_x(u(1:Lt)); %已调信号的平均功率
noise_power = (signal_power * fs)/(snr_lin*4*Bw_eq); %求出噪声方差(噪声均值为0) noise_std = sqrt(noise_power); %噪声标准差 noise = noise_std * randn(1,Lt); %产生噪声
%画出信道高斯白噪声波形及频谱,此时,噪声已实现,为确知信号,可求其频谱 figure(2);
subplot(321); plot(t,noise);
axis([0,t0,-max(noise),max(noise)]); xlabel('t');title('噪声信号');
subplot(322);
[noisef,noise,df1,f] = T2F_new(noise,dt,df,fs); %噪声频谱
plot(f,fftshift(abs(noisef))); %画出噪声频谱 xlabel('f');title('噪声频谱'); %%
%信道中的信号
sam = u(1:Lt) + noise(1:Lt);%叠加了噪声的已调信号频谱
subplot(323); plot(t,sam);
axis([0,t0,-max(sam),max(sam)]); xlabel('t');title('信道中的信号');
subplot(324);
[samf,sam,df1,f] = T2F_new(sam,dt,df,fs); %求出叠加了噪声的已调信号频谱 plot(f,fftshift(abs(samf))); %画出叠加了噪声的已调信号频谱 xlabel('f');title('信道中信号的频谱');
axis([-fc-5*f0,fc+5*f0,0,max(samf)+0.3]); set(gca,'XTick',-10:10:10); set(gca,'XGrid','on');
%%
f_start = fc - Bw_eq; %求出带通滤波器的起始频率 f_cutoff = fc + Bw_eq; %求出带通滤波器的截止频率
[H,f] = bp_f(length(sam),f_start,f_cutoff,df1,fs,1);%求带通滤波器 subplot(313);
plot(f,fftshift(abs(H))); %画出带通滤波器 xlabel('f');title('带通滤波器');
axis([-f_cutoff-1,f_cutoff+1,-0.05,1.05]);
%% 经过理想滤波器后的信号及其频谱 %----------------经过带通滤波器
DEM = H.*samf; %滤波器输出信号的频谱 [dem] = F2T_new(DEM,fs);%滤波器输出信号的波形
figure(3);
subplot(321); %经过理想带通滤波器后的信号波形 plot(t,dem(1:Lt)); %画出经过理想带通滤波器后的信号波形 axis([0,t0,-max(dem)-0.3,max(dem)+0.3]); xlabel('t');title('理想BPF输出信号');
[demf,dem,df1,f] = T2F_new(dem(1:Lt),dt,df,fs);%求经过理想带通滤波器后的信号频谱 subplot(322);
plot(f,fftshift(abs(demf))); %画出经过理想带通滤波器后信号频谱 xlabel('f');title('理想BPF输出信号频谱'); axis([-fc-5*f0,fc+5*f0,0,max(demf)+0.3]); set(gca,'XTick',-10:10:10); set(gca,'XGrid','on');
%% 载波信号波形及频谱
%--------------和本地载波相乘,即混频 subplot(323); plot(t,c(1:Lt));
axis([0,t0,-E-0.2,E+0.2]); xlabel('t');title('本地载波');
subplot(324); %频谱载波 [C,c,df1,f] = T2F_new(c(1:Lt),dt,df,fs); plot(f,fftshift(abs(C))); %画出载波频谱 xlabel('f');title('本地载波频谱');
axis([-fc-5*f0,fc+5*f0,0,max(C)+0.3]);
set(gca,'XTick',-10:10:10); set(gca,'XGrid','on'); %%
%再画出混频后信号及其频谱 der = dem(1:Lt).*c(1:Lt); %混频
%% 混频后的信号及功率谱密度
subplot(325); %画出混频后的信号 plot(t,der);
axis([0,t0,-0.1,R]);
xlabel('t');title('混频后的信号');
subplot(326);
[derf,der,df1,f] = T2F_new(der,dt,df,fs); %求出混频后的信号频谱 plot(f,fftshift(abs(derf))); %画出混频后的信号频谱 xlabel('f');title('混频后的信号频谱');
axis([-2*fc-5*f0,2*fc+5*f0,0,max(derf)+0.3]); set(gca,'XTick',-10:10:10); set(gca,'XGrid','on');
%% 理想低通滤波器 %-----------------经过低通滤波器 %画出理想低通滤波器 figure(4);
[LPF,f] = lp_f(length(der),Bw_eq,df1,fs,1); %求出低通滤波器
subplot(322);
plot(f,fftshift(abs(LPF))); %画出理想低通滤波器 xlabel('f');title('理想LPF');
axis([-f0-Bw_eq,f0+Bw_eq,-0.05,1.05]);
%% 经过低通滤波器后信号的波形及功率谱密度 %混频信号经过理想低通滤波器后的频谱及波形
DM = LPF.*derf; %理想低通滤波器输出的频谱 [dm] = F2T_new(DM,fs); %滤波器的输出波形
subplot(323);
plot(t,dm(1:Lt)); %画出经过低通滤波器后的解调波形 axis([0,t0+0.2,min(dm)-0.2,max(dm)+0.2]); xlabel('t');title('LPF输出信号'); set(gca,'YTick', [0:0.5:R+0.3]); set(gca,'YGrid','on');