我是靠谱客的博主 俊逸盼望,这篇文章主要介绍FM调制解调,现在分享给大家,希望可以做个参考。

FM调制解调
1.matlab仿真
先用matlab仿真,验证算法的可行性。
代码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
echo off close all clear all clc %%%%%%%%%%%%%%%%%%FM调制%%%%%%%%%%%%%%%%%%%%% ps = 625000; % 数据率625KHz Fs = 80*10^6; % 80M采样率 dt = 1/Fs; % 采样间隔 a = 1000; t = 0:dt:(a*Fs/ps-1)/Fs; % 产生时间序列 N = length(t)-1; am = 5; % 设定调制信号幅度 fm = 15*10^2; % 调制信号频率 fc = 5*10^6; % 载波频率5M mt = am*sin(2*pi*fm*t); % 生成调制信号 ct = cos(2*pi*fc*t); % 生成载波 kf = 10000; % 调频系数 频偏75kHz integral_mt(1)=0; for i=1:N %积分 integral_mt(i+1)=integral_mt(i)+mt(i)*dt; end %figure(100);plot(t,integral_mt); title('integral_mt'); sfm= am*cos(2*pi*fc*t+2*pi*kf*integral_mt); %已调信号 %%%%%%%%%%%%画图%%%%%%%%%%%% figure(1); subplot(311); plot(t,mt); title('调制信号时域'); axis([0 10^(-3) -5 5]); subplot(312);plot(t,ct); title('载波信号时域'); axis([0 10^(-5) -1 2]); subplot(313);plot(t,sfm);title('已调信号时域'); axis([0 10^(-5) -5 5]); %%%%%%%%%%%%画图%%%%%%%%%%%% figure(2); subplot(311); plot((N/2:N/2)*Fs/N,20*log10(abs(fftshift(fft(mt))))); title('调制信号频域'); subplot(312); plot((N/2:N/2)*Fs/N,20*log10(abs(fftshift(fft(ct))))); title('载波信号频谱'); subplot(313); plot((N/2:N/2)*Fs/N,20*log10(abs(fftshift(fft(sfm))))); title('已调信号频域'); %%%%%%%%%%%%%%%%%%生成IQ信号%%%%%%%%%%%%%%%%%%%%% st=imag(hilbert(ct)); %提取载波的正交分量 sin(wc*t) ct=real(hilbert(ct)); %cos(wc*t) for i=1:length(sfm) Ih(i)=sfm(i)*ct(i); Qh(i)=sfm(i)*st(i); end %%%%%%%%%%%%%%%%%%%%%滤波降频%%%%%%%%%%%%%%%%%%% Flp=fc; b=fir1(200,Flp/Fs,'low'); %设计滤波器 % figure(4); % stem(b); %滤波器单位脉冲响应 Qm=filter(b,1,Qh); Im=filter(b,1,Ih); % figure(6) % subplot(211); plot((N/2:N/2)*Fs/N,abs(fftshift(fft(Qm)))); title('Q信号波形频域'); % subplot(212); plot((N/2:N/2)*Fs/N,abs(fftshift(fft(Im)))); title('I信号波形频域'); % figure(5) % subplot(211); plot((N/2:N/2)*Fs/N,abs(fftshift(fft(Qh)))); title('Qh信号波形频域'); % subplot(212); plot((N/2:N/2)*Fs/N,abs(fftshift(fft(Ih)))); title('Ih信号波形频域'); % figure(8) % subplot(211);plot(t,Qm);title('Q信号波形'); % subplot(212);plot(t,Im);title('I信号波形'); % figure(7) % subplot(211);plot(t,Qh);title('Qh信号波形'); % subplot(212);plot(t,Ih);title('Ih信号波形'); %%%%%%%%%%%%%进行16bit量化%%%%%%%%%%%%%%%%% Qm16=round(Qm/max(abs(Qm))*(2^15-1)); Im16=round(Im/max(abs(Im))*(2^15-1)); %求系数绝对值之和,以此估计滤波后的有效数据位宽 sum_Shape=sum(abs(Qm16)); %%%%%%%%%%%%%%%%%%%解调%%%%%%%%%%%%%%%%%%% Sn(1)=0; for i=2:length(Qm) Sn(i) =-(Qm16(i)*Im16(i-1)-Qm16(i-1)*Im16(i)); end Sn=Sn/max(abs(Sn)); %%%%%%%%%%对解调信号进行滤波消除噪声%%%%%%%%% Flp1=2*10^5; a=fir1(200,Flp1/Fs,'low'); %设计滤波器 % figure(4); % stem(b); %滤波器单位脉冲响应 Sn=filter(a,1,Sn); %%%%%%%%%%%%%%%画图%%%%%%%%%%%%%%%%%%%%% figure(11); subplot(411); plot(t,Sn);title('解调信号波形'); %axis([0 2*10^(-3) -1 1 ]); subplot(412);plot(t,mt); title('原始信号波形'); %axis([0 2*10^(-3) -5 5 ]); subplot(413); plot((N/2:N/2)*Fs/N,20*log10(abs(fftshift(fft(Sn))))); title('解调信号频域'); %axis([-10000 10000 0 50000]); subplot(414); plot((N/2:N/2)*Fs/N,20*log10(abs(fftshift(fft(mt))))); title('原始信号频域'); %axis([-10000 10000 0 500000]); %%%%%%%%%将有符号十进制转化为二进制%%%%%%%%%%%%% fid=fopen('E:FMMATLABQm.txt','w'); for k=1:length(Qm16) B_s=dec2bin(Qm16(k)+(Qm16(k)<0)*2^16,16); for j=1:16 if B_s(j)=='1' tb=1; else tb=0; end fprintf(fid,'%d',tb); end fprintf(fid,'rn'); end fprintf(fid,';'); fclose(fid); fid=fopen('E:FMMATLABIm.txt','w'); for k=1:length(Im16) B_s=dec2bin(Im16(k)+(Im16(k)<0)*2^16,16); for j=1:16 if B_s(j)=='1' tb=1; else tb=0; end fprintf(fid,'%d',tb); end fprintf(fid,'rn'); end fprintf(fid,';'); fclose(fid);

