数学建模社区-数学中国

标题: FM调制解调系统 [打印本页]

作者: 李秋锐    时间: 2015-2-1 19:22
标题: FM调制解调系统
%FM调制解调系统.m, E/ o1 y6 Z% m7 R4 R  h
%频率调制与解调的Matlab演示源程序
! U: ^& J: R0 _# @# q0 K%可以任意改原调制信号函数m(t)% v: A; w$ A7 w4 Q6 T
%电子信息工程  杜怀超 091308305  
# {8 p# s# ?3 m. V%·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·
& e$ p( w- X& D%*****************初始化******************; _" T2 j" B2 `8 z7 q, u
echo   off       . r, z" f$ B+ a  `% f2 S, E& X4 p, S
close  all/ m) }5 e) `* I+ u: V
clear  all  b& T4 O) Y& @; @/ w! \* p
clc
7 s% }& E! x8 q, w%*****************************************
1 l/ G+ t+ E& m* i. M2 C%·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·, A( J5 q9 A( J  c# w7 |
%****************FM调制*******************6 t3 R  I! O) y6 t
dt=0.001;                                   %设定时间步长1 A3 }$ T+ x# n+ W, V1 W2 p* d
t=0:dt:1.5;                                       %产生时间向量
. h- n9 B4 O$ {2 H6 J7 v4 h+ ?am=5;                                      %设定调制信号幅度# |: E8 b6 {1 A1 l1 H/ s, C
fm=5;                                      %设定调制信号频率
3 p( v/ `2 b& i& pmt=am*cos(2*pi*fm*t);                        %生成调制信号
3 U! [) v9 ^+ K$ Qfc=50;                                      %设定载波频率* ^) M9 Z& a1 r+ w
ct=cos(2*pi*fc*t);                             %生成载波
, I. s% X( _' Z2 C6 z% l0 _& ukf=10;                                      %设定调频指数
, e7 o3 `( E% @' @& ]$ Rint_mt(1)=0;3 f3 A- k$ s# t6 O8 R3 J% b
for i=1:length(t)-1  
4 R1 D6 Q; A" y  M. T; t( i    int_mt(i+1)=int_mt(i)+mt(i)*dt;               %求信号m(t)的积分
1 D8 l$ ?8 P2 J8 Uend                                          %调制,产生已调信号
* @9 `2 X0 ]7 H' E. {0 }sfm=am*cos(2*pi*fc*t+2*pi*kf*int_mt);            %调制信号
' U( x) t5 W2 d7 F. k0 t, B& P%*****************************************
8 o1 W' e2 X$ Z/ @# E* c! Z& b%·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·; Q( c# g2 O- F4 g4 x# b/ K# D5 X: S
%*************添加高斯白噪声**************
% ]% M$ ]& B7 U$ j, u6 H! Tsn1=10;                                     %设定信躁比(小信噪比)
3 s& D8 p7 n. w6 A: ksn2=30;                                     %设定信躁比(大信噪比)' N' U( V0 m* K& ]! S3 I. g5 U6 A
sn=0;                                       %设定信躁比(无信噪比)
+ M/ |! J% T' cdb=am^2/(2*(10^(sn/10)));                     %计算对应的高斯白躁声的方差5 q+ X1 L2 ?3 ?
n=sqrt(db)*randn(size(t));                      %生成高斯白躁声
+ z) ], r3 g$ e" f0 o  m- dnsfm=n+sfm;                                %生成含高斯白躁声的已调信号(信号通- O+ c' p% c7 P4 k
%过信道传输)& v6 p( A2 M* ]5 Q( u  q
%****************************************** b) Y$ e8 X' q" S! ?
%·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·
7 t* I' F! u- G$ r5 c0 x%****************FM解调*******************' K& V; }" M1 u; V6 K+ o; K# q
for i=1:length(t)-1                             %接受信号通过微分器处理! l2 s; e$ J7 I* i" f. I& S
    diff_nsfm(i)=(nsfm(i+1)-nsfm(i))./dt;$ \- H. ]8 }! ~( S; z  U5 Q
end# H% Q# ~& Z6 @5 E
diff_nsfmn = abs(hilbert(diff_nsfm));     %hilbert变换,求绝对值得到瞬时幅度(包络检波)
0 ~/ _+ l0 u8 e, T- i1 h8 e& `zero=(max(diff_nsfmn)-min(diff_nsfmn))/2;& {7 m2 s" \: Y0 l4 w% m' `
diff_nsfmn1=diff_nsfmn-zero;9 V: s2 O' h9 f7 V9 e  s
%*****************************************# c7 Z1 M5 R0 W; l# T
%·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·
0 m5 N5 b5 T4 A1 _) R! q8 f%**************时域到频域转换**************
1 u6 k9 o: Y! U6 P& [6 ]2 K* t& lts=0.001;                                    %抽样间隔
1 h" e4 |0 b8 q/ |: L) R7 q) R4 h: h' `fs=1/ts;                                      %抽样频率4 k5 F. z+ z& n, p6 j
df=0.25;                                     %所需的频率分辨率,用在求傅里叶变换: w0 x7 ?7 ^$ j
%                      时,它表示FFT的最小频率间隔, O: _( \- ^6 R1 Y! M# b
%*****对调制信号m(t)求傅里叶变换*****! P# m$ c* p8 I) [
m=am*cos(2*pi*fm*t);                         %原调信号
/ N- {  m( l9 r" ]fs=1/ts;) j3 n! x' d2 g5 I
if nargin==2# R7 S, H, F. W. M' |3 G
    n1=0;8 S9 g" l8 [" P
else2 b$ W( }" v8 M* W& M$ f
    n1=fs/df;
$ r- m* G2 X% e0 J' Y+ Send9 u1 k* {- ]5 \% d7 C8 |! q
n2=length(m);
3 @8 S! C5 |! H. z- }n=2^(max(nextpow2(n1),nextpow2(n2)));
* B3 o5 O% H* A; r: J1 DM=fft(m,n);
8 O& d7 B: P. A7 s" ?& w- j' _m=[m,zeros(1,n-n2)];
8 e# P( r8 e! u0 y1 w. Ndf1=fs/n;                                   %以上程序是对调制后的信号u求傅里变换  m( c6 @' q6 g7 ?
M=M/fs;                                   %缩放,便于在频铺图上整体观察7 E2 ~( p, {+ H. l7 J/ B; Z( d
f=[0:df1:df1*(length(m)-1)]-fs/2;                %时间向量对应的频率向量. o% K8 K+ J# {) F% g# e
5 }$ K5 h) W9 M$ ~- i5 Z2 e8 r6 v
%************对已调信号u求傅里变换**********5 Y7 G! l( M; ?
fs=1/ts;; b: m1 b) c0 a2 b
if nargin==2
6 D* V. O, @0 l$ S    n1=0;( z( o+ Q6 O7 p3 X/ v; x2 L$ U
else: y$ o+ ^7 B5 t* g0 l4 o
    n1=fs/df;9 l! n  w6 r; {5 H  P# ?
end" }6 m. n/ {* E
n2=length(sfm);
& I+ @- H: e# N1 H4 bn=2^(max(nextpow2(n1),nextpow2(n2)));( K) [/ [* W9 F1 T& l8 w
U=fft(sfm,n);) ~/ o" I. q1 U8 N  i4 {$ i
u=[sfm,zeros(1,n-n2)];: @& e+ n- E7 e0 c, A( U% f5 w- E
df1=fs/n;                                   %以上是对已调信号u求傅里变换  _3 q% V( |+ O$ G" `  ^) T' z! S8 u
U=U/fs;                                    %缩放, J, l% q3 e% m" c  ^$ q
%******************************************& O$ D4 V7 Z+ O! @. `
%*****************************************
; y9 w: F' k- |) X%·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·
) V# F  X" i8 O/ {" ~7 O%***************显示程序******************! v) f2 _& F- H  U$ h/ f. H
disp('按任意键可以看到原调制信号、载波信号和已调信号的曲线')
  z: e: d$ @$ _2 x& p6 \pause
: }: o8 R/ o% D/ F9 B1 o%**************figure(1)******************
3 e& w7 L6 N. x' y3 _. W$ ]  Tfigure(1)
+ M* m$ T. v2 P8 msubplot(3,1,1);plot(t,mt);                                 %绘制调制信号的时域图/ U# K8 S' w( }5 V8 y4 i! M
xlabel('时间t');
9 C7 K! c3 ]1 u/ y# ytitle('调制信号的时域图');- O- @' d: C+ n8 d. L" {% x
subplot(3,1,2);plot(t,ct);                               %绘制载波的时域图" t- z2 R( ?: a) S
xlabel('时间t');9 G) q, l5 I6 F) b
title('载波的时域图');) z4 i" L0 ?. E
subplot(3,1,3);
) [% i2 m* _1 ?7 K7 I* [plot(t,sfm);                                                  %绘制已调信号的时域图, p2 s5 u( C. R. ~" j# z
xlabel('时间t');- y; c* c8 y5 ^3 p8 c! `
title('已调信号的时域图');
) ]2 E: V6 z" G- X( l  q9 t$ b%******************************************
! G! f8 _$ n$ qdisp('按任意键可以看到原调制信号和已调信号在频域内的图形')
. [$ x! E6 ?/ m6 X) h! L  ]6 ]pause
8 c. d1 G0 ?4 Z0 L: M# A. e%************figure(2)*********************- T) t7 T6 [0 g
figure(2)
  ~, {- u8 d& a, @" Csubplot(2,1,1)
3 t, |2 c: I' Y( fplot(f,abs(fftshift(M)))                        %fftshift:将FFT中的DC分量移到频谱中心* J0 k4 ?6 p: D8 k5 t" F) I1 c
xlabel('频率f')4 X9 ?# R5 P3 ^  n" i2 o4 x0 w
title('原调制信号的频谱图')
) G0 ^- Q7 O( w0 ~subplot(2,1,2)
5 C! D, r, r* z/ gplot(f,abs(fftshift(U))); s6 S/ A) B- _) E
xlabel('频率f'), `. m4 i' c9 p2 i1 x# |
title('已调信号的频谱图')+ w) I6 S6 V; L3 Q1 r; _0 n# L
%******************************************$ b) m5 T1 d" I* T8 O2 h2 K" Y
disp('按任意键可以看到原调制信号、无噪声条件下已调信号和解调信号的曲线')5 F( n  \; Y* n0 k$ A
pause
2 x6 k& ^2 T2 e, [, m%**************figure(3)******************9 h- z  R" }; J* E# b) k. ]) R
figure(3); p& n& {1 y/ z
subplot(3,1,1);plot(t,mt);                                  %绘制调制信号的时域图
3 l, D) K: a( p' B; |3 ?xlabel('时间t');
+ S" l4 r  K5 n. t+ dtitle('调制信号的时域图');
$ F6 W  c' B, m# i" Y" Asubplot(3,1,2);plot(t,sfm);                              %绘制已调信号的时域图8 ], t' _; [5 r" E  A# Z' ?
xlabel('时间t');
/ U" f* p* T' ]/ Utitle('无噪声条件下已调信号的时域图');) u$ s, V) m! e; y& m) {; P# M
nsfm=sfm;                              ' X# T$ J( h, \
for i=1:length(t)-1                           %接受信号通过微分器处理
% T# }0 x0 W+ W4 {5 U    diff_nsfm(i)=(nsfm(i+1)-nsfm(i))./dt;/ B6 L- x8 H7 I; i- u$ v. R
end
/ \3 J& w5 m2 ?3 @- T# @, ediff_nsfmn = abs(hilbert(diff_nsfm));     %hilbert变换,求绝对值得到瞬时幅度(包络检波)
  [+ i( ]$ j) C" w( J, B3 d; Vzero=(max(diff_nsfmn)-min(diff_nsfmn))/2;3 M8 o9 Z& h; O8 C
diff_nsfmn1=diff_nsfmn-zero;- Z4 }8 C9 `! d4 i: O
subplot(3,1,3);                             %绘制无噪声条件下解调信号的时域图% y7 d+ X% C& D5 }$ O* |
plot((1:length(diff_nsfmn1))./1000,diff_nsfmn1./400,'r');7 y  f$ ~" @& k. x& F
xlabel('时间t');                          
# W9 i0 X- }) p) r; w3 ftitle('无噪声条件下解调信号的时域图');$ J2 o6 @7 y% m3 V# k3 {* R1 o5 t- L
%*****************************************
3 h  d% S% Y+ J# Xdisp('按任意键可以看到原调制信号、小信噪比高斯白噪声条件下已调信号和解调信号已调信号的曲线')
/ k; K- @0 K6 P4 v  Z# @pause0 P4 J2 L4 w/ f  A( w  t' k
%**************figure(4)******************9 c" |/ M9 R* `
figure(4)
6 C* j, x: ^" @: @' Fsubplot(3,1,1);plot(t,mt);                                  %绘制调制信号的时域图; t  m6 |& s' P# r* D
xlabel('时间t');+ P9 R+ @. D8 u- F
title('调制信号的时域图');  }0 |4 A+ s& H  v; F3 i
db1=am^2/(2*(10^(sn1/10)));                   %计算对应的小信噪比高斯白躁声的方差- O$ b. C6 \1 y( N5 t$ Y# O
n1=sqrt(db1)*randn(size(t));                    %生成高斯白躁声
( I! T% P1 \% H8 snsfm1=n1+sfm;                              %生成含高斯白躁声的已调信号(信号通
/ l, \  S" E5 q6 K) V( j3 ?; ^%                      %过信道传输)
/ q: s6 G% k0 gfor i=1:length(t)-1                            %接受信号通过微分器处理0 ~! z1 i* i: E! k1 C
    diff_nsfm1(i)=(nsfm1(i+1)-nsfm1(i))./dt;
4 c' P# }! N+ eend
& {& {$ e$ d9 r* c! ^diff_nsfmn1 = abs(hilbert(diff_nsfm1));   %hilbert变换,求绝对值得到瞬时幅度(包络检波)
3 m# g- p' ~% T3 ?% z1 e5 d: Czero=(max(diff_nsfmn)-min(diff_nsfmn))/2;$ {' K- @4 i" r: ^% P2 x( F9 b
diff_nsfmn1=diff_nsfmn1-zero;
. x: g/ O& J4 isubplot(3,1,2);
' F! j* v5 s* i# Y7 U% a! ?plot(1:length(diff_nsfm),diff_nsfm);      %绘制含小信噪比高斯白噪声已调信号的时域图% R; L$ `7 t4 v- S9 T0 i
xlabel('时间t');/ l( D+ i$ G8 p, w; w4 A8 `
title('含小信噪比高斯白噪声已调信号的时域图');
. b5 x# G: f& G( j: E% j& V3 c6 T) {8 usubplot(3,1,3);                        %绘制含小信噪比高斯白噪声解调信号的时域图7 F$ V! X8 N* L
plot((1:length(diff_nsfmn1))./1000,diff_nsfmn1./400,'r');% z5 C  }% i7 O0 c
xlabel('时间t');                          - ~7 G7 [9 d* `; z1 C
title('含小信噪比高斯白噪声解调信号的时域图');
+ k; b- L* ]5 E$ t8 K%*****************************************
2 h- b/ B" ]1 s" E" i" Z; V, }disp('按任意键可以看到原调制信号、大信噪比高斯白噪声条件下已调信号和解调信号已调信号的曲线')) ]; f3 e% t# B
pause5 u7 T* B6 o; j% n8 a: |. G, d
%**************figure(5)******************7 O! X( y! {+ x
figure(5)3 K, V; d4 z" @7 P& f2 [5 M$ Y. c
subplot(3,1,1);plot(t,mt);                                   %绘制调制信号的时域图
: r( Z% ^( w' \( V6 t7 |' c. X9 \- Exlabel('时间t');' V8 h! \0 I2 E! `$ L  E; R
title('调制信号的时域图');
! y+ V0 l- u, V0 idb1=am^2/(2*(10^(sn2/10)));                   %计算对应的大信噪比高斯白躁声的方差
& S& b5 M7 i6 d, R  u2 en1=sqrt(db1)*randn(size(t));                    %生成高斯白躁声3 Q$ \6 e- m* ~) O5 L2 ^" y
nsfm1=n1+sfm;                              %生成含高斯白躁声的已调信号(信号通过信道传输)
* b6 `' N/ ?. d2 W& L% ffor i=1:length(t)-1                             %接受信号通过微分器处理
% G8 C1 i" v( p* P5 c) Q* ~    diff_nsfm1(i)=(nsfm1(i+1)-nsfm1(i))./dt;7 g$ i$ ?) }3 c
end
* v8 V+ U. F9 Y4 ^1 N/ hdiff_nsfmn1 = abs(hilbert(diff_nsfm1));            %hilbert变换,求绝对值得到瞬时幅度(包: f; C6 a5 J- H! k, t8 p
%                      %络检波)
, t% C9 U/ @/ c' U( ^: A. O& Izero=(max(diff_nsfmn)-min(diff_nsfmn))/2;
6 M7 N* R- Y# k/ [6 W' Pdiff_nsfmn1=diff_nsfmn1-zero;
7 J: A& S0 M1 \! c; M) r  ~) u* Rsubplot(3,1,2);
$ Q1 O, s8 e9 P- oplot(1:length(diff_nsfm1),diff_nsfm1);             %绘制含大信噪比高斯白噪声已调信号
0 [, ^/ M! ]: O$ G) b) q%                      %的时域图
; ]1 O- z/ B+ x0 J  ^xlabel('时间t');
: \9 E0 R, ~: l$ v# ?0 Ptitle('含大信噪比高斯白噪声已调信号的时域图');1 D: ~3 b  a( b6 e3 T2 }+ V
subplot(3,1,3);                                %绘制含大信噪比高斯白噪声解调信号9 y( ~7 D/ N. y" |6 ^8 u
%                      %的时域图$ Z  ]9 J8 R% k; y* u2 \
plot((1:length(diff_nsfmn1))./1000,diff_nsfmn1./400,'r');
. P9 C6 _$ ?3 v& r2 I. Qxlabel('时间t');                            + X9 J3 F1 s# i+ Y' P- }
title('含大信噪比高斯白噪声解调信号的时域图');2 K2 A6 C0 _$ p- G, O
%*****************************************
0 r' ~; j( W/ C1 l%******************结 束*******************
- ]9 B/ R. H/ }1 o- C% w! p, ?, I- @/ a7 @

+ e0 f2 f" B( r: U6 s% T: g
作者: 李秋锐    时间: 2015-2-1 19:23

0 `  w8 s5 n: t  u( t7 M4 r5 y, d6 R3 u. B9 w* A# D
: `/ ]8 z" ]) V6 y
。。。。。。。。。。。。。。。
: g4 l5 ^; [3 C1 p+ P2 t7 o/ M
# F; F1 ^, Q8 o4 }




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5