基于matlab的AM—DSB调制与解调并用GUI实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

机电信息工程学院
“通信电子线路”精品实验项目
实验报告
系别:电子信息工程系
专业:通信工程
班级:08级 1 班
实验题目:基于Matlab的AM-DSB调制系统仿真
学生姓名:***
指导教师:李厚杰,郭丽萍,孙炎辉
学期:2010—2011年度第一学期
基于Matlab 的AM-DSB 调制系统仿真
一、 实验类型(Experimental type )
设计性实验
二、 实验目的(Experimental purposes )
1.掌握振幅调制(amplitude demodulation, AM 以及 DSB )和解调(amplitude demodulation )原理。

2.学会Matlab 仿真软件在振幅调制和解调中的应用。

3.掌握参数设置方法和性能分析方法。

4.通过实验中波形的变换,学会分析实验现象。

三、 实验内容(Experiment contents )
1.设计AM-DSB 信号实现的Matlab 程序,输出调制信号、载波信号以及已调
2.号波形以及频谱图,并改变参数观察信号变化情况,进行实验分析。

3.设计AM-DSB 信号解调实现的Matlab 程序,输出并观察解调信号波形,分析实验现象。

四、 实验要求(Experimental requirements )
利用Matlab 软件进行振幅调制和解调程序设计,输出显示调制信号、
载波信号以及已调信号波形,并输出显示三种信号频谱图。

对产生波形进行分析,并通过参数的改变,观察波形变化,分析实验现象。

五、振幅调制原理
5.1振幅调制产生原理
所谓调制,就是在传送信号的一方将所要传送的信号附加在高频振荡上,再由天线发射出去。

这里高频振荡波就是携带信号的运载工具,也叫载波。

振幅调制,就是由调制信号去控制高频载波的振幅,直至随调制信号做线性变化。

在线性调制系列中,最先应用的一种幅度调制是全调幅或常规调幅,简称为调幅(AM )。

为了提高传输的效率,还有载波受到抑制的双边带调幅波(DSB )和单边带调幅波(SSB )。

在频域中已调波频谱是基带调制信号频谱的线性位移;在时域中,已调波包络与调制信号波形呈线性关系。