运行结果如下:

这里写图片描述
这里写图片描述
通过时域波形和频谱图对比可以看出,解调信号与原信号相差不大。解调算法可行。
2.modelsim仿真
将MATLAB仿真出来的已经降频的I、Q两路信号导入文本文件中,作为modelsim仿真的输入信号。
quartus新建工程,解调部分Verilog代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
module demod ( rst, clk, Sn, im, qm ); input rst , clk; input signed [15:0]im,qm; reg signed[15:0]Im,Qm; output [15:0]Sn; reg signed[32:0] Sn; always @ (posedge clk ) begin if(rst) begin //清零 Im<=0; Qm<=0; end else begin Im<=im; //延时一个单位 Qm<=qm; //qm(n)=Qm(n-1) Sn <= Qm * im - qm * Im ; //解调信号 end end endmodule

textbench部分代码(省略端口连接等部分代码):

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
initial begin clk=0; //设置复位信号 rst=1; #2 rst =0 ; end always begin #2 clk=~clk; end //从外部TX文件读入数据作为测试激励 integer Pattern; reg signed [15:0] stimulusQ[1:data_num]; reg signed [15:0] stimulusI[1:data_num]; initial begin //文件必须放置在"工程目录simulationmodelsim"路径下 $readmemb("Qm.txt",stimulusQ ); $readmemb("Im.txt",stimulusI );//读入2进制数据 Pattern=0; repeat(data_num) //读入128000个数据 begin Pattern=Pattern+1; qm=stimulusQ[Pattern-1]; im=stimulusI[Pattern-1]; #4; end $stop ; //停止读取数据 end //将解调信号数据Sn写入外部TXT文件中(Sn.txt) integer file_Sn; initial begin //文件放置在"工程目录simulationmodelsim"路径下 file_Sn = $fopen("Sn.txt"); end always @(posedge clk) $fdisplay(file_Sn,"%d",Sn); endmodule

modelsim仿真波形:
这里写图片描述
matlab读取modelsim仿真的解调信号数据并分析:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
clear all clc ps = 625000; %数据率625KHz a = 1000; %数据长度 Fs = 80*10^6; %采样率 dt = 1/Fs; t = 0:dt:(a*Fs/ps-1)/Fs; %%%%%%%%%读取modelsim仿真的解调信号数据%%%%%%%%%% fid=fopen('E:FMquartussimulationmodelsimSn.txt','r'); [s,N]=fscanf(fid,'%lg',inf); N=N-1; fclose(fid); sn=s/max(abs(s)); %%%%%%%%%%%%%%%%%%低通滤波%%%%%%%%%%%%%%%%%%%% % Flp1=2*10^5; %滤波器截止频率 % a=fir1(200,Flp1/Fs,'low'); %设计滤波器 % figure(4); % stem(b); %滤波器单位脉冲响应 % sn=filter(a,1,sn); %%%%%%%%%%%%%%%%%%画图%%%%%%%%%%%%%%%%%%%%% figure(1); subplot(211);plot(t,sn);title('解调信号时域'); subplot(212); plot((N/2:N/2)*Fs/N,20*log10(abs(fftshift(fft(sn))))); title('解调信号频域');

低通滤波前的解调信号如图:
这里写图片描述
从频谱图可以看出信号的高频噪声很多,信噪比低。
再加上低通滤波器后的解调信号如图:
这里写图片描述
通过低通滤波器以后,高频噪声被去除,信噪比变高。此时与原信号的波形图和频谱图基本一致。

最后

以上就是俊逸盼望最近收集整理的关于FM调制解调的全部内容,更多相关FM调制解调内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部