频分复用(Frequency Division Multiplexer)

作者:桂。

时间:2017年12月19日20:43:04 

链接:http://www.cnblogs.com/xingshansi/p/8067839.html 


前言

主要记录基本的频分复用原理,以及仿真实现。

一、频分复用原理

频分复用FDM:

通常x1..4(t)可以是同一个序列的串并转化,也可以是不同序列,频分复用示意图:

主要包含三个操作:1)上采样(up-sample); 2)滤波(fir);3)累加(sum)。

频分复用:将多个不同频段的信号拼接为一个宽带信号,主要包含三个操作:1)上采样(up-sample); 2)滤波(fir;3)累加(sum)

  • 上采样

T1/T2 = 4,故上采样倍数为4,上采样有原数据保持、插值、补零等方法,这里采用最基本的补零方法。不失一般性,X0(n)X1(n)X2(n)X3(n)分别按不同频率的正弦信号处理。

x1(n) 的频域变换: 

4倍插值后的频谱:

 

可以看出插值后出现了多个重复周期,因此需要借助低通滤波以保留单一周期,如下图所示:

因此需要构造不同频段的滤波器,四个蓝色阴影部分拼接(累加)即可。

  • 滤波器

这里prototype滤波器: 

共构造8个滤波器,分成四组,输出y(n)为:

Y(n) = y0(n)+ y1(n)+ y2(n)+ y3(n)

ym(n)

Ym(n) = xm_interpl(n)*[ha (n) exp((-im*2*pi*(m*n))/8)+ ha(n) exp((-im*2*pi*((8-m)*n))/8)]

= 2*xm_interpl(n)*[ha(n)cos((-2*pi*(m*n))/8)]

其中ha (n) = h(n)* exp((-im*pi*n)/8)prototype filter,至此便完成了信号的频分多路复用(FDM)理论推导.

  • 累加

滤波后的各个输出累加,即得到调制的y(n),仿真图如图所示:

结果与上文一致。

二、仿真结果

频分复用的接收端是发射的逆过程,分别利用 基本滤波器、多相滤波器实现:

基本滤波器:

%recovery signal: x
clc;clear all;close all;
load fir2.mat;
fir = fir2;
B = 4000;%4KHz
fs1 = 2*B;
D = 4;
t1 = 0:1/fs1:(128-1)/fs1;
f = [800 1600 2200 2800];%frequency
x0 = sin(2*pi*t1*f(1));
x1 = sin(2*pi*t1*f(2));
x2 = sin(2*pi*t1*f(3));
x3 = sin(2*pi*t1*f(4));
x_shape = [x0;x1;x2;x3];
%% interp
x0_interp = [x0;zeros(3,length(t1))];
x0_interp = x0_interp(:)';
x1_interp = [x1;zeros(3,length(t1))];
x1_interp = x1_interp(:)';
x2_interp = [x2;zeros(3,length(t1))];
x2_interp = x2_interp(:)';
x3_interp = [x3;zeros(3,length(t1))];
x3_interp = x3_interp(:)';
%%prototype filter
x_all = [x0_interp;x1_interp;x2_interp;x3_interp;flipud([x0_interp;x1_interp;x2_interp;x3_interp])];
im = sqrt(-1);
iseq = 1:length(fir);
for j = 1:Dh_channel(j,:) = fir.*cos((2*pi*((j-1/2)*(iseq-1)))/8);
%     h_channel(j,:) = fir.*exp((1j*2*pi*((j-1/2)*(iseq-1)))/8);
end
%%add signal
yn = zeros(1,length(x3_interp));
for i = 1:Dyn = filter(h_channel(i,:),1,x_all(i,:))+yn;
end
%%demultiplex
x_channel = zeros(D,length(yn)/D);
for i = 1:Dx_channel(i,:) = downsample(filter(h_channel(i,:),1,yn),D);
end
figure()
for i = 1:Dsubplot(2,2,i)plot(linspace(0,fs1,length(t1)),abs(fft(x_channel(i,:))));xlabel('frequency(Hz)');ylabel('amplitude');title('direct filter -> x');
end%%plot mse
figure()
for i = 1:4x_channel(i,:) =  x_channel(i,:)/max(abs( x_channel(i,:)));subplot (2,2,i)plot(linspace(0,fs1,length(t1)),x_channel(i,:));hold on;plot(linspace(0,fs1,length(t1)),x_shape(i,:),'r--');hold on;
%      plot(linspace(0,fs1,length(t1)),abs(x_shape(i,:)-x_channel(i,:)).^2,'k');xlabel('frequency(Hz)');title('MSE');
%      legend('recovery','orignal','MSE');
end

  多相滤波器,推导:

