Red de conocimiento informático - Consumibles informáticos - Código fuente de Matlab de slm, un método para reducir la relación pico-promedio de ofdm

Código fuente de Matlab de slm, un método para reducir la relación pico-promedio de ofdm

data=circshift(data,[4 0]);

Función b = circshift(a, p)

Matriz de desplazamiento circular %CIRCSHIFT.

% B = CIRCSHIFT(A, SHIFTSIZE) mueve circularmente los valores en la matriz A

% por elementos SHIFTSIZE. SHIFTSIZE es un vector de escalares enteros, donde

% N elementos especifican desplazamientos en la enésima dimensión

% matriz A. Si los elementos en SHIFTSIZE son positivos, el valor de A se desplaza un

% hacia abajo (o hacia la derecha). Si es negativo,

% se mueve hacia arriba (o hacia la izquierda).

%

%Ejemplo:

% A =[1 2 3; B = circshift(A, 1) % mueve circularmente el valor de la primera dimensión hacia abajo en 1.

% B = 7 8 9

% 1 2 3

% 4 5 6

% B = desplazamiento circular(A, [ 1 -1]) %Mueva circularmente el valor de la primera dimensión

% %hacia abajo en 1 y la segunda dimensión en 1 hacia la izquierda.

% B = 8 9 7

% 2 3 1

% 5 6 4

%

%Ver también FFTSHIFT, SHIFTDIM, PERMUTE.

%Copyright 1984-2004 The MathWorks, Inc.

% $Revisión: 1.11.4 2 $ $Fecha: 2004/12/06 16:34:07 $ .

%Análisis característico de matrices dispersas

Si no hay exactamente dos parámetros de entrada, se producirá un error.

Si nargin & lt2% estrecho representa la función número variable.

Error(' MATLAB:circshift:NoInputs ', ['No se especificaron parámetros de entrada'...

Debe haber exactamente dos parámetros de entrada.])

Fin

%Analiza la entrada para revelar las variables requeridas para el cálculo

%%Juzga las condiciones de entrada

[p, sizeA, numDimsA, msg] = ParseInputs( a, p);

Si ParseInputs encuentra una entrada SHIFTSIZE incorrecta, se produce % error

Si (~isempty(msg)) %isempty prueba si la matriz está vacía . Vacío devuelve 1, no devuelve 0.

Error (' MATLAB:circshift:invalid shift type ', ' %s ', msg

Fin

% del cálculo convierte la matriz de entrada en índice); a generar

%Inicializa la matriz de celdas del índice

idx = cell(1, numDimsA);

% Recorre cada dimensión de la matriz de entrada para calcular el índice desplazado

For k = 1:numDimsA

m = sizeA(k);

p>

idx{k} = mod((0:m-1)-p(k),m)+1;

Fin

% Matriz de entrada por índice para realizar la conversión real

b = a(idx {:});

%%%

%%%parse input

%%%

función [p, tamañoA, numDimsA, msg] = ParseInputs(a, p)

%default

tamañoA = size(a);

numDimsA = ndims(a); %ndims obtiene las dimensiones de la matriz.

msg = "";

% Asegúrese de que la entrada SHIFTSIZE sea un vector real finito

sh = p(:);

es finito = todo(es finito(sh));%isfinite detecta los elementos finitos de los elementos de la matriz, devuelve una matriz con la misma dimensión que A, el valor finito correspondiente es 1, infinito o nun0% todo prueba si todos los elementos son elementos distintos de cero, sí, 1; Detectar por columna.

nonspare = all(~ is Spare(sh));% ISSARSE (a) Compruebe si la matriz es escasa. Para matrices dispersas, a devuelve un 1 lógico y viceversa.

isInteger = all(isa(sh,'double')&(imag(sh)==0);(sh==round(sh)));%isa detecta la clase del objeto sh , imag toma la parte imaginaria del número complejo y round toma el número entero más cercano.

es vector =((ndims(p)== 2)& & amp((tamaño(p, 1) == 1) || (tamaño(p, 2)== 1) )) ;

if ~(es infinito & amp;& ampisInteger & amp& ampisVector & amp& amp no separados)

msg = ['Tipo de turno no válido: '...

' debe ser un vector finito y no analítico de enteros reales. ];

Return;

End

% Asegúrese de que la longitud del vector de desplazamiento sea la misma que la longitud de numDimsA.

% Se supone que los valores de desplazamiento faltantes son 0. Número extra

Cuando el vector de movimiento es más largo, se ignorará el % del valor de movimiento

% que numDimsA.

if(numel(p)<NumDimsA) %numel(A) devuelve el número de elementos de la matriz A.

p(numDimsA)= 0

Fin

;