?? matlab_simulation_of_am_modulation.txt
字號:
am.m AM調制解調程序
% AM調制解調
clear all;
close all;
echo on
%----------------系統仿真參數
A=3; %直流分量
fc=250; %載波頻率(Hz)
t0=0.15;%信號時長
snr=25; %解調器輸入信噪比dB
dt=0.001% 系統時域采樣間隔
fs=1/dt;%系統采樣頻率
df = 0.2; %所需的頻率分辨率
t=0:dt:t0;
Lt=length(t);%仿真過程中,信號長度
snr_lin = 10^(snr/10); %信噪比
%-------------畫出調制信號波形及頻譜
% 產生模擬調制信號
m=[ones(1,t0/(3*dt)),-2*ones(1,t0/(3*dt)),zeros(1,t0/(3*dt)+1)];
L=2*min(m);
R=2*max(abs(m))+A;
pause%畫出調制信號波形及頻譜
clf
figure(1)
subplot(321);
plot(t,m(1:length(t)));% 畫出調制信號波形
axis([0 t0 -R/2 R/2]);
xlabel('t');
ylabel('調制信號');
等效帶寬
f_start=fc-Bw_eq;
f_cutoff=fc+Bw_eq;
plot(f,fftshift(abs(M)))% 畫出調制信號頻譜
xlabel('f');
ylabel('調制信號頻譜');
pause %畫出載波及頻譜
subplot(323);
c=cos(2*pi*fc*t);%載波
plot(t,c);
axis([0 t0 -1.2 1.2]);
xlabel('t');
ylabel('載波');
subplot(324)% 載波頻譜
[C,c,df1,f]=T2F(c,dt,df,fs);
plot(f,fftshift(abs(C)))% 畫出載波頻譜
xlabel('f');
ylabel('載波頻譜');
pause% 畫已調信號及其頻譜
subplot(325)% 畫已調信號
u=(A+m(1:Lt)).*c(1:Lt);%已調信號
plot(t,u);% 畫出已調信號波形
axis([0 t0 -R R]);
xlabel('t');
ylabel('已調信號');
subplot(326);
[U,u,df1,f]=T2F(u,dt,df,fs);
plot(f,fftshift(abs(U)))% 畫出已調信號頻譜
xlabel('f');
ylabel('已調信號頻譜');
%-----------將已調信號送入信道
%先根據所給信噪比產生高斯白噪聲
signal_power = power_x(u(1:Lt)); %已調信號的平均功率
noise_power=(signal_power*fs)/(snr_lin*(2* Bw_eq));%求出噪聲方差(噪聲均值為0)
noise_std = sqrt(noise_power); %噪聲標準偏差
noise = noise_std*randn(1,Lt); %產生噪聲
pause%畫出信道高斯白噪聲波形及頻譜,此時,噪聲已實現,為確知信號,可求其頻譜
figure(2)
subplot(321);
plot(t,noise);% 畫出噪聲波形
axis([0 t0 -R R]);
xlabel('t');
ylabel('噪聲信號');
subplot(322);
[noisef,noise,df1,f]=T2F(noise,dt,df,fs);%噪聲頻譜
plot(f,fftshift(abs(noisef)))% 畫出噪聲頻譜
xlabel('f');
ylabel('噪聲頻譜');
pause%畫出疊加了噪聲的已調信號波形及頻譜
sam=u(1:Lt)+noise(1:Lt);%疊加了噪聲的已調信號
subplot(323); %畫出疊加了噪聲的已調信號波形
plot(t,sam);
axis([0 t0 -R R]);
xlabel('t');
ylabel('信道中的信號');
subplot(324);
[samf,sam,df1,f]=T2F(sam,dt,df,fs);%求出疊加了噪聲的已調信號頻譜
plot(f,fftshift(abs(samf)))% 畫出疊加了噪聲的已調信號頻譜
xlabel('f');
ylabel('信道中信號頻譜');
[H,f]=bp_f(length(sam),f_start,f_cutoff,df1,fs,1);%求帶通濾波器
subplot(326);
plot(f,fftshift(abs(H)))% 畫出帶通濾波器
xlabel('f');
ylabel('帶通濾波器');
%-----------------經過帶通濾波器
pause%經過理想帶通濾波器后的信號及其頻譜
DEM = H.*samf; %濾波器輸出的頻譜
[dem]=F2T(DEM,fs);%濾波器的輸出波形
subplot(321)%經過理想帶通濾波器后的信號波形
plot(t,dem(1:Lt))%畫出經過理想帶通濾波器后的信號波形
axis([0 t0 -R R]);
xlabel('t');
ylabel('理想BPF輸出信號');
[demf,dem,df1,f]=T2F(dem(1:Lt),dt,df,fs);%求經過理想帶通濾波器后信號頻譜
subplot(322)
plot(f,fftshift(abs(demf)));% 畫出經過理想帶通濾波器后信號頻譜
xlabel('f');
ylabel('理想BPF輸出信號頻譜');
%--------------和本地載波相乘,即混頻
subplot(322);
[M,m,df1,f]=T2F(m,dt,df,fs);%求出調制信號頻譜
[Bw_eq]=signalband(M,df,t0);%求出信號
pause%混頻后的信號,先畫本地載波及其頻譜
subplot(323)
plot(t,c(1:Lt));
axis([0 t0 -1.2 1.2]);
xlabel('t');
ylabel('本地載波');
subplot(324)% 載波頻譜
[C,c,df1,f]=T2F(c(1:Lt),dt,df,fs);
plot(f,fftshift(abs(C)))% 畫出載波頻譜
xlabel('f');
ylabel('本地載波頻譜');
pause%再畫混頻后信號及其頻譜
der=dem(1:Lt).*c(1:Lt);%混頻
subplot(325)%畫出混頻后的信號
plot(t,der);
axis([0 t0 -R R]);
xlabel('t');
ylabel('混頻后的信號');
subplot(326)
[derf,der,df1,f]=T2F(der,dt,df,fs);%求混頻后的信號頻譜
plot(f,fftshift(abs(derf)))%畫出混頻后的信號的頻譜
xlabel('f');
ylabel('混頻后信號頻譜');
%----------該圖為figure(3)--------%
%--------------------經過低通濾波器
pause%畫出理想低通濾波器
figure(4)
[LPF,f]=lp_f(length(der),Bw_eq,df1,fs
,2);%求低通濾波器
subplot(322)
plot(f,fftshift(abs(LPF)));% 畫出理想低通濾波器
xlabel('f');
ylabel('理想LPF');
pause%混頻信號經理想低通濾波器后的頻譜及波形
DM = LPF.*derf; %理想低通濾波器輸出的頻譜
[dm]=F2T(DM,fs);%濾波器的輸出波形
subplot(323)
plot(t,dm(1:Lt));%畫出經過低通濾波器后的解調出的波形
axis([0 t0 -R R]);
xlabel('t');
ylabel('LPF輸出信號');
subplot(324)
[dmf,dm,df1,f]=T2F(dm(1:Lt),dt,df,fs);%求LPF輸出信號的頻譜
plot(f,fftshift(dmf));%畫出LPF輸出信號的頻譜
xlabel('f');
ylabel('LPF輸出信號頻譜');
axis([-fs/2 fs/2 0 0.5]);
%--------去除解調信號中的直流分量
pause%去除解調信號中的直流分量
dmd=dm(1:Lt)-mean(dm(1:Lt));
subplot(325)
plot(t,dmd);%畫出恢復信號(去除直流分
量)
axis([0 t0 -R/2 R/2]);
xlabel('t');
ylabel('恢復信號');
[dmdf,dmd,df1,f]=T2F(dmd,dt,df,fs);%求恢復信號的頻譜
subplot(326)
plot(f,fftshift(dmdf));%畫出恢復信號的頻譜
xlabel('f');
ylabel('恢復信號的頻譜');
axis([-fs/2 fs/2 0 0.2]);
subplot(321);
plot(t,m(1:Lt));% 畫出調制信號波形
axis([0 t0 -R/2 R/2]);
xlabel('t');
ylabel('調制信號');
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -