精华内容
下载资源
问答
  • MATLAB循环移位

    2021-04-10 08:58:17
    matlab循环移位操作 需求,拿到了两个以时间为变量函数,形状差不多但是有时间差,为了比对主要信号区间的差异,需要对齐,便想到了circshift的操作,这个函数感觉做相关,循环卷积这种操作,应该是非常顺手的,...

    matlab循环移位操作

    需求,拿到了两个以时间为变量函数,形状差不多但是有时间差,为了比对主要信号区间的差异,需要对齐,便想到了circshift的操作,这个函数感觉做相关,循环卷积这种操作,应该是非常顺手的,记录一下

    1.circshift用法极其简单

    Y = circshift(A,K)

    如果指定第几个维度循环位移: Y = circshift(A,K,dim)

    K是标量,就对第一维循环位移,K是矩阵,就分别对应的维度循环位移
    正数代表下、右方向移位,负数代表左、上方向移位

    2.举例

    % 产生数据------------------------------------
    a =
    
         1     2     3
         4     5     6
         7     8     9
    % 向下移位------------------------------------
    >> circshift(a,1)
    ans =
    
         7     8     9
         1     2     3
         4     5     6
    
    >> circshift(a,[1,1])
    % 向下移位,同时向右移位------------------------
    ans =
    
         9     7     8
         3     1     2
         6     4     5
    
    展开全文
  • (1)矩阵循环移位:circshift  例如:b = circshift(a,[x,y]) 其中a为待移位的矩阵,x表示上下移位位数(正数表示向下移位),y表示左右移位位数(正数表示向右移位) >> x = [1,2,3;4,5,6;7,8,9] x = ...

    (1)矩阵循环移位:circshift

        例如:b = circshift(a,[x,y]) 其中a为待移位的矩阵,x表示上下移位位数(正数表示向下移位),y表示左右移位位数(正数表示向右移位)

    >> x = [1,2,3;4,5,6;7,8,9]

    x =

         1     2     3
         4     5     6
         7     8     9

    >> y = circshift(x,[1,-1])

    y =

         8     9     7
         2     3     1
         5     6     4

    (2)比特移位:bitshift(不能做循环移位)

        例如:b = bitshift(a,k,n) 其中a是待移位数据,k是移位的位数(正数表示左移),n为移位后保留的位数(当左移,超出的位数将被舍弃)

    >> x = 131;
    >> x_bit = dec2bin(x)

    x_bit =

    10000011

    >> y = dec2bin(bitshift(x,2,8))

    y =

    1100

        要想完成bit的循环移位,可以采用这样的方法:

        例如,待移位的数据为x = 3139384450,它是一个32bit的序列,现在需要产生x依此循环左移一位所产生的共32个数据,可以采用以下程序完成:

    x = 3139384450;
    y = dec2bin(x);     //将10进制变为2进制,这时二进制数据的0,1其实是用字符表示的,这样就形成了一个1x32的行向量

    z(1) = x;
    for i = 2 : 32
        y = circshift(y,[0,-1]);    //对与每一行的数据进行左移,y的行不换,y的前1列置后
        z(i) = bin2dec(y);          //将移位后的数据再次变为十进制
    end

    展开全文
  • 在这里,我为循环反转和循环移位编写了简单的函数代码。
  • MATLAB序列移位

    2017-03-20 22:00:04
    序列移位、非循环移位、可设置移位点数、移位点数政府均可 如有序列:【1 2 36 9 8】, 移位点数:【3】 则输出为:【0 0 0 1 2】;
  • FCOLSHIFT 在列维度上按向量 s 进行分数循环移位。 y = fcolshift(X, S) 其中 X 是 M 行 x N 列的二维矩阵。 S 是长度为 N 的向量。该函数将矩阵 X 的第 i 列循环移位等于 s[i] 个像素的量。 由 Francois Bouffard ...
  • BITROTATE 是内置 BITSHIFT 的一个版本,它执行位模式的循环移位而不是丢弃溢出的位。 在命令提示符下键入“help bitrotate”以获取有关如何使用 BITROTATE 的完整说明。 作为一个很酷的例子,我使用 BITROTATE 将...
  • 一.循环移位相关的协议: 二伪随机序列生成: 伪随机序列在之前的文章中专门讲过,有需要的可以点击下面的文章查看:添加链接描述 三下面是pucch信道生成伪随机序列的matlab代码:

    一.循环移位相关的协议:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    二伪随机序列生成:
    在这里插入图片描述
    伪随机序列在之前的文章中专门讲过,有需要的可以点击下面的文章查看:添加链接描述
    三下面是pucch信道生成伪随机序列的matlab代码:

    %---根据38.211里面的6.3.2.2.25.21编写---------------------------------------------------------------------
    %N_CELL_ID指的是物理小区ID
    %N_UL_symb指的是一个slot有多少符号
    %Nc是1600,协议里面已经说明
    %Mpn这个可以自己设定,只要大于自己需要的长度就行,这里要大于14*20*8
    %x10=1协议里面已经给出
    %x11是0  协议里面已经给出
    %ns指针是slot号  
    %此出m0 =0  mcs =0  这两个值需要根据不同格式有区别
    N_CELL_ID = 55;
    N_UL_symb = 14; 
    Nc = 1600;
    Mpn=3000;
    m0 =0 ;
    mcs =0;
    %生成伪随机序列
    x10 =1;       
    x11 = zeros(1,30); 
    x1 = [x10 x11];%给x1序列的第一个周期初始化
     %生成x1序列
    for i = 1:(Nc +Mpn - 31)           
        x1(i + 31) = mod((x1(i + 3) + x1(i)),2);
    end
    % ------------------------
    cinit=N_CELL_ID;
    x20 = de2bi(cinit);
    len = length(x20);
    x21 = zeros(1,31-len);        
    x2 = [x20 x21];   %给x2序列的第一个周期初始化                    ;         
     %-生成x2序列
    for i = 1:(Nc + Mpn- 31)     
        x2(i + 31) = mod((x2(i + 3) + x2(i + 2) + x2(i + 1) + x2(i)),2);
    end
    %生成伪随机序列
    c_pseudo=zeros(1,Mpn);   
    for i = 1: Mpn                       %生成伪随机序列c(i)
        c_pseudo(i) = mod((x1(i + Nc) + x2(i + Nc)),2);
    end
    
    n_cs=zeros(20,N_UL_symb);
    a=zeros(20,N_UL_symb);
    for ns = 0:19
        for l=0:13
            for i=0:7
                n_cs(ns+1,l+1)=n_cs(ns+1,l+1)+c_pseudo(8*N_UL_symb*ns+8*l+i+1)*2^i;
            end
              a(ns+1,l+1) =mod(n_cs(ns+1,l+1)+m0+mcs,12);
        end
    end
    
    
    
    
    
    展开全文
  • matlab 循环卷积函数

    2020-11-08 11:05:10
    matlab循环卷积函数,使用矩阵实现,用于理解循环卷积。分2部分,一部分为循环移位,第二部分给矩阵赋值、计算循环卷积
  • 上篇博文:【 MATLAB 】DFT的性质讨论(二)序列的循环移位及其 MATLAB 实现(时域方法) 提到了对序列x(n)做循环移位后的DFT形式为: 上篇博文已经讨论过了第一种实现循环移位的方法,通过在时域中对序列移位,...

    上篇博文:【 MATLAB 】DFT的性质讨论(二)序列的循环移位及其 MATLAB 实现(时域方法)

    提到了对序列x(n)做循环移位后的DFT形式为:

    上篇博文已经讨论过了第一种实现循环移位的方法,通过在时域中对序列移位,之后取模运算,得到循环移位。并给出了精辟地验证。可以很放心的使用。

    这篇博文呢?我们就通过序列循环移位后的DFT形式来反推序列的循环移位,并独立给出函数。

    这个函数的功能可就强大了。

    假设移位量为m:

    如果m 是一个标量,那么序列移位后就得到一个移位后的序列,这个序列是一个向量。

    如果m是一个向量,向量的每一个元素都是移位量,那么得到的移位后的序列是一个矩阵。

    这个矩阵的每一行都是对输入序列的循环移位,而移位值就是m中的相应元素,例如m的第一个元素为4,那么得到的y的第一行就是x循环右移4位得到的序列。

    趁热打铁,我编写了一个相关的函数,并给出了验证,几经修改,结果正确,自己都把自己感动哭了。成就感就如当年考研最后一门专业课考完后把自己感动哭了的感觉一样。

    知识是用来分享的,我也附出所有代码以及测试:

    function y = cirshftf(x,m,N)
    % Circular shift m samples in sequence x over[0:N-1](frequency domain)
    % ____________________________________________________________________
    % y = cirshftf(x,m,N)
    % y = output sequence containing circular shift
    % x = input sequence of length <= N
    % m = sample shift
    % N = size of circular buffer
    % Method: y(n) = idft(dft(x(n))*WN^(mk))
    % 
    % If m is a scalar then y is a sequence(row vector)
    % If m is a vector then y is a matrix where each row is a circular shift 
    % m and x should not be matrices
    % 
    k = 0:1:N-1;
    x = [x,zeros(1,N - length(x))];
    m = m(:); %m is a column vector
    Nm = length(m);
    Xk = dft(x,N);
    WNmk = (exp(-j*2*pi/N).^(m*k)) ; %WNmk is a matrix with Nm * N
    Xk1 = zeros(Nm,N); %initialization
    for i = 1:Nm
        Xk1(i,:) = WNmk(i,:).*Xk;
    end
    y = zeros(Nm,N); % initialization
    
    for i = 1:Nm
        y(i,:) = idft(Xk1(i,:),N);
    end
    
    
    

    注意,这个函数里面用到了dft以及idft函数,这些函数我以前的博文都给出了。

    见博文:【 MATLAB 】离散傅里叶变换(DFT)以及逆变换(IDFT)的MATLAB实现

    这里说一句,我的数字信号处理的MATLAB专栏,不断更新这方面的知识,有兴趣的可以关注下:数字信号处理的MATLAB实现

    下面给出验证代码:

    clc
    clear
    close all
     
     
    n = 0:10;
    x = [5:-1:0,0:4];
    m = -5;
    N = 11;
    
    subplot(2,1,1);
    stem(n,x);
    title('original sequence  x(n)');
    xlabel('n');
    
    y = cirshftf(x,m,N);
    subplot(2,1,2);
    stem(n,y);
    title('sequence after circular shift for m = -5');
    xlabel('n');
    
    
    


    如果m是一个向量的话,假设m = [-5,3],就是对序列x(n),分别循环移位-5和3,得到的y的第一行就是循环移位-5后的序列,而第二行就是循环移位3后的序列:

    clc
    clear
    close all
     
     
    n = 0:10;
    x = [5:-1:0,0:4];
    m = [-5,3];
    N = 11;
    
    subplot(3,1,1);
    stem(n,x);
    title('original sequence  x(n)');
    xlabel('n');
    
    y = cirshftf(x,m,N);
    subplot(3,1,2);
    stem(n,y(1,:));
    title('sequence after circular shift for m = -5');
    xlabel('n');
    
    subplot(3,1,3);
    stem(n,y(2,:));
    title('sequence after circular shift for m = 3');
    xlabel('n');
    
    
    

    最后给出序列的频域循环移位性质:

     

     

     

    展开全文
  • 提到了对序列x(n)做循环移位后的DFT形式为: 上篇博文已经讨论过了第一种实现循环移位的方法,通过在时域中对序列移位,之后取模运算,得到循环移位。并给出了精辟地验证。可以很放心的使用。这篇博文呢?我们就通过...
  • 如果一个N点序列在任一方向上移位,那么其结果都不在是位于 0 &lt; = n &lt;= N-1之间。因此,需要进行下面的操作: ...下面给出循环移位的函数: function y = cirshftt(x,m,N) %...
  • MATLAB 的矩阵求值的循环语句?clc;clearall;closeall;t0=[11];a=[12;34]t=t0;t(1,:)=t0'\an=10;fori=2:nt(i,:)=t(i-1,:)'\a;endtmatlab 中的核矩阵for循环问题A(i,:)-A(j,:)表示A矩阵的第i行减去第j行,得到的是一个...
  • 有一组数列,比如a=[1 2 3 4 5 6 7],怎样能做出数列[7 1 2 3 4 5 6] ,[6 7 1 2 3 4 5]:   >> a=[1 2 3 4 5 6 7] a =  1 2 3 4 5 6 7   >> a = circshift(a',1)' a =  7
  • 基于matlab循环码实验报告信息论与编码课程名称:课程设计题目 : 循环码的编码和译码程序设计指导教师:系别: 专业:学号: 姓名:合作者完成时间:成绩:评阅人:一、实验目的:1 、 通过实验了解循环码的工作原理。...
  • 二、实验条件PC 机,MATLAB7.0三、实验内容1)循环卷积的定义:两个序列的N 点循环卷积定义为:)0()()()]()([10N n m n x m h n x n h N k N N利用MATLAB 实现两个序列的循环卷积可以分三个步骤完成:(1)初始化:确定...
  • 利用matlab实现循环卷积.doc 1、实验目的1利用MATLAB实现循环卷积。2比较循环卷积与线性卷积的区别。二、实验条件PC机,MATLAB703、实验内容1)循环卷积的定义两个序列的N点循环卷积定义为010NNMXHNXHK...
  • 离散傅里叶变换时域循环移位定理如下: 接下来通过MATLAB编程进行验证,为了便于给出任意移位点数与任意序列的验证,此处将验证代码封装为一个DFT_time_circshift函数,代码如下: function [Xk,Yk,Yk1] = DFT_...
  • 字符串循环移位

    2013-09-12 20:24:33
    字符串循环移位,要考虑移位的位数是否超过了字符串的长度。 代码: //循环左移n位 void loopmove1(char* str,int n) { if(NULL == str) return; int len = strlen(str); int num = n % len; for(int i ...
  • 因此代替线性移位的是应该考虑循环移位循环移位我们上面已经讨论了两篇博文:包含循环移位的卷积运算称为循环卷积,给出: 下面我们根据循环卷积的表达式来使用MATLAB实现循环卷积:我们的思路是对位于[0,N-1...
  • 离散傅里叶变换(DFT)的频域循环移位定理如下: 若: 则: 接下来通过MATLAB编程进行验证,为了便于给出任意移位点数与任意序列的验证,此处将验证代码封装为一个DFT_frequency_circshift函数,代码如下: ...
  • 问题:n个元素的向量V循环移位(以左移为例)i个位置,例如12345循环移动2个位置得到34512. 问题本身非常简单,以至于我们一看到问题就能想到对应的解决策略:申请i个字节的动态存储,将向量区间[0,i-1]的i个元素...
  • 向量循环移位之高效实现

    千次阅读 2011-09-25 00:00:03
    问题:n个元素的向量V循环移位(以左移为例)i个位置,例如12345循环移动2个位置得到34512. 问题本身非常简单,以至于我们一看到问题就能想到对应的解决策略:申请i个字节的动态存储,将向量区间[0,i-1]的i个...
  • MATLAB的两种移位运算

    千次阅读 2018-08-04 09:33:00
    circshift:循环移位数组 语法:B = circshift(A,shiftize) 说明: B= circshift(A,shiftize)通过shiftize元素循环移位数组A中的值。shiftize是整数标量的向量,其中第n个元素指定数组A的第n维的移位量。...
  • matlab 实验四 信号的谱分析.doc 实验四信号的谱分析一、实验目的:1、掌握DTFT原理及其程序实现,学习用DTFT对信号进行谱分析。2、掌握DFT原理及其程序实现,学习用DFT对信号进行谱分析。3、熟悉FFT算法原理和掌握...
  • 字符串右循环移位

    2017-09-13 21:49:51
    思路: 给定一个字符串“abcdefghi”,右移一位则是先把最后一位的i保留起来,然后其他位按位从右向左依次往右挪一位,留下最开始那一位放...这样就是右移一轮,外部加一个for循环,即可完成。   代码: #includ
  • MATLAB 数组循环移动

    2021-03-03 11:20:57
    MATLAB 数组元素循环移动(左移和右移) 在日常使用MATLAB做数组操作时,经常会需要循环位移其中的元素。 网上很多的资料都需要自己编写子函数,其实这大可不必,MATLAB已经内含此函数。 circshift code: A = (1:10)...
  • 循环移位函数circshift circshift Shift positions of elements circularly. Y = circshift(X,K) where K is an integer scalar circularly shifts the elements in the array X by K positions along the first ...
  • 对fft循环移位的重新理解

    千次阅读 2015-01-25 21:29:04
    对一组序列做fft变换。从表面上看,他们是无差别的。但是还是分为很多的类。任何东西都可以分类。当你发现都是一样的时候,说明你还没有进入他的核心。...总结一下,fft的循环移位就是对应序列的频域旋转。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 994
精华内容 397
关键字:

matlab循环移位

matlab 订阅