令l = iD+p,D表示分解后信号路数,此处D = 4:

再将结果取实部即可得解。 

%recovery signal by polyphase filter: x
clc;clear all;close all;
load fir2.mat;
fir = fir2;
B = 4000;%4KHz
fs1 = 2*B;
D = 4;
t1 = 0:1/fs1:(128-1)/fs1;
f = [800 1600 2200 2800];%frequency
x0 = sin(2*pi*t1*f(1));
x1 = sin(2*pi*t1*f(2));
x2 = sin(2*pi*t1*f(3));
x3 = sin(2*pi*t1*f(4));
x_shape = [x0;x1;x2;x3];
%% interp
x0_interp = [x0;zeros(3,length(t1))];
x0_interp = x0_interp(:)';
x1_interp = [x1;zeros(3,length(t1))];
x1_interp = x1_interp(:)';
x2_interp = [x2;zeros(3,length(t1))];
x2_interp = x2_interp(:)';
x3_interp = [x3;zeros(3,length(t1))];
x3_interp = x3_interp(:)';
%%prototype filter
x_all = [x0_interp;x1_interp;x2_interp;x3_interp;flipud([x0_interp;x1_interp;x2_interp;x3_interp])];
im = sqrt(-1);
iseq = 1:length(fir);
for j = 1:Dh_channel(j,:) = fir.*cos((-2*pi*((j-1/2)*(iseq-1)))/8);
%     h_channel(j,:) = fir.*exp((1j*2*pi*((j-1/2)*(iseq-1)))/8);
end
%%add signal
yn = zeros(1,length(x3_interp));
for i = 1:Dyn = filter(h_channel(i,:),1,x_all(i,:))+yn;
end
%%demultiplex
%prototype filter
h0 = fir.*exp((-1j*2*pi*((-1/2)*(iseq-1)))/8);
h_py = fliplr(reshape(h0,D,length(h0)/D));
y_py = (reshape(yn,D,length(yn)/D));
x_channel = zeros(D,length(yn)/D);
for i = 1:Dx_channel(i,:) = filter(h_py(i,:),1,y_py(i,:));
end
x_channel = real(ifft(x_channel));
x_channel = x_channel([1,4,2,3],:);
%%plot mse
figure()
for i = 1:4x_channel(i,:) =  x_channel(i,:)/max(abs( x_channel(i,:)));subplot (2,2,i)plot(linspace(0,fs1,length(t1)),x_channel(i,:));hold on;plot(linspace(0,fs1,length(t1)),x_shape(i,:),'r--');hold on;
%      plot(linspace(0,fs1,length(t1)),abs(x_shape(i,:)-x_channel(i,:)).^2,'k');xlabel('frequency(Hz)');title('MSE');
%      legend('recovery','orignal','MSE');
end

三、其他

 原型滤波器信道化思路:

信道化与频分复用略有不同,频分复用主要是余弦函数,理论上相邻无衰减,得到的余弦曲线并不理想:

当有一定的过渡带时,余弦曲线:

 可见此时应该有一个过渡带才更加合理,而不是像信道化体系常用的约束:相邻信道无缝连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB系统辨识

MATLAB系统辨识 最终效果:自动调出PID三项对应的参数,控制效果很不错。 目的:通过matlab,辨识出系统的传递函数,找到最理想的PID参数。 优点:1.节省“盲调PID”的时间。2.在辨识出传递函数后,…

AR模型与数据平稳性之间的关系

作者:桂。 时间:2017-12-19 21:39:08 链接:http://www.cnblogs.com/xingshansi/p/8068021.html 前言 前几天碰到一个序列分析的问题,涉及到自回归(auto-regression, AR)等模型,但如何确定序列…

开源EDA工具

1.来自kakuyou http://www.icarus.com/eda/verilog/ 开源的verilog 编译器,包含模拟器和基本逻辑综合模块。 http://www.geocities.com/SiliconValley/Campus/3216/GTKWave/gtkwave-win32.html windows版的gtk-wave,一个图形波形察看工具 http://em…

大学生每个月1500元的生活费,够吗?

-1-双十二刚过,朋友圈里便又刮起一阵“哭穷”的大风。曾看过一则新闻,一位来自浙江义乌的妈妈发帖说每月给女儿1200元生活费,被女儿质问自己是否是亲生的。上图是一张流传很广的大学生月消费支出表,加起来一共是1562元&#xff0c…

电脑卡顿怎么办?

电脑卡顿怎么办? 电脑主要由CPU,内存,硬盘,显卡,声卡,主板,显示器各种连接线等组成。 CPU:中文名字叫中央处理器,是电脑的大脑,各种数据的处理运算控制。有…

