% 幅度调制 AM 信号输出和功率谱 程序清单
dt=0.001;%时间采样频谱
fmax=1;%信源最高频谱
fc=10;%载波中心频率
T=5;%信号时长
N=T/dt;
t=[0:N-1]*dt;
mt=sqrt(2)*cos(2*pi*fmax*t);%信源
A=2;
s_am=(A+mt).*cos(2*pi*fc*t);
[f,Xf]=FFT_SHIFT(t,s_am);%调制信号频谱
PSD=(abs(Xf).^2)/T;%调制信号功率谱密度
figure(1)
subplot(211);
plot(t,s_am);holdon;%画出AM信号波形
plot(t,A+mt,'r--');%表示AM包络
title('AM调制信号及其包络');
xlabel('t');
subplot(212);%画出功率谱图形
plot(f,PSD);
axis([-2*fc 2*fc 0 1.5*max(PSD)]);
title('AM信号功率谱');
xlabel('f');
% -----------------------------------------------------
% 抑制载波双边带调制 DSB
dt=0.001;%时间采样频谱
fmax=1;%信源最高频谱
fc=10;%载波中心频率
T=5;%信号时长
t=0:dt:T;
mt=sqrt(2)*cos(2*pi*fmax*t);%信源
s_dsb=mt.*cos(2*pi*fc*t);
[f,sf]=FFT_SHIFT(t,s_dsb);%调制信号频谱
PSD=(abs(sf).^2)/T;%调制信号功率谱密度
figure(1)
subplot(211)
plot(t,s_dsb);holdon;%画出DSB信号波形
plot(t,mt,'r--');%标示mt波形
title('DSB调制信号及其包络');
xlabel('t');
subplot(212)
plot(f,PSD);
axis([-2*fc 2*fc 0 max(PSD)]);
title('DSB信号功率谱');
xlabel('f');
% ---------------------------------------------------------
% 单边带调制 SSB
dt=0.001;%时间采样频谱
fmax=1;%信源最高频谱
fc=10;%载波中心频率
T=5;
t=0:dt:T;
mt=sqrt(2)*cos(2*pi*fmax*t);%信源
s_ssb=real(hilbert(mt).*exp(j*2*pi*fc*t));
[f,sf]=FFT_SHIFT(t,s_ssb);%单边带信号频谱
PSD=(abs(sf).^2)/T;%单便带信号功率谱
figure(1)
subplot(211)
plot(t,s_ssb);holdon;%画出SSB信号波形
plot(t,mt,'r--');%标示mt的包络
title('SSB调制信号');
xlabel('t');
subplot(212)
plot(f,PSD);
axis([-2*fc 2*fc 0 max(PSD)]);
title('SSB信号功率谱');
xlabel('f');
% --------------------------------------------
% 调用函数
function [f, sf]=FFT_SHIFT(t, st)
%This function is FFT to calculate a signal’s Fouriertransform
%Input: t: sampling time , st : signal data. Time length mustgreater thean 2
%output: f : sampling frequency , sf: frequen
%output is the frequency and the signal spectrum
dt=t(2)-t(1);
T=t(end);
df=1/T;
N=length(t);
f=[-N/2:N/2-1]*df;
sf=fft(st);
sf=T/N*fftshift(sf);
% ---------------------------------------
% 显示模拟调制的波形及其解调方法VSB,文件名:VSB.m
% Signal
dt=0.001;
fmax=5;
fc=20;
T=5;
N=T/dt;
t=[0:N-1]*dt;
mt=sqrt(2)*(cos(2*pi*fmax*t)+sin(2*pi*0.5*fmax*t));
% VSB modulation
s_vsb=mt.*cos(2*pi*fc*t);
B1=0.2*fmax;
B2=1.2*fmax;
[f,sf]=FFT_SHIFT(t,s_vsb);
[t,s_vsb]=vsbmd(f,sf,B1,B2,fc);
% Power Spectrum Density
[f,sf]=FFT_SHIFT(t,s_vsb);
PSD=(abs(sf).^2)/T;
% Plot VSB and PSD
figure(1)
subplot(211)
plot(t,s_vsb);hold on;
plot(t,mt,'r--');
title('VSB调制信号');
xlabel('t');
subplot(212)
plot(f,PSD);
axis([-2*fc 2*fc0 max(PSD)]);
title('VSB信号功率谱');
xlabel('f');
%----------------------------------------------------
function [t,st]=vsbmd(f,sf,B1,B2,fc)
% This function is a residual bandpass filter
% Inputs f: sample frequency, sf: frequencyspectrum data
%B1: residual bandwidth, B2: highest freq of the basebandsignal
% Outputs t:sample time, st: signal data
df=f(2)-f(1);
T=1/df;
hf=zeros(1,length(f));
bf1=[floor((fc-B1)/df):floor((fc+B1)/df)];
bf2=[floor((fc-B1)/df)+1:floor((fc+B2)/df)];
f1=bf1+floor(length(f)/2);
f2=bf2+floor(length(f)/2);
stepf=1/length(f1);
hf(f1)=0:stepf:1-stepf;
hf(f2)=1;
f3=-bf1+floor(length(f)/2);
f4=-bf2+floor(length(f)/2);
hf(f3)=0:stepf:(1-stepf);
hf(f4)=1;
yf=hf.*sf;
[t,st]=IFFT_SHIFT(f,yf);
st=real(st);
%------------------------------------
function [t,st]=IFFT_SHIFT(f,Sf)
df=f(2)-f(1);
fmax=(f(end)-f(1)+df);
dt=1/fmax;
N=length(f);
t=[0:N-1 ]*dt;
Sf=fftshift(Sf);
st=fmax*ifft(Sf);
st=real(st);
%参考书:赵鸿图 茅艳通信原理MATLAB仿真教材[M]. 人民邮电出版社
p125 【例 5-4】 【例 5-5】 【例5-6】 【例5-7】