设正弦载波为
)cos()(0ϕω+=t A t c c
式中,A 为载波幅度;c ω为载波角频率;0ϕ为载波初始相位(通常假设0ϕ=0).
调制信号(基带信号)为)(t m 。

根据调制的定义,振幅调制信号(已调信号)一般可以表示为
)cos()()(t t Am t s c m ω=
设调制信号)(t m 的频谱为)(ωM ,则已调信号)(t s m 的频谱)(ωm S : )]()([2)(c c m M M A S ωωωωω-++= 5.2 两种调幅电路方案分析
(1)、标准调幅波(AM )产生原理
调制信号是只来来自信源的调制信号(基带信号),这些信号可以是模拟的,亦可以是数字的。

为首调制的高频振荡信号可称为载波,它可以是正弦波,亦可以是非正弦波(如周期性脉冲序列)。

载波由高频信号源直接产生即可,然后经过高频功率放大器进行放大,作为调幅波的载波,调制信号由低频信号源直接产生,二者经过乘法器后即可产生双边带的调幅波。

设载波信号的表达式为 t c ωcos ,调制信号的表达式为 t A t m m m ωcos )(= ,则调幅信号的表达式为
t t m A t s c AM ωcos )]([)(0+=
图5.1 标准调幅波示意图
(2)双边带调幅(DSB )产生原理
在AM 信号中,载波分量并不携带信息,信息完全由便在传送。

如果在AM 调制模型中将直流分量去掉,即可得到一种高调制效率的调制方式——抑制载波的双边带调幅波
双边带调幅波的表达式为
t mu t mu t u c m c cm )cos(21)cos(21)(0Ω-+Ω+=
ωω t t mu c cm Ω=cos cos ω 5.3信号解调思路
从高频已调信号中恢复出调制信号的过程称为解调(demodulation ),又称为检波(detection )。

对于振幅调制信号,解调(demodulation )就是从它的幅
)
(t m )
(t
度变化上提取调制信号的过程。

解调(demodulation )是调制的逆过程。

可利用乘积型同步检波器实现振幅的解调,让已调信号与本地恢复载波信号相乘并通过低通滤波可获得解调信号。

六.AM和DSB信号基于matlab的调制与解调(demodulation )
6.1载波信号与调制信号分析
% ======================载波信号=========================== t=-1:0.00001:1;
A0=10; %载波信号振幅
A1=5; %调制信号振幅
A2=3; %已调信号振幅
f=3000; %载波信号频率
w0=2*f*pi; m=0.15; %调制度
k=0.5 ; %DSB 前面的系数
Uc=A0*cos(w0*t); %载波信号
figure(1);
subplot(2,1,1);
plot(t,Uc);
title('载频信号波形');
axis([0,0.01,-15,15]);
subplot(2,1,2);
Y1=fft(Uc); %对载波信号进行傅里叶变换
plot(abs(Y1));title('载波信号频谱');
axis([5800,6200,0,1000000]);
图6.1载波信号
% ======================调制信号============================== t=-1:0.00001:1;
A0=10; %载波信号振幅
A1=5; %调制信号振幅
A2=3; %已调信号振幅
f=3000; %载波信号频率
w0=2*f*pi;
m=0.15; %调制度
k=0.5 ; %DSB 前面的系数
mes=A1*cos(0.001*w0*t); %调制信号
subplot(2,1,1);
plot(t,mes);
xlabel('t'),title('调制信号');
subplot(2,1,2);
Y2=fft(mes); % 对调制信号进行傅里叶变换
plot(abs(Y2));
title('调制信号频谱');
axis([198000,202000,0,1000000]);
如图6.2调制信号
% =======================AM已调信号========================= t=-1:0.00001:1;
A0=10; %载波信号振幅
A1=5; %调制信号振幅
A2=3; %已调信号振幅
f=3000; %载波信号频率
w0=2*f*pi;
m=0.15; %调制度
k=0.5 ; %DSB 前面的系数
mes=A1*cos(0.001*w0*t); %消调制信号
Uam=A2*(1+m*mes).*cos((w0).*t); %AM 已调信号
subplot(2,1,1);
plot(t,Uam);
grid on;
title('AM调制信号波形');
subplot(2,1,2);
Y3=fft(Uam); % 对AM已调信号进行傅里叶变换
plot(abs(Y3)),grid;
title('AM调制信号频谱');
axis([5950,6050,0,500000]);
如图6.3AM已调信号
% =======================DSB已调信号========================= t=-1:0.00001:1;
A0=10; %载波信号振幅
A1=5; %调制信号振幅
A2=3; %已调信号振幅
f=3000; %载波信号频率
w0=2*f*pi;
m=0.15; %调制度
k=0.5 ; %DSB 前面的系数
Uc=A0.*cos(w0*t); %载波信号
mes=A1*cos(0.001*w0*t); %调制信号
Udsb=k*mes.*Uc; %DSB 已调信号
subplot(2,1,1);
plot(t,Udsb);
grid on;
title('DSB已调信号波形');
axis([0,1,-40,40]);
subplot(2,1,2);
Y4=fft(Udsb); % 对DSB已调信号进行傅里叶变换
plot(abs(Y4)),grid;
title('DSB已调信号频谱');
axis([193960,194040,0,1300000]);
如图6.4 DSB已调信号
6.2 设计FIR和IIR数字低通滤波器
IIR滤波器和FIR滤波器的设计方法完全不同。

IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。

其设计步骤是:先设计过渡模拟滤波器得到系统函数H(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。

FIR滤波器比鞥采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。

对于线性相位滤波器,经常采用FIR滤波器。

对于数字高通、带通滤波器的设计,通用方法为双线性变换法。

可以借助于模拟滤波器的频率转换设计一个所需类型的过渡模拟滤波器,再经过双线性变换将其转换策划那个所需的数字滤波器。

具体设计步骤如下:
(1)确定所需类型数字滤波器的技术指标。

(2)将所需类型数字滤波器的边界频率转换成相应的模拟滤波器的边界频率,转换公式为Ω=2/T tan(0.5ω)
(3)将相应类型的模拟滤波器技术指标转换成模拟低通滤波器技术指标。

(4)设计模拟低通滤波器。

(5)通过频率变换将模拟低通转换成相应类型的过渡模拟滤波器。

(6)采用双线性变换法将相应类型的过渡模拟滤波器转换成所需类型的数字滤波器。

我们知道,脉冲响应不变法的主要缺点是会产生频谱混叠现象,使数字滤波器的频响偏离模拟滤波器的频响特性。

为了克服之一缺点,可以采用双线性变换法。

下面我们总结一下利用模拟滤波器设计IIR数字低通滤波器的步骤:
(1)确定数字低通滤波器的技术指标:通带边界频率、通带最大衰减,阻带截止频率、阻带最小衰减。

(2)将数字低通滤波器的技术指标转换成相应的模拟低通滤波器的技术指标。

(3)按照模拟低通滤波器的技术指标设计及过渡模拟低通滤波器。

(4)用双线性变换法,模拟滤波器系统函数转换成数字低通滤波器系统函数。

如前所述,IIR滤波器和FIR滤波器的设计方法有很大的区别。

下面我们着重介绍用窗函数法设计FIR滤波器的步骤。

如下:
(1)根据对阻带衰减及过渡带的指标要求,选择串窗数类型(矩形窗、三角窗、汉宁窗、哈明窗、凯塞窗等),并估计窗口长度N。

先按照阻带衰减选择窗函数类型。

原则是在保证阻带衰减满足要求的情况下,尽量选择主瓣的窗函数。

(2)构造希望逼近的频率响应函数。

(3)计算h(n).。

(4)加窗得到设计结果。

接下来,我们根据语音信号的特点给出有关滤波器的技术指标:
低通滤波器的性能指标:
通带边界频率fp=300Hz,阻带截止频率fc=320Hz,阻带最小衰减As=100db , 通带最大衰减Ap=1dB
在Matlab中,可以利用函数fir1设计FIR滤波器,利用函数butter,cheby1和ellip设计IIR滤波器,利用Matlab中的函数freqz画出各步步器的频率响应。

hn=fir1(M,wc,window),可以指定窗函数向量window。

如果缺省window 参数,则fir1默认为哈明窗。

其中可选的窗函数有Rectangular Barlrtt Hamming Hann Blackman窗,其相应的都有实现函数。

MATLAB信号处理工具箱函数buttp buttor butter是巴特沃斯滤波器设计函数,其有5种调用格式,本课程设计中用到的是
[N,wc]=butter(N,wc,Rp,As,’s’),该格式用于计算巴特沃斯模拟滤波器的阶
数N和3dB截止频率wc。

MATLAB信号处理工具箱函数cheblap,cheblord和cheeby1是切比雪夫I型滤波器设计函数。

我们用到的是cheeby1函数,其调用格式如下:
[B,A]=cheby1(N,Rp,wpo,’ftypr’)
[B,A]=cheby1(N,Rp,wpo,’ftypr’,’s’)
函数butter,cheby1和ellip设计IIR滤波器时都是默认的双线性变换法,所以在设计滤波器时只需要代入相应的实现函数即可。

下面我们将给出FIR和IIR数字滤波器的主要程序。

%=========================IIR低通滤波器======================= Ft=1000;
Fp=80; %通带边界频率
Fs=100; %阻带截止频率
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
fp=2*Ft*tan(wp/2);
fs=2*Fs*tan(wp/2);
[n11,wn11]=buttord(wp,ws,1,50,'s'); %求低通滤波器的阶数和截止频率
[b11,a11]=butter(n11,wn11,'s'); %求S域的频率响应的参数
[num11,den11]=bilinear(b11,a11,0.5); %双线性变换实现S域到Z域的变换
[h,w]=freqz(num11,den11); %根据参数求出频率响应
plot(w*800*0.5/pi,abs(h));
title('IIR低通滤波器');
legend('用巴特沃斯butter设计');
如图6.5 IIR低通滤波器
%=========================FIR低通滤波器======================= Ft=1000; %采样频率
fpts=[100 120]; %通带边界频率fp=100Hz,阻带截止频率fs=120Hz
mag=[1 0];
dev=[0.01 0.05]; %通带波动1%,阻带波动5%
[n21,wn21,beta,ftype]=kaiserord(fpts,mag,dev,Ft);%kaiserord估计采用凯塞窗设计的FIR 滤波器的参数
b21=fir1(n21,wn21,Kaiser(n21+1,beta)); %由fir1设计滤波器
[h,w]=freqz(b21,1); %得到频率响应
plot(w/pi,abs(h));
grid on
title('FIR低通滤波器');
如图6.6 FIR低通滤波器
6.3 AM、DSB解调
%=========================AM信号解调======================= t=-1:0.00001:1;
A0=10; %载波信号振幅
A1=5; %调制信号振幅
A2=3; %已调信号振幅
f=3000; %载波信号频率
w0=2*f*pi;
m=0.15; %调制度
k=0.5 ; %DSB 前面的系数
mes=A1*cos(0.001*w0*t); %调制信号
Uam=A2*(1+m*mes).*cos((w0).*t); %AM 已调信号
Dam=Uam.*cos(w0*t); %对AM调制信号进行解调
subplot(2,1,1);
plot(t,Dam);
grid on;
title('滤波前AM解调信号波形');
subplot(2,1,2);
Y5=fft(Dam); % 对AM解调信号进行傅里叶变换
plot(abs(Y5)),grid;
title('滤波前AM解调信号频谱');
axis([187960,188040,0,200000]);
如图6.7 AM解调信号
%=========================DSB信号解调======================= t=-1:0.00001:1;
A0=10; %载波信号振幅
A1=5; %调制信号振幅
A2=3; %已调信号振幅
f=3000; %载波信号频率
w0=2*f*pi;
m=0.15; %调制度
k=0.5 ; %DSB 前面的系数
Uc=A0.*cos(w0*t); %载波信号
mes=A1*cos(0.001*w0*t); %调制信号
Udsb=k*mes.*Uc; %DSB 已调信号
Ddsb=Udsb.*cos(w0*t); % 对DSB已调信号进行解调
subplot(2,1,1);
plot(t,Ddsb);
grid on;
title('滤波前DSB解调信号波形');
axis([0,1,-40,40]);
subplot(2,1,2);
Y6=fft(Ddsb); % 对DSB解调信号进行傅里叶变换
plot(abs(Y6)),grid;
title('滤波前DSB解调信号频谱');
axis([187960,188040,0,1300000]);
如图6.8 DSB解调信号
6.4对AM、DSB解调信号进行滤波
%=======================AM解调信号FIR滤波================= t=-1:0.00001:1;
A0=10; %载波信号振幅
A1=5; %调制信号振幅
A2=3; %已调信号振幅
f=3000; %载波信号频率
w0=2*f*pi;
m=0.15; %调制度
k=0.5 ; %DSB 前面的系数
Uc=A0.*cos(w0*t); %载波信号
subplot(5,2,1);
plot(t,Uc);
title('载波信号');
axis([0,0.01,-15,15]);
T1=fft(Uc);
subplot(5,2,2);
plot(abs(T1));
title('载波信号频谱');
axis([5800,6200,0,1000000]);
mes=A1*cos(0.001*w0*t); %调制信号
subplot(5,2,3);
plot(t,mes);
title('调制信号');
T2=fft(mes);
subplot(5,2,4);
plot(abs(T1));
title('调制信号频谱');
axis([192000,196000,0,2000000]);
Uam=A2*(1+m*mes).*cos((w0).*t); %AM 已调信号
subplot(5,2,5);
plot(t,Uam);
title('已调信号');
T3=fft(Uam);
subplot(5,2,6);
plot(abs(T3));
title('已调信号频谱');
axis([5950,6050,0,500000]);
Dam=Uam.*cos(w0*t); %对AM已调信号进行解调subplot(5,2,7);
plot(t,Dam);
title('滤波前的AM解调信号波形');
T4=fft(Dam); %求AM信号的频谱
subplot(5,2,8);
plot(abs(T4));
title('滤波前的AM解调信号频谱');
axis([187960,188040,0,200000]);
z21=fftfilt(b21,Dam); %FIR低通滤波
subplot(5,2,9);
plot(t,z21,'r');
title('滤波后的AM解调信号波形');
T5=fft(z21); %求AM信号的频谱
subplot(5,2,10);
plot(abs(T5),'r');
title('滤波后的AM解调信号频谱');
axis([198000,202000,0,200000]);
如图6.9 AM解调信号FIR低通滤波
%=======================AM解调信号IIR滤波================= t=-1:0.00001:1;
A0=10; %载波信号振幅
A1=5; %调制信号振幅
A2=3; %已调信号振幅
f=3000; %载波信号频率
w0=2*f*pi;
m=0.15; %调制度
k=0.5 ; %DSB 前面的系数
Uc=A0.*cos(w0*t); %载波信号
subplot(5,2,1);
plot(t,Uc);
title('载波信号');
axis([0,0.01,-15,15]);
T1=fft(Uc);
subplot(5,2,2);
plot(abs(T1));
title('载波信号频谱');
axis([5800,6200,0,1000000]);
mes=A1*cos(0.001*w0*t); %调制信号
subplot(5,2,3);
plot(t,mes);
title('调制信号');
T2=fft(mes);
subplot(5,2,4);
plot(abs(T1));
title('调制信号频谱');
axis([192000,196000,0,2000000]);
Uam=A2*(1+m*mes).*cos((w0).*t); %AM 已调信号
subplot(5,2,5);
plot(t,Uam);
title('已调信号');
T3=fft(Uam);
subplot(5,2,6);
plot(abs(T3));
title('已调信号频谱');
axis([5950,6050,0,500000]);
Dam=Uam.*cos(w0*t); %对AM已调信号进行解调subplot(5,2,7);
plot(t,Dam);
title('滤波前的AM解调信号波形');
T4=fft(Dam); %求AM信号的频谱
subplot(5,2,8);
plot(abs(T4));
title('滤波前的AM解调信号频谱');
axis([187960,188040,0,200000]);
z11=filter(num11,den11,Dam); %IIR滤波器滤波
subplot(5,2,9);
plot(t,z21,'r');
title('滤波后的AM解调信号波形');
T5=fft(z11); %求AM信号的频谱
subplot(5,2,10);
plot(abs(T5),'r');
title('滤波后的AM解调信号频谱');
axis([198000,202000,0,200000]);
如图6.10 AM解调信号IIR低通滤波
%=======================DSB解调信号FIR滤波=================== t=-1:0.00001:1;
A0=10; %载波信号振幅
A1=5; %调制信号振幅
A2=3; %已调信号振幅
f=3000; %载波信号频率
w0=2*f*pi;
m=0.15; %调制度
k=0.5 ; %DSB 前面的系数
Uc=A0.*cos(w0*t); %载波信号
subplot(5,2,1);
plot(t,Uc);
title('载波信号');
axis([0,0.01,-15,15]);
T1=fft(Uc);
subplot(5,2,2);
plot(abs(T1));
title('载波信号频谱');
axis([5800,6200,0,1000000]);
mes=A1*cos(0.001*w0*t); %调制信号
subplot(5,2,3);
plot(t,mes);
title('调制信号');
T2=fft(mes);
subplot(5,2,4);
plot(abs(T1));
title('调制信号频谱');
axis([192000,196000,0,2000000]);
Udsb=k*mes.*Uc; %DSB 已调信号
subplot(5,2,5);
plot(t,Udsb);
title('DSB已调波形');
subplot(5,2,6);
T3=fft(Udsb); % 对DSB已调信号进行傅里叶变换plot(abs(T3));
title('DSB已调频谱');
axis([193960,194040,0,1300000]);
Ddsb=Udsb.*cos(w0*t); % 对DSB调制信号进行解调subplot(5,2,7);
plot(t,Ddsb);
title('滤波前的DSB解调信号波形');
T4=fft(Ddsb); %求DSB信号的频谱subplot(5,2,8);
plot(abs(T4));
title('滤波前的DSB解调信号频谱');
axis([187960,188040,0,500000]);
z21=fftfilt(b21,Ddsb); %FIR低通滤波
subplot(5,2,9);
plot(t,z21,'r');
title('滤波后的DSB解调信号波形');
T5=fft(z21); %求DSB信号的频谱
subplot(5,2,10);
plot(abs(T5),'r');
title('滤波后的DSB解调信号频谱');
axis([198000,202000,0,200000]);
如图6.11 DSB调制信号FIR低通滤波
%=======================DSB解调信号IIR滤波=================== t=-1:0.00001:1;
A0=10; %载波信号振幅
A1=5; %调制信号振幅
A2=3; %已调信号振幅
f=3000; %载波信号频率
w0=2*f*pi;
m=0.15; %调制度
k=0.5 ; %DSB 前面的系数
Uc=A0.*cos(w0*t); %载波信号
subplot(5,2,1);
plot(t,Uc);
title('载波信号');
axis([0,0.01,-15,15]);
T1=fft(Uc);
subplot(5,2,2);
plot(abs(T1));
title('载波信号频谱');
axis([5800,6200,0,1000000]);
mes=A1*cos(0.001*w0*t); %调制信号
subplot(5,2,3);
plot(t,mes);
title('调制信号');
T2=fft(mes);
subplot(5,2,4);
plot(abs(T1));
title('调制信号频谱');
axis([192000,196000,0,2000000]);
Udsb=k*mes.*Uc; %DSB 已调信号
subplot(5,2,5);
plot(t,Udsb);
title('DSB已调波形');
subplot(5,2,6);
T3=fft(Udsb); % 对DSB已调信号进行傅里叶变换plot(abs(T3));
title('DSB已调频谱');
axis([193960,194040,0,1300000]);
Ddsb=Udsb.*cos(w0*t); % 对DSB调制信号进行解调subplot(5,2,7);
plot(t,Ddsb);
title('滤波前的DSB解调信号波形');
T4=fft(Ddsb); %求DSB信号的频谱subplot(5,2,8);
plot(abs(T4));
title('滤波前的DSB解调信号频谱');
axis([187960,188040,0,500000]);
z11=filter(num11,den11,Ddsb); %IIR滤波器滤波
subplot(5,2,9);
plot(t,z21,'r');
title('滤波后的DSB解调信号波形');
T5=fft(z11); %求DSB信号的频谱
subplot(5,2,10);
plot(abs(T5),'r');
title('滤波后的DSB解调信号频谱');
axis([198000,202000,0,200000]);
如图6.12 DSB调制信号IIR低通滤波
七、设计系统界面
7.1 系统界面设计工具—GUI概述
图形用户界面(graphical user interfaces ,GUI)则是由窗口、光标、按键、菜单、文字说明等对象(objects)构成的一个用户界面。

用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。

在MATLAB中GUI是一中包含多种对象的图形窗口,并为GUI开发提供一个方便高效的集成开发环境GUIDE。

GUIDE主要是一个界面设计工具集,MAYLAB将所有GUI支持度控件都集成在这个环境中,并提供界面
外观、属性和行为响应方式的设置方法。

GUIDE将设计好的GUI保存在一个FIG 文件中,同时生成M文件框架。

FIG文件:包括GUI图形窗口及其所有后裔的完全描述,包括所有对象属性的属性值。

它是一个二进制文件调用hsave课保存图形窗口时将生车该文件。

M文件包括GUI设计、控件函数以及定义为子函数的用户控件回调函数,主要用于控制GUI展开时的各种特征。

GUI创建包括界面设计和控件编程两部分,主要步骤如下。

第一步:通过设置GUIDE应用程序的选项来运行GUIDE;第二步:使用界面设计编辑器进行面设计;第三步:编写控件行为响应控制(即回调函数)代码。

7.2界面设计及使用说明
首先我们新建一个GUI文件:File/New/GUI 如下图所示:
如图7.1 创建GUI界面
选择Blank GUI(Default)。

布置如下图所示;
尽量将所有的程序仿真都布置在GUI界面中,同时在满足仿真要求的同时尽量保证其美观
如图7.2 布置GUI界面
7.3GUI演示过程
如图7.3 滤波前AM解调波形
如图7.4 滤波前DSB解调波形
如图7.5 GUI演示DSB解调滤波后的波形
八、结果分析
本设计圆满的完成了对AM—DSB信号实现调制与解调,与课题的要求十分相符;也较好的完成了对AM—DSB信号的时域分析,通过fft变换,得出了调制信号和解调信号的频谱图;在滤波这一部分,课题主要是从巴特沃斯滤波器入手来设计低通滤波器等入手,实现了预期的滤波效果。

在设计FIR低通滤波器的时候,通带边界频率设定为载波信号频率Fp=f,阻带截止频率Fs=f+20,采样频率Ft=8f;在设计IIR低通滤波器的时候,通带边界频率设定为Fp=f-50,阻带截止频率Fs=f,采样频率Ft=10f。

这样设定后,在改变载波信号频率的时候就有可能使滤波器无法进行正常的滤波,从而得不到正确的结果。

载波频率f可以选的高一些,在设计的时候时间采样t的间隔就要大一些。

完成了界面的设计,但也存在许多的不足,显示已定滤波前后的波形图,界面没有用到其它的一些控件,如列表框、下拉菜单等等,GUI的界面设计功能没能得到充分的发挥。

九、结束语
调制与解调技术是通信电子线路课程中一个重要的环节,也是实现通信必不可少的一门技术,也是通信专业学生必须掌握的一门技术。

课题在这里是把要处理的信号当做一种特殊的信号,即一种“复杂向量”来看待。

也就是说,课题更多的还是体现了数字信号处理技术。

从课题的中心来看,课题“基于Matlab的AM-DSB调制系统仿真”是希望将AM-DSB调制与解调技术应用于某一实际领域,这里就是指对信号进行调制。

作为存储于计算机中的调制信号,其本身就是离散化了的向量,我们只需将这些离散的量提取出来,就可以对其进行处理了。

这一过程的实现,用到了处理数字信号的强有力工具MATLAB。

通过MATLAB里几个命令函数的调用,很轻易的在调制信号与载波信号的理论之间搭了一座桥。

课题的特色在于它将调制信号看作一个向量,于是就把调制信号数字化了。

那么,就可以完全利用数字信号处理和通信电子线路的知识来解决AM—DSB调制问题。

我们可以像给一般信号做频谱分析一样,来对调制信号做频谱分析,也可以较容易的用数字滤波器来对解调信号进行滤波处理。

通过比较AM—DSB调制与解调前后,调制信号的频谱和时域,能明显的感觉到AM—DSB调制后AM—DSB解调与原始的调制信号有明显的不同,设计部同的滤波器得到的结果页是不同的,通过仿真可以看到FIR低通滤波器要比IIR低通滤波器要滤的好。

由此可见,调制信号主要分布在低频段,而载波信号主要分布在高频段。

最后,还利用了MATLAB的另一强大功能——GUI界面设计。

设计出了一个简易的用户应用界面,可以让人实现界面操作,更加方便的进行AM—DSB的频谱分析与调制和解调的滤波处理。

附录: GUI设计程序如下
function varargout = AM_DSB_Experiment_Platform_base_on_Matlab(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn',
@AM_DSB_Experiment_Platform_base_on_Matlab_OpeningFcn, ...
'gui_OutputFcn',
@AM_DSB_Experiment_Platform_base_on_Matlab_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function AM_DSB_Experiment_Platform_base_on_Matlab_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = AM_DSB_Experiment_Platform_base_on_Matlab_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function pushbutton1_Callback(hObject, eventdata, handles)
axes(handles.axes1)
cla;
global A0; %载波信号振幅
global w0;
global t %抽样时间
global Uc;
t=-1:0.00001:1;
Uc=A0.*cos(w0*t); %载波信号
plot(t,Uc);
title('载波信号');
axis([0,0.01,-15,15]);
T1=fft(Uc);
axes(handles.axes2)
cla;
plot(abs(T1));
title('载波信号频谱');
axis([5800,6200,0,1000000]);
function pushbutton2_Callback(hObject, eventdata, handles) axes(handles.axes1)
cla;
global A1; %调制信号振幅global w0;
global t ; %抽样时间
global mes;
mes=A1*cos(0.001*w0*t); %调制信号plot(t,mes);
title('调制信号波形');
T2=fft(mes);
axes(handles.axes2)
cla;
plot(abs(T2));
title('调制信号频谱');
axis([198000,202000,0,1000000]);
function pushbutton3_Callback(hObject, eventdata, handles) axes(handles.axes1)
cla;
global A2; %已调信号振幅global w0;
global t ; %抽样时间
global m ; %信号调制度global mes
global Uam;
Uam=A2*(1+m*mes).*cos((w0).*t); %AM 已调信号plot(t,Uam);
title('AM已调信号波形');
T3=fft(Uam);
axes(handles.axes2)
cla;
plot(abs(T3));
title('AM已调信号频谱');
axis([5950,6050,0,500000]);
% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
axes(handles.axes1)
cla;
global t ; %抽样时间
global m; %信号调制度
global k; %DSB信号振幅
global Udsb;
global Uc;
global mes;
Udsb=k*mes.*Uc; %DSB 已调信号
plot(t,Udsb);
grid on;
title('DSB已调信号波形');
axes(handles.axes2)
cla;
Y4=fft(Udsb); % 对DSB已调信号进行傅里叶变换
plot(abs(Y4)),grid;
title('DSB已调信号频谱');
axis([193960,194040,0,1300000]);
% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
axes(handles.axes1)
cla;
global b21;
Ft=2000; %采样频率
fpts=[100 120]; %通带边界频率fp=f Hz,阻带截止频率fs=f+20Hz
mag=[1 0];
dev=[0.01 0.05]; %通带波动1%,阻带波动5%
[n21,wn21,beta,ftype]=kaiserord(fpts,mag,dev,Ft);%kaiserord估计采用凯塞窗设计的FIR滤波器的参数
b21=fir1(n21,wn21,Kaiser(n21+1,beta)); %由fir1设计滤波器
[h,w]=freqz(b21,1); %得到频率响应
plot(w/pi,abs(h));
grid on
title('FIR低通滤波器');
% --- Executes on button press in pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)
axes(handles.axes2)
cla;
global num11;
global den11;
Ft=1500;
Fp=30; %通带边界频率
Fs=50; %阻带截止频率
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
fp=2*Ft*tan(wp/2);
fs=2*Fs*tan(wp/2);
[n11,wn11]=buttord(wp,ws,1,50,'s'); %求低通滤波器的阶数和截止频率[b11,a11]=butter(n11,wn11,'s'); %求S域的频率响应的参数
[num11,den11]=bilinear(b11,a11,0.5); %双线性变换实现S域到Z域的变换[h,w]=freqz(num11,den11); %根据参数求出频率响应
plot(w*800*0.5/pi,abs(h));
title('IIR低通滤波器');
legend('用巴特沃斯butter设计');
% --- Executes on button press in pushbutton7.
function pushbutton7_Callback(hObject, eventdata, handles)
axes(handles.axes1)
cla;
global w0;
global t ; %抽样时间
global Uam;
Dam=Uam.*cos(w0*t); %对AM已调信号进行解调
plot(t,Dam);
grid on;
title('滤波前AM解调波形');
axes(handles.axes2)
cla;
Y5=fft(Dam); % 对AM解调信号进行傅里叶变换
plot(abs(Y5)),grid;
title('滤波前AM解调频谱');
axis([187960,188040,0,200000]);
% --- Executes on button press in pushbutton8.
function pushbutton8_Callback(hObject, eventdata, handles)
axes(handles.axes1)
cla;
global w0;
global t;
global Udsb;
Ddsb=Udsb.*cos(w0*t); % 对DSB已调信号进行解调
plot(t,Ddsb);
grid on;
title('滤波前DSB解调波形');
axes(handles.axes2)
cla;
Y6=fft(Ddsb); % 对DSB已调信号进行傅里叶变换plot(abs(Y6)),grid;
title('滤波前DSB解调频谱');
axis([187960,188040,0,1300000]);
% --- Executes on button press in pushbutton9.
function pushbutton9_Callback(hObject, eventdata, handles)
axes(handles.axes1)
cla;
global w0;
global t;
global b21;
global Uam;
Dam=Uam.*cos(w0*t); %对AM调制信号进行解调z21=fftfilt(b21,Dam); %FIR低通滤波
plot(t,z21,'r');
title('滤波后的AM解调信号波形');
T5=fft(z21); %求AM信号的频谱
axes(handles.axes2)
cla;
plot(abs(T5),'r');
title('滤波后的AM解调信号频谱');
axis([198000,202000,0,200000]);
% --- Executes on button press in pushbutton10.
function pushbutton10_Callback(hObject, eventdata, handles)
axes(handles.axes1)
cla;
global w0;
global t;
global num11;
global den11;
global Uam;
Dam=Uam.*cos(w0*t); %对AM已调信号进行解调z11=filter(num11,den11,Dam); %IIR滤波器滤波
plot(t,z11,'r');
title('滤波后的AM解调信号波形');
T6=fft(z11); %求AM信号的频谱
axes(handles.axes2)
cla;
plot(abs(T6),'r');
title('滤波后的AM解调信号频谱');
axis([198000,202000,0,200000]);
% --- Executes on button press in pushbutton11.
function pushbutton11_Callback(hObject, eventdata, handles)
axes(handles.axes1)
cla;
global w0;
global t;
global Udsb;
global b21;
Ddsb=Udsb.*cos(w0*t); % 对DSB调制信号进行解调
z21=fftfilt(b21,Ddsb); %FIR低通滤波
plot(t,z21,'r');
title('滤波后的DSB解调信号波形');
T7=fft(z21); %求DSB信号的频谱
axes(handles.axes2)
cla;
plot(abs(T7),'r');
title('滤波后的DSB解调信号频谱');
axis([198000,202000,0,200000]);
% --- Executes on button press in pushbutton12.
function pushbutton12_Callback(hObject, eventdata, handles)
axes(handles.axes1)
cla;
global w0;
global t;
global Udsb;
global num11;
global den11;
Ddsb=Udsb.*cos(w0*t); % 对DSB调制信号进行解调
z11=filter(num11,den11,Ddsb); %IIR滤波器滤波
plot(t,z11,'r');
title('滤波后的DSB解调信号波形');
T8=fft(z11); %求DSB信号的频谱
axes(handles.axes2)
cla;
plot(abs(T8),'r');
title('滤波后的DSB解调信号频谱');
axis([198000,202000,0,200000]);
function pushbutton13_Callback(hObject, eventdata, handles)
close(gcbf);
quit;
function edit1_Callback(hObject, eventdata, handles)
global A0;
f1=str2double(get(handles.edit1,'string'));
A0=f1;
function edit1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit2_Callback(hObject, eventdata, handles)
global A1;
f2=str2double(get(handles.edit2,'string'));
A1=f2;
function edit2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit3_Callback(hObject, eventdata, handles)
global A2;
f3=str2double(get(handles.edit3,'string'));
A2=f3;
function edit3_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit4_Callback(hObject, eventdata, handles)
global k;
f4=str2double(get(handles.edit4,'string'));
k=f4;
function edit4_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit5_Callback(hObject, eventdata, handles)
global m;
f5=str2double(get(handles.edit5,'string'));
m=f5;
function edit5_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit6_Callback(hObject, eventdata, handles)
global w0;
global f;
f6=str2double(get(handles.edit6,'string'));
f=f6;
w0=2*f*pi;
function edit6_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end。

相关文档
最新文档