我的2017,关于读书的一点心得

-1-2017年,读了40多本书,跟那些动辄一天一本书的大神相比,这个数目并不算多,但于我而言已经是一个很大的进步,但常常还会焦虑,觉得自己跟别人的差距越拉越大。为什么我的读书速度这么慢? 为什么…

自控原理之系统辨识

自控原理之系统辨识 前沿 数学模型是一个或多或少,以一定的形式表达出你正在观测的事物。**通过观测事物的各项属性,推断出一个数学模型,这是科学。**系统辨识,着手从观测事物得到的数据中,建立一个数学模型。正由于物…

马云狂炸近百亿,你的借呗额度涨了吗?

蚂蚁借呗非常受大家欢迎,因为简单方便,所以很多缺钱的朋友都会通过借呗去借钱。但是借呗的额度主要以小额为主,很多时候满足不了日常的资金需求,因此很多朋友都在想各种方法去提高借呗的额度。但是借呗的额度不是想提高就可以提高…

贷款中介市场要变天了吗?

贷款中介一直是贷款市场一股很重要的力量,他们对各个贷款机构的渗透率很高,贷款中介也确实帮助了很多想贷款的客户,同时也减轻了贷款机构的一些业务压力,甚至有些银行等贷款机构直接把贷款业务外包给了第三方中介结构。可以说贷款…

将数据导入到MATLAB

将数据导入到MATLAB 将数据导入到MATLAB中有二种方式。 第一种:直接使用MATLAB读Excel文件 例如 Excel表格 numxlsread(data1.xlsx,Sheet1,A1:E13);%读入Excel文件 input_trainnum(1:8,1:4);%1到8行,1到4列 output_trainnum(1:8,5);%1到8行&#xff0…

重磅!四部委发文,以后买房可以省几十万元!

去买房,能用公积金贷款的绝不考虑商业贷款,能用商业贷款的绝对不会全款买房。但对于开发商来说,事实却恰好相反,网上就流行了一个段子:买房全款的往里走;按揭的不要堵门口;公积金贷款的把共享单…

C++之RAII机制

1.什么是RAII? RAII(Resource Acquisition Is Initialization)机制是Bjarne Stroustrup首先提出的,也称直译为“资源获取就是初始化”,是C语言的一种管理资源、避免泄漏的机制。 C标准保证任何情况下,已构…

函数的分文件编写

函数的分文件编写 三步实现函数的分文件编写 创建.h后缀名的头文件创建.cpp的后缀名的源文件在头文件中写函数的声明在源文件中写函数的定义

网上代开微粒贷,行得通吗?

微粒贷估计大家有想拥有,但腾讯偏偏要跟大家较真,实行白名单邀请制,只给那么几千万人微粒贷,绝大部分人连个微粒贷的图标都没有。因此很多人都在想着各种办法去开通微粒贷,有优化条件的,有开通腾讯信用的&a…

治疗拖延症晚期患者的三张处方

-1-20岁以后,时间加速飞逝,前一秒还在踌躇满志地制定新年计划,下一秒就要开始整理年度总结了。有人说2018年的新年计划就是搞定2017年那些原定于2016年的安排,不为别的,只为兑现2015年时要完成2014年计划的承诺。一年又…

解决GetManifestResourceNames()无法读取资源文件

//读取资源文件中的图片并输出流,String resource是资源文件名; public static Image GetImage(string name){name "Spymaster.Resources." name; // "Spymaster.Resources.resources.mainboard.png"// "Spymaster.Properties.Resource…

C++的指针

C的指针 指针变量的定义和使用 指针的作用:可以通过指针间接访问内存。 内存编号是从0开始记录的,一般用十六进制数字表示。可以利用指针变量保存地址。 指针就是一个地址。指针变量就是用来存放地址的。 可以通过p去使用它,也可以去访问它…

支付宝2017年个人账单明天发布,你小心脏准备好了吗?

今天上午,支付宝公布了 2017 年全民账单,数据显示,随着移动支付的普及,中国人的生活方式正悄然巨变,不带钱包出门已成为中国人的新习惯,并成为世界的新时尚。根据全民账单数据显示,在2017年&…

支付宝个人账单出来了,这里有最全的查看攻略!

今天是2018年1月3日,支付宝个人年度账单如期而至。账单页面那怎么查看个人账单呢?第一步、打开支付宝,点击【我的】然后选择【账单】打开第二步、点击账单页头的banner第三步、滑动动画查看个人账单

C++的结构体

C的结构体 结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。 结构体定义和使用 注意:在创建结构体变量的时候,关键字struct可以省略,但是在定义结构体时,不能省略关键字struct。 结构体数组 作用&a…