%DSB 调制解调
%1)输入信号波形;
%2)载波波形;
%3)AM信号波形及AM包络;
%4)相干解调后的信号波形;
%5)AM信号功率谱
clear
clc
close all
fs=100; % 采样率100Hz
t=0:1/fs:10; % 设置仿真时间起止以及步长
fc=10; % 载波10Hz
fm=1; % 调制信号1Hz 将输入信号幅值默认为1
mt=cos(2*pi*fm*t); % 定义调制信号
ct=cos(2*pi*fc*t); % 定义载波信号
psnt=ammod(mt,fc,fs); % DSB信号psnt
envelope=abs(hilbert(psnt)); % 使用函数计算DSB信号的上包络 取负可得下包络
% DSB相干解调
tmp=psnt.*ct;
[k,Wn,beta,ftype]=kaiserord([fc-fm fc+fm],[1 0],[0.05 0.01],fs); % 使用kaiser窗设计FIR滤波器
window=kaiser(k+1,beta);
b=fir1(k,Wn,ftype,window,'noscale'); % 使用标准频率响应的加窗设计函数
jt=filter(b,1,tmp); % 滤波
% 功率谱
nfft=1024;
window=hanning(256); % 构造hanning窗
noverlap=128;
range='onesided'; % 求0 - Fs/2范围
[ps,f]=pwelch(psnt,window,noverlap,nfft); % PWELCH方法估计功率谱
f=f./pi*fs/2; % 将f的单位化为Hz
%结果输出部分
subplot(5,1,1);%划分画图区间
plot(t,mt,'g');%画出调制信号波形
title('输入信号波形');
xlabel('Variable t');
ylabel('Variable mt');
axis([0 10 -1 1]);
subplot(5,1,2);
plot(t,ct,'b');%画出载波信号波形
title('输入载波波形');
xlabel('Variable t');
ylabel('Variable ct');
axis([2.5 5 -1 1]);%规定输出的坐标轴范围
subplot(5,1,3);
plot(t,psnt,'r');
hold on;
plot(t,envelope , 'g');
plot(t,-envelope, 'g');
hold off;
title('已调信号波形及包络');%画出已调信号波形及包络
xlabel('Variable t');
ylabel('Variable psnt');
axis([2.5 5 -1 1]);
subplot(5,1,4);
plot(t,jt);
title('相干解调输出');%画出相干解调后的波形图
xlabel('Variable t');
ylabel('Variable jt');
subplot(5,1,5);
plot(f,ps);
title('已调信号功率谱密度');%已调信号功率谱密度
xlabel('Variable f');
ylabel('Variable ps');