CPM调制解调

  • Dewey
    了解作者
  • matlab
    开发工具
  • 7.4KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 5 积分
    下载积分
  • 1
    下载次数
  • 2022-07-02 10:23
    上传日期
CPM信号调制,包括矩形脉冲LREC、升余弦脉冲LRC和高斯最小频移键控脉冲GMSK
CPM.zip
  • CPM
  • MLSD_Viterbi_CPM_FinalVer.m
    10.3KB
  • MainFunctions.m
    13KB
内容介绍
function MAIN = MainFunctions MAIN.CREATECPMPULSE = @CREATECPMPULSE; MAIN.PERMUREPET = @PERMUREPET; MAIN.states_Branches = @states_Branches; MAIN.states_transition = @states_transition; MAIN.Mapp = @Mapp; MAIN.deMapp = @deMapp; MAIN.compute_Branche_metric = @compute_Branche_metric; end function [g_t,q_t,t] = CREATECPMPULSE(pulse,pulse_length,w,freq_sa,img) g_t = 0; q_t = 0; time_sa = 1/freq_sa; switch pulse case 1 t = -pulse_length/2:time_sa:pulse_length/2; t0 = 0; g_t = (2*w)./((t-t0).^2+w^2); g_t = g_t*(1/(4*pi)); Cst = sum(g_t)*time_sa; nug_t = (0.5) / Cst; g_t = nug_t*g_t; q_t = cumtrapz(g_t)*time_sa; case 2 t = -pulse_length/2:time_sa:pulse_length/2; BT = 0.3; alpha = 2*pi*BT/(sqrt(log(2))); gauss = qfunc(alpha*(t-0.5)) - qfunc(alpha*(t+0.5)); Cst = 0.5/(sum(gauss)*time_sa); g_t = Cst*gauss; q_t = cumtrapz(g_t)*time_sa; case 3 t = 0:time_sa:pulse_length; g_t = (1/(2*pulse_length).*(1- cos(2*pi.*t/(pulse_length)))); K = 0.5/(sum(g_t)*time_sa); g_t = K*g_t; q_t = cumtrapz(g_t)*time_sa; case 4 t = 0:time_sa:pulse_length; g_t = 1/(2*pulse_length)*ones(1,length(t)); g_t(1) = 0; % g_t(end) = 0; K = 0.5/(sum(g_t)*time_sa); g_t = K*g_t; q_t = cumtrapz(g_t)*time_sa; otherwise disp('no pulses for pulse >4') end if(img ==1) figure (1) % subplot(1,2,1) if(pulse==1) plot(t,4*pi*g_t) else plot(t,g_t) end xlabel('time(t/T_s)') ylabel('Freqeuncy pulse g(t)') grid on; set(gca,'FontName','Arial','FontSize',12) figure (2) plot(t,q_t) xlabel('time') ylabel('q(t)') grid on; else end end function [M, I] = PERMUREPET(V, N, K) % PERMN - permutations with repetition % Using two input variables V and N, M = PERMN(V,N) returns all % permutations of N elements taken from the vector V, with repetitions. % V can be any type of array (numbers, cells etc.) and M will be of the % same type as V. If V is empty or N is 0, M will be empty. M has the % size numel(V).^N-by-N. % % When only a subset of these permutations is needed, you can call PERMN % with 3 input variables: M = PERMN(V,N,K) returns only the K-ths % permutations. The output is the same as M = PERMN(V,N) ; M = M(K,:), % but it avoids memory issues that may occur when there are too many % combinations. This is particulary useful when you only need a few % permutations at a given time. If V or K is empty, or N is zero, M will % be empty. M has the size numel(K)-by-N. % % [M, I] = PERMN(...) also returns an index matrix I so that M = V(I). % % Examples: % M = permn([1 2 3],2) % returns the 9-by-2 matrix: % 1 1 % 1 2 % 1 3 % 2 1 % 2 2 % 2 3 % 3 1 % 3 2 % 3 3 % % M = permn([99 7],4) % returns the 16-by-4 matrix: % 99 99 99 99 % 99 99 99 7 % 99 99 7 99 % 99 99 7 7 % ... % 7 7 7 99 % 7 7 7 7 % % M = permn({'hello!' 1:3},2) % returns the 4-by-2 cell array % 'hello!' 'hello!' % 'hello!' [1x3 double] % [1x3 double] 'hello!' % [1x3 double] [1x3 double] % % V = 11:15, N = 3, K = [2 124 21 99] % M = permn(V, N, K) % returns the 4-by-3 matrix: % % 11 11 12 % % 15 15 14 % % 11 15 11 % % 14 15 14 % % which are the 2nd, 124th, 21st and 99th permutations % % Check with PERMN using two inputs % M2 = permn(V,N) ; isequal(M2(K,:),M) % % Note that M2 is a 125-by-3 matrix % % % PERMN can be used generate a binary table, as in % B = permn([0 1],5) % % NB Matrix sizes increases exponentially at rate (n^N)*N. % % See also PERMS, NCHOOSEK % ALLCOMB, PERMPOS, NEXTPERM, NCHOOSE2 on the File Exchange % tested in Matlab 2018a % version 6.2 (jan 2019) % (c) Jos van der Geest % Matlab File Exchange Author ID: 10584 % email: samelinoa@gmail.com % History % 1.1 updated help text % 2.0 new faster algorithm % 3.0 (aug 2006) implemented very fast algorithm % 3.1 (may 2007) Improved algorithm Roger Stafford pointed out that for some values, the floor % operation on floating points, according to the IEEE 754 standard, could return % erroneous values. His excellent solution was to add (1/2) to the values % of A. % 3.2 (may 2007) changed help and error messages slightly % 4.0 (may 2008) again a faster implementation, based on ALLCOMB, suggested on the % newsgroup comp.soft-sys.matlab on May 7th 2008 by "Helper". It was % pointed out that COMBN(V,N) equals ALLCOMB(V,V,V...) (V repeated N % times), ALLCMOB being faster. Actually version 4 is an improvement % over version 1 ... % 4.1 (jan 2010) removed call to FLIPLR, using refered indexing N:-1:1 % (is faster, suggestion of Jan Simon, jan 2010), removed REPMAT, and % let NDGRID handle this % 4.2 (apr 2011) corrrectly return a column vector for N = 1 (error pointed % out by Wilson). % 4.3 (apr 2013) make a reference to COMBNSUB % 5.0 (may 2015) NAME CHANGED (COMBN -> PERMN) and updated description, % following comment by Stephen Obeldick that this function is misnamed % as it produces permutations with repetitions rather then combinations. % 5.1 (may 2015) always calculate M via indices % 6.0 (may 2015) merged the functionaly of permnsub (aka combnsub) and this % function % 6.1 (may 2016) fixed spelling errors % 6.2 (jan 2019) fixed some coding style warnings narginchk(2, 3) ; if fix(N) ~= N || N < 0 || numel(N) ~= 1 error('permn:negativeN','Second argument should be a positive integer') ; end nV = numel(V) ; if nargin==2 %% PERMN(V,N) - return all permutations if nV == 0 || N == 0 M = zeros(nV, N) ; I = zeros(nV, N) ; elseif N == 1 % return column vectors M = V(:) ; I = (1:nV).' ; else % this is faster than the math trick used with 3 inputs below [Y{N:-1:1}] = ndgrid(1:nV) ; I = reshape(cat(N+1, Y{:}), [], N) ; M = V(I) ; end else %% PERMN(V,N,K) - return a subset of all permutations nK = numel(K) ; if nV == 0 || N == 0 || nK == 0 M = zeros(numel(K), N) ; I = zeros(numel(K), N) ; elseif nK < 1 || any(K<1) || any(K ~= fix(K)) error('permn:InvalidIndex','Third argument should contain positive integers.') ; else V = reshape(V, 1, []) ; % v1.1 make input a row vector nV = numel(V) ; Npos = nV^N ; if any(K > Npos) warning('permn:IndexOverflow', ... 'Values of K exceeding the total number of combinations are saturated.') K = min(K, Npos) ; end % The engine is based on version 3.2 with the correction % suggested by Roger Stafford. This approach uses a single ma
评论
    相关推荐
    • CPM-DID.zip
      计算机编程手册(CPM)提供程序员理解如何编程给定计算机所需的信息。 本手册主要关注计算机本身,而不是计算机上运行的特定软件。
    • cpm.rar
      SPI Parameter RAM common to QE and CPM.
    • CPC & CPM Calculator-crx插件
      使用CPC和CPA和CPM计算器的好处::check_mark:不仅CPC计算器,还不仅是CPM计算器和CPA计算器:check_mark:可以随时打开Chrome Calculator扩展名:check_mark:无需记住CPC和CPA和CPM公式,轻松计算广告指标:check_mark:...
    • cpm-flatbuffers:CPM外部用于Flatbuffers
      cpm-flatbuffers 外部用于 。 用法 将此行添加到您的CMakeLists.txt文件: CPM_AddModule("cpm-flatbuffers" GIT_REPOSITORY "https://github.com/cogumbreiro/cpm-flatbuffers") 此模块导出CMake函数compile_...
    • CPM 仿真
      CPM调制的编码实现,采用的是matlab编码,用于仿真波形
    • CPM-Generate-Pytorch
      CPM-Generate-Pytorch 本Repo将模型转换为Pytorch单卡/CPU可运行的版本,原Repo 原项目首页: 原项目介绍文章: 项目说明 参考、、等项目开发 感谢上述项目的开源代码和模型 使用说明 克隆本项目代码 $ git clone ...
    • PERT-CPM
      项目评估与审查技术 PERT是一种分析完成给定项目所涉及的任务的方法,尤其是完成每个任务所需的时间,并确定完成整个项目所需的最短时间 ... 使用CPM的基本技术是构建项目模型,其中包括以下内容:
    • 4CPM_matlab
      完成CPM(CPFSK)的调制和解调,发送端包括串并转换,基带成形滤波,升采样,数字上变频,多项式的非线性效应,经过AWGN信道,接收端对称解调,并绘出接收星座图。
    • 28750013CPM.rar
      CPM的简单实现,可能有些错误,需要一些修改
    • libiconv-1.1.tar.gz
      字符集转换程序