Главная страница Дискретный канал связи [0] [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] [153] [154] [155] [156] [157] [158] [159] [160] [161] [162] [163] [164] [165] [166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176] [177] [178] [179] [180] [181] [182] [183] [184] [185] [186] [187] [188] [189] 11.9. СВЕРТКА В СУРРОГАТНЫХ ПОЛЯХ Вычисления в некотором поле можно производить, используя другое поле. Бывают случаи, когда необходимые при обработке сигналов задачи существенно отличаются от имеющегося набора стандартных вычислительных модулей и появляется необходимость подгонки данного вида вычислений к структуре другого вида. Например, может возникнуть необходимость проведения вычислений Б поле Галуа с помощью поля комплексных чисел в качестве суррогатного поля. В простом поле GF (р) циклическую свертку * ci = I аф(1-к)), 1 = 0, п-1, можно заменить сверткой в кольце целых чисел; необходимо только позаботиться о выполнении вычислений по модулю р. Вид уравнения свертки при этом сохраняется, но арифметические операции выполняются в обычной целочисленной арифметике. Затем для получения свертки в поле GF (р) найденные при вычислении целочисленной свертки компоненты Q надо привести по модулю р; это сводит задачу к вычислению только целочисленных сверток. Кольцо целых чисел можно далее вложить в подходящее поле, например комплексное. После этого целочисленная свертка может быть вычислена с помощью любого алгоритма свертки в поле комплексных чисел, например с помощью дискретного преобразования Фурье и теоремы о свертке. Практическое вычисление преобразования Фурье в поле комплексных чисел реализуется на словах конечной длины, что вносит в вычисления ошибку округления. Однако нетрудно подобрать такую длину преобразования, чтобы ошибка округления в компонентах всегда была меньше 0,5. Тогда округление каждой вычисленной компоненты в ближайшее целое число даст правильное значение целочисленной свертки. Переход в каждом целом числе к вычетупо модулю р даст затем правильное значение свертки в GF (р). Может оказаться невозможным оправдать выбор поля комплексных чисел Б качестве суррогатного поля простым подсчетом числа умножений. Однако для поля комплексных чисел имеется доступный набор устройств вычисления свертки, и выбор поля комплексных чисел в качестве суррогатного поля можно оправдать возможностью выполнения данной вычислительной задачи на имеющемся устройстве. Предположим, далее, что надо вычислять свертку сигналов над полем GF (q), где q уже не является простым числом. Тогда каждое отдельноепроизведение элементов поля можно рассматривать как свертку многочленов по модулю некоторого неприводимого многочлена р (х). Вычисление остатка по модулю этого не- приводимого многочлена производится тогда, когда все свертки вычислены. Исходная свертка при этом превращается в двумерную свертку. Пусть а и b - векторы над GF (q). Компоненты этих векторов задаются многочленами т-1 т-1 йг = И auz и = Ц Ьцг над простым полем GF (р), где q = р", а ац и Ьц представляют собой неотрицательные целые числа, меньшие р. Линейная свертка векторов а и b записывается в виде п-1 п-1 т-1 т-1 Ci = Е аф1-к =2 Ij Ij akibi-k) iZ+ (mod p) (mod p (x)), где p - характеристика поля, a p (x) - некоторый простой многочлен степени т. Введем величины п-1 т-1 / = О П 1 Си- = Ь Ь akk-O(i-k) ii-k-), ., 1 k=o ft=o i = и, ..., z/n - 1, и будем рассматривать их как двумерные свертки целых чисел; каждое число в этой двумерной таблице лежит в интервале [О, р - 1 ]. Эта свертка может быть вычислена в любом подходяще суррогатном поле, например в поле вещественных чисел или в поле комплексных чисел; тогда 2т-1 Cl (z) = а CicZ (mod р) (mod р (х)). Вычисление этого остатка производится в последнюю очередь;, сначала находится вычет каждого целого числа по модулю р, а затем вычет многочлена Cf (z) по модулю р (х). Сложность вычисления вычетов пренебрежимо мала по сравнению со сложностью вычисления двумерной свертки. Вместо поля комплексных чисел можно воспользоваться в качестве суррогатного поля любым конечным полем, даже с характеристикой, отличной от характеристикиисходного поля. Для вычисления свертки двоичных последовательностей, длина п которых не превосходит половины простого числа Ферма 2" + 1 при m = 2, 4, 8 или 16, можно использовать поле GF (2"J -f 1). Последовательность над GF (2) можно рассматривать как последовательность целых чисел, принимающих значения, равные только нулю и единице. Длина линейной свертки двух целочисленных последовательностей длины п может быть больше п, но всегда меньше 2*" -f 1. Следовательно, линейная свертка в GF (2) может быть вычислена как циклическая свертка в поле GF (2"* + ЗАДАЧИ 11.1. Построить алгоритм быстрой свертки для кодирования (7, 3)-кода Рида-Соломона, корнями порождающего многочлена которого служат а", 06, и а?. + 1) с последующим приведением по модулю 2. Циклическая свертка в GF (2" ~(- 1) может быть вычислена с помощью любого алгоритма быстрой свертки; один из методов состоит в применении быстрого преобразования Фурье и теоремы о свертке. Например, для непосредственного вычисления свертки в поле GF (2) двух последовательностей длины 2 требуется примерно 2 битовых операций. Вместо этого можно воспользоваться сверткой Б поле GF (2 + 1). В этом поле для вычисления преобразования Фурье надо примерно 2® умножений и 2" сложений; для каждого умножения необходимо примерно (17) битовых операций, а для каждого сложения - примерно 17 битовых операций. Таким образом, свертка может быть вычислена * примерно за 3 X (17- X 2) л; 3 X 2* битовых операций. Теперь предположим, что нам надо свернуть две последовательности Б GF (2). Как и ранее, можно представить элементы поля многочленами над GF (2). Если отложить операцию вычисления остатка по модулю р [х) до завершения всех других вычислений, то исходнаяГ свертка превратится в двумерную свертку. Эта задача может быть вложена в суррогатное поле GF (2" +1), если только длина свертки целых чисел не превышает 2*" -j- 1, т. е. если m-n < 2-" + 1. Например, пусть надо вычислить линейную свертку двух последовательностей длины 8192 над GF (2). Так как 8 (8192) меньше, чем 2" + 1, то в качестве суррогатного поля можно воспользоваться полем GF (2" -f 1). Двумерную (8 X 8192)-точеч-ную линейную свертку можно вычислить через двумерную (16 X X 16 384)-точечную циклическую свертку без потери членов. Эта (16 X 16 384)-точечная циклическая свертка может быть вычислена с помощью методов быстрого преобразования Фурье. 16-точечное преобразование вообще не содержит умножений, а содержит только циклические сдвиги. 16 384-точечное преобразование, как уже обсуждалось выше, может быть разбито с помощью алгоритма Кули-Тьюки БПФ на более короткие свертки. Для того чтобы воспользоваться теоремой о свертке, необходимо выполнить три преобразования, каждое из которых содержит 2048 умножений. В частотной области также необходимо выполнить 16 X 16 384 умножений. Таким образом, для вычисления 8192-точечной свертки над GF (2*) необходимо выполнить 268 288 умножений Б поле GF (2" + 1)- [0] [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] [153] [154] [155] [156] [157] [158] [159] [160] [161] [162] [163] [164] [165] [166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176] [177] [178] [179] [180] [181] [182] [183] [184] [185] [186] [187] [188] [189] 0.0136 |