数学建模社区-数学中国

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

作者: 李秋锐    时间: 2015-2-1 19:22
标题: FM调制解调系统
%FM调制解调系统.m
) \+ z& y6 R: Q3 J%频率调制与解调的Matlab演示源程序
, }" a5 }% S2 v+ Y8 R' @1 o- m%可以任意改原调制信号函数m(t)
6 m/ \: k: B5 @%电子信息工程  杜怀超 091308305  
6 \. I# S6 O9 \& O) T; a" [%·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·9 V: J  a5 r: J/ G# t3 V
%*****************初始化******************" v# O+ M" z. i; i
echo   off       ' |6 h5 N. L& d; T* J  `
close  all. b; b% M5 b1 W% C7 Q, K+ i) N
clear  all0 F3 l  O! I$ H
clc7 r- g) d( a! }, B; y7 |
%*****************************************2 S7 F" F& j& y
%·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·
* v3 M' X7 i6 G4 i$ U) P1 b9 P%****************FM调制*******************$ s7 c7 e5 t6 e5 V4 z
dt=0.001;                                   %设定时间步长( S' n' O% k: d* x( A  j) f% G
t=0:dt:1.5;                                       %产生时间向量
! l& P! I2 X3 aam=5;                                      %设定调制信号幅度+ T, W* s( w: u1 F8 B0 N# B" b& q
fm=5;                                      %设定调制信号频率6 k% U% T6 p: k/ {( H' y
mt=am*cos(2*pi*fm*t);                        %生成调制信号
! W4 F5 S4 N' F# ?0 Z, `& hfc=50;                                      %设定载波频率7 P3 _. v/ \" V/ V  a4 G/ B
ct=cos(2*pi*fc*t);                             %生成载波6 P3 {! K! M. W/ a; C8 |
kf=10;                                      %设定调频指数4 C1 X+ ~" }8 \' z4 Y
int_mt(1)=0;" f# \! C6 K: _% P; E6 U  m2 r1 x
for i=1:length(t)-1  ( U, [0 [" h: d# H7 h
    int_mt(i+1)=int_mt(i)+mt(i)*dt;               %求信号m(t)的积分8 \* ^6 E( ~6 w9 d# z7 W2 U
end                                          %调制,产生已调信号/ W9 _& [, v8 P  G" o
sfm=am*cos(2*pi*fc*t+2*pi*kf*int_mt);            %调制信号
1 O- l$ L3 O3 B; A. G5 S, G%*****************************************
+ I& B2 i' N; q5 x# [& H%·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·8 u# l5 N2 }) K
%*************添加高斯白噪声**************. W  \9 r7 [* D/ g) U- B! t; Z) c
sn1=10;                                     %设定信躁比(小信噪比)- ]+ o: N( j: f; N  V! [
sn2=30;                                     %设定信躁比(大信噪比)0 i. S0 Q- l+ _; @$ j6 {; H
sn=0;                                       %设定信躁比(无信噪比)
: [8 l8 `3 W' M2 P* Vdb=am^2/(2*(10^(sn/10)));                     %计算对应的高斯白躁声的方差
5 V. h, c* V5 j. S# x- q2 {; sn=sqrt(db)*randn(size(t));                      %生成高斯白躁声2 o4 W- x3 R' a5 A( ^
nsfm=n+sfm;                                %生成含高斯白躁声的已调信号(信号通
) ^+ O% p9 V  J( E%过信道传输)
+ |( \& F, j# h%*****************************************5 N! \1 Z8 ~; n! c# n3 }! f! c
%·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·
7 e% s% V/ V2 B$ h, ~%****************FM解调*******************
3 a3 ~, ?2 I' x7 D1 Lfor i=1:length(t)-1                             %接受信号通过微分器处理' T  x& g1 ^4 d
    diff_nsfm(i)=(nsfm(i+1)-nsfm(i))./dt;
; Q3 V' g7 ^) |/ _+ K) dend
# r& L3 Q# q0 t3 g, Mdiff_nsfmn = abs(hilbert(diff_nsfm));     %hilbert变换,求绝对值得到瞬时幅度(包络检波)4 R3 a& D! G& p. y$ n9 z" Y% J
zero=(max(diff_nsfmn)-min(diff_nsfmn))/2;
3 O8 l- F" j2 J/ t1 H7 _diff_nsfmn1=diff_nsfmn-zero;# [! o1 Z% T1 @) N
%*****************************************% X* q2 g) y3 v" A0 C$ @  [
%·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·
4 E8 t5 s5 q- M%**************时域到频域转换**************
& s- S' y0 |3 ?& Ots=0.001;                                    %抽样间隔" x) j* S) o( M4 I
fs=1/ts;                                      %抽样频率
) F. K' E; b' b/ A, s! adf=0.25;                                     %所需的频率分辨率,用在求傅里叶变换' Y6 G" j; ?! _: c- y
%                      时,它表示FFT的最小频率间隔
7 v* {# C1 j+ [5 t# ?%*****对调制信号m(t)求傅里叶变换*****
) Z* I9 Z2 @+ s, qm=am*cos(2*pi*fm*t);                         %原调信号
2 v: W  K3 z) L6 L8 Y# Y- Wfs=1/ts;
1 D5 ^0 ]7 n% }+ G5 D- Lif nargin==2
4 K# Q+ [6 f* ?    n1=0;' g7 `  A) n# t
else
, Y# l! x6 X* P3 J4 V4 c9 H, _    n1=fs/df;" \4 Q9 T5 a9 ?1 W" ^) e0 e9 q; T
end
0 b. b# G) g- v4 {: I' ]5 Tn2=length(m);1 n0 A/ P: M& p+ E, D
n=2^(max(nextpow2(n1),nextpow2(n2)));
. X' y1 v- i5 Q% x6 qM=fft(m,n);
2 I& s, X6 L9 u" e0 Z% Qm=[m,zeros(1,n-n2)];
3 e$ b8 T* w( s- `" b; edf1=fs/n;                                   %以上程序是对调制后的信号u求傅里变换* g5 E/ O! ?8 `6 h2 X- C, o8 Q
M=M/fs;                                   %缩放,便于在频铺图上整体观察) k7 z* e% n, j  U
f=[0:df1:df1*(length(m)-1)]-fs/2;                %时间向量对应的频率向量
. v) ~( t) w+ Y' J
& O" c. t+ E- ]. o) ~: y! z%************对已调信号u求傅里变换**********) a, J2 M6 Y& k
fs=1/ts;. m0 |9 P( @' f- y
if nargin==2+ [+ z$ d, h( ?& s: ~0 @7 Q
    n1=0;% s! t; I0 J' D! A
else# I- ?3 h9 m0 r
    n1=fs/df;6 n/ ^2 g3 v8 [
end% s! t6 o  y3 S$ O$ ~/ W3 ^
n2=length(sfm);7 x2 w; E  v: z+ ?
n=2^(max(nextpow2(n1),nextpow2(n2)));" ^! r$ ]# Y' s# N0 Q
U=fft(sfm,n);+ Z0 A( x& A/ W, [- n
u=[sfm,zeros(1,n-n2)];
+ M) v: |4 x5 Xdf1=fs/n;                                   %以上是对已调信号u求傅里变换
# }6 C4 I/ ~. ]# _4 f$ mU=U/fs;                                    %缩放" o' s& {) X* M6 X1 z, v
%******************************************
$ _; \) m& l9 L0 h% Z3 W' j%*****************************************; h$ g& u7 A0 V) \' X
%·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·
* x) t( ]2 g6 J) R6 C" e%***************显示程序******************" P6 X# O) a& Y( F! G0 L) h
disp('按任意键可以看到原调制信号、载波信号和已调信号的曲线')8 q) [, {3 z( d, N) n. P4 S, u
pause6 I1 \( c- ?) b3 O: O8 E2 M
%**************figure(1)******************
4 ]4 [5 n8 Q- qfigure(1)
. T/ t! J) u3 D; U( H8 ^, u. Esubplot(3,1,1);plot(t,mt);                                 %绘制调制信号的时域图- [% s9 t4 X5 A# v
xlabel('时间t');
  `3 T" d% X' u( }7 L1 Y. e. Etitle('调制信号的时域图');" S" h3 e+ B2 d+ m( u* Z
subplot(3,1,2);plot(t,ct);                               %绘制载波的时域图0 ?6 o+ B7 [2 Y- N. L) K
xlabel('时间t');
3 U/ Z9 e$ I6 p, X2 O3 R6 atitle('载波的时域图');! |( Y% U( ?! v" K2 m. g
subplot(3,1,3);
4 Q1 d; t: m- k; h. _$ z6 s3 kplot(t,sfm);                                                  %绘制已调信号的时域图
% c, P: z; j8 \" g1 c3 Yxlabel('时间t');& S* }! U) C4 V7 ?  m$ E" I
title('已调信号的时域图');% \% _! n0 K( ]/ m
%******************************************4 j# I) u. G2 p; l- z1 U( [
disp('按任意键可以看到原调制信号和已调信号在频域内的图形')
4 k) {) J3 n. h; D7 `# _pause, f  [6 h  L$ T1 n# w( w/ \. @$ g
%************figure(2)*********************
: X5 v8 ^& h0 r9 f8 ofigure(2)6 z6 ^" {4 [1 Q" _. t- l: C
subplot(2,1,1)  G6 H% `% W1 b6 O! _3 o7 J
plot(f,abs(fftshift(M)))                        %fftshift:将FFT中的DC分量移到频谱中心: a8 U. A" d7 E7 w; j0 E
xlabel('频率f')
$ d5 L0 W8 x  l! g1 @title('原调制信号的频谱图')' Q4 H. x) F' R- r
subplot(2,1,2)* x+ e% q1 Y) Z: U3 Z
plot(f,abs(fftshift(U)))/ A& e# @  p8 ]& N" X* C
xlabel('频率f'), I: ~+ w! C+ q1 Z2 K9 E* U+ q- O$ P
title('已调信号的频谱图')! b9 k* _! Q* D) v5 @# F7 M5 }: K
%******************************************$ c" P$ u' s* j; M7 u6 \  A
disp('按任意键可以看到原调制信号、无噪声条件下已调信号和解调信号的曲线')7 B. ?8 h4 u( K2 W, X
pause
" W. G8 E+ d- M, F%**************figure(3)******************
* L8 J! N, D, H1 t: A3 y  u: afigure(3)' g" C+ f3 {+ o  O8 N8 B5 t* g
subplot(3,1,1);plot(t,mt);                                  %绘制调制信号的时域图/ N: \$ N4 N9 E, N  z* \
xlabel('时间t');
9 z/ x8 N" j" Q: Atitle('调制信号的时域图');
# M! p3 y" o! o+ G; ?, P) W/ Hsubplot(3,1,2);plot(t,sfm);                              %绘制已调信号的时域图  S- D6 W2 E0 Y/ W& h
xlabel('时间t');, N/ Q( t4 S$ e0 i  q5 F  v7 E/ d
title('无噪声条件下已调信号的时域图');
" |5 V, v: s3 J  v' a4 E1 m" F& @nsfm=sfm;                              1 @! k) U1 X1 q0 s5 I  d  F$ U
for i=1:length(t)-1                           %接受信号通过微分器处理# V) b8 p- \7 C9 N
    diff_nsfm(i)=(nsfm(i+1)-nsfm(i))./dt;2 D4 ^$ M3 m1 m# E$ I8 n
end9 J- b- A$ G$ r/ Y" G
diff_nsfmn = abs(hilbert(diff_nsfm));     %hilbert变换,求绝对值得到瞬时幅度(包络检波)
6 q# B  p' Q) v# _! M. Wzero=(max(diff_nsfmn)-min(diff_nsfmn))/2;( T* b* ?3 p+ v3 l6 G
diff_nsfmn1=diff_nsfmn-zero;& r  F* ^7 R- a  u! E- O8 d
subplot(3,1,3);                             %绘制无噪声条件下解调信号的时域图
" \5 Q: w# B: {; \% d& ?. ^" Uplot((1:length(diff_nsfmn1))./1000,diff_nsfmn1./400,'r');# H) c# k! t2 d( N# t
xlabel('时间t');                          
# s  t$ x7 W5 p" a* c2 }: w% ], etitle('无噪声条件下解调信号的时域图');8 V; z6 b, C8 ]  W
%*****************************************' j1 W! L' V/ R& n$ b! \
disp('按任意键可以看到原调制信号、小信噪比高斯白噪声条件下已调信号和解调信号已调信号的曲线')
9 e/ q5 Z7 d5 wpause% s2 i+ _0 v, j
%**************figure(4)******************
; X* M5 L6 E( Y5 D% k0 s1 nfigure(4)$ d8 N4 D6 D0 z( b( G/ y* o
subplot(3,1,1);plot(t,mt);                                  %绘制调制信号的时域图
  Q7 t5 a9 g7 Y3 Vxlabel('时间t');3 X; X% e) i; n! k
title('调制信号的时域图');( v4 @: ^4 ]* e% J2 M
db1=am^2/(2*(10^(sn1/10)));                   %计算对应的小信噪比高斯白躁声的方差
% p- G+ m7 y& i: E$ f/ v3 \) Qn1=sqrt(db1)*randn(size(t));                    %生成高斯白躁声
& R+ ]/ c8 L! O# H% P7 z) H8 q2 Fnsfm1=n1+sfm;                              %生成含高斯白躁声的已调信号(信号通( y) z# C, s; Q% @! a
%                      %过信道传输)
) }" }/ q, b8 V- rfor i=1:length(t)-1                            %接受信号通过微分器处理" K! i1 `9 K! j; o7 o' U4 Y
    diff_nsfm1(i)=(nsfm1(i+1)-nsfm1(i))./dt;7 ~2 _. Z& Z% P) {4 a5 a0 _& l7 A
end
* K, `9 |! I; m5 R$ K1 {diff_nsfmn1 = abs(hilbert(diff_nsfm1));   %hilbert变换,求绝对值得到瞬时幅度(包络检波)
$ K+ @& V  `' U1 n# qzero=(max(diff_nsfmn)-min(diff_nsfmn))/2;
% ~& M' I; W' X: j' H1 i% |8 [) ediff_nsfmn1=diff_nsfmn1-zero;% _1 c# E- `) k3 |
subplot(3,1,2);
: ^1 L( g/ m4 V9 n- H" j) |) ]plot(1:length(diff_nsfm),diff_nsfm);      %绘制含小信噪比高斯白噪声已调信号的时域图
4 p- K; d; q) c3 Wxlabel('时间t');
- U0 ?4 j2 X8 x! F7 L: i# A6 {title('含小信噪比高斯白噪声已调信号的时域图');
% G  r. N/ U: K% Ysubplot(3,1,3);                        %绘制含小信噪比高斯白噪声解调信号的时域图
- ?$ a* B$ B2 c7 D1 x; I0 O+ mplot((1:length(diff_nsfmn1))./1000,diff_nsfmn1./400,'r');) w. Z7 J, ~* [
xlabel('时间t');                          . ^0 L! k# z4 N# \; v
title('含小信噪比高斯白噪声解调信号的时域图');/ q) w/ X. A; ?1 |' k4 W
%*****************************************
3 v( J0 t) a% w) Fdisp('按任意键可以看到原调制信号、大信噪比高斯白噪声条件下已调信号和解调信号已调信号的曲线')+ x. ^% G* [8 j% M( j, e- F
pause
8 x" |' F! _# O2 b) p! f%**************figure(5)******************. H0 U; y$ L  P5 Q( M  p
figure(5)' d( R! Q- t9 p
subplot(3,1,1);plot(t,mt);                                   %绘制调制信号的时域图
1 i9 S3 o4 Z9 d& a* b# B( Wxlabel('时间t');+ x& V  T) R, B; {
title('调制信号的时域图');& h# w8 v  a  J* D5 d6 K4 e
db1=am^2/(2*(10^(sn2/10)));                   %计算对应的大信噪比高斯白躁声的方差
3 n. \9 b# c  u% g- ]. u( En1=sqrt(db1)*randn(size(t));                    %生成高斯白躁声
8 u; z$ b" B; D8 ]nsfm1=n1+sfm;                              %生成含高斯白躁声的已调信号(信号通过信道传输)
$ w" q0 w: m1 m) O* n! N& B9 P. X9 }for i=1:length(t)-1                             %接受信号通过微分器处理
% T; `; Z8 f# H+ t5 q    diff_nsfm1(i)=(nsfm1(i+1)-nsfm1(i))./dt;
  b; Q) `+ f" j6 \% l& ^end5 K0 e9 M: a* l; ~# o0 @/ v
diff_nsfmn1 = abs(hilbert(diff_nsfm1));            %hilbert变换,求绝对值得到瞬时幅度(包
, G3 `' [9 S2 ?. a& u# Y# h! V, h%                      %络检波)- P- u4 F" f3 x; F, U% G0 t
zero=(max(diff_nsfmn)-min(diff_nsfmn))/2;' }. V1 s7 h" N% y5 L: [
diff_nsfmn1=diff_nsfmn1-zero;
) x! u. e1 D* X  @3 T. j, Qsubplot(3,1,2);
$ g$ Q- n) g1 X5 N% ]- u. m) mplot(1:length(diff_nsfm1),diff_nsfm1);             %绘制含大信噪比高斯白噪声已调信号
" w% X/ f7 |- g%                      %的时域图" D2 k" V0 u  @/ j. J
xlabel('时间t');
8 p  `  f: X2 G5 j% Ctitle('含大信噪比高斯白噪声已调信号的时域图');
3 V+ J8 M1 s: r" x7 d; xsubplot(3,1,3);                                %绘制含大信噪比高斯白噪声解调信号
, u: |8 ]* _+ t( U( F( Q%                      %的时域图
, m# N7 ^# ]- Yplot((1:length(diff_nsfmn1))./1000,diff_nsfmn1./400,'r');- q/ N* w0 a5 w, Q
xlabel('时间t');                           
$ z. F3 ~( u5 P- s3 M, J) }- s* A$ ^title('含大信噪比高斯白噪声解调信号的时域图');
. t. P( r% `+ [0 a$ M, }%*****************************************
$ t6 ]. o8 J7 u%******************结 束*******************) T8 H, l/ \: @0 i0 a5 g  k' q1 U& v: R
6 s6 i* a5 s+ O9 K- g# G7 B" _4 \

7 v" `; r9 }; K+ E( F& w$ D- t6 i
作者: 李秋锐    时间: 2015-2-1 19:23
2 e* i1 H/ h- _; J5 @7 V
" C! K, g. |) z
8 [+ b1 [7 p  s5 t) {. V
。。。。。。。。。。。。。。。* l6 Y% k0 s+ H" t; B
/ |8 C. m, J2 O  B$ K





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