|
Поворачивающие множители для БПФ в матлаб |
|
|
|
Sep 6 2013, 16:51
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
В матлаб совсем плаваю. Но вот понадобилось рассчитать (не на калькуляторе ж их считать) поворачивающие множители для БПФ (8 точек) и сразу попал в яму. Тоесть как посчитать в матлабе это
Пробую делать так n = 2; x3=exp((-1j*2*pi*n)/8); fprintf('%d\n',x3); x4=cos(2*pi*n/8) - 1j*sin(2*pi*n/8); fprintf('%d\n',x4); получаю 6.123234e-017 6.123234e-017 Это что за число такое? Как его понимать? Как 0?
Сообщение отредактировал Acvarif - Sep 6 2013, 17:40
|
|
|
|
|
 |
Ответов
|
Sep 6 2013, 18:30
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(petrov @ Sep 6 2013, 20:28)  Для примера в консоли введите
exp(-j*2*pi/8) .^ mod([0:8-1].' * [0:8-1], 8) * ones(1,8).'
это DFT8 от вектора столбца состоящего из единичек.
Вводите в консоли части этого выражения и поймёте что они означают. Получилось >> exp(-j*2*pi/8) ans = 0.7071 - 0.7071i >> mod([0:8-1].' * [0:8-1], 8) ans = 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 0 2 4 6 0 2 4 6 0 3 6 1 4 7 2 5 0 4 0 4 0 4 0 4 0 5 2 7 4 1 6 3 0 6 4 2 0 6 4 2 0 7 6 5 4 3 2 1 Виноват. Ниче не понял.
Сообщение отредактировал Acvarif - Sep 6 2013, 18:40
|
|
|
|
|
Sep 6 2013, 18:56
|
Гуру
     
Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937

|
Цитата(Acvarif @ Sep 6 2013, 22:30)  Получилось >> exp(-j*2*pi/8)
ans =
0.7071 - 0.7071i
>> mod([0:8-1].' * [0:8-1], 8)
ans =
0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 0 2 4 6 0 2 4 6 0 3 6 1 4 7 2 5 0 4 0 4 0 4 0 4 0 5 2 7 4 1 6 3 0 6 4 2 0 6 4 2 0 7 6 5 4 3 2 1 Виноват. Ниче не понял. .^ поэлемнтное возведение в степень получаем матрицу DFT8 умножаем её на на любой вектор получаем DFT вектора собственно на симметриях этой матрицы и построены FFT Ну это так для примера, каких собственно операций вам не хватает?
|
|
|
|
|
Sep 6 2013, 19:18
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(petrov @ Sep 6 2013, 21:56)  .^ поэлемнтное возведение в степень получаем матрицу DFT8 умножаем её на на любой вектор получаем DFT вектора собственно на симметриях этой матрицы и построены FFT
Ну это так для примера, каких собственно операций вам не хватает? Я только по поводу поворачивающих множителей fft8. Правильно-ли я их вычисляю? При n = 0 W8/0 = 1 - все верно. При n = 2 W8/2 = 6.123234e-017 (странное число) Получается равен 0? При n = 3 W8/3 = -0.707 - вроде верно.
Сообщение отредактировал Acvarif - Sep 6 2013, 19:19
|
|
|
|
|
Sep 6 2013, 19:44
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(petrov @ Sep 6 2013, 22:32)  Да конечно 10^-17 ноль практически. Понятно. Спасибо. Поворачивающие множители нужны для БПФ в ПЛИС. По ходу еще тема. Можно-ли в матлаб както симитировать отдельно входы реал и мнимый fft32 (32 точки) чтобы подать на них синусоиду и косинусоиду (дискретно, по выборкам)?
|
|
|
|
|
Sep 7 2013, 19:38
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(petrov @ Sep 7 2013, 00:53)  re+j*im Понятно. Как можно в матлаб (не симулинк) симитировать работу КИХ фильтра с дециматором? Имеются коэффициенты, центральная входная частота, частота выборок, частота децимации. На выходе нужно получить данные от выборки к выборке (за определенный промежуток времени) нарисовать входной сигнал и выходной. Буду признателен за подобного рода пример или ссылку на подобные примеры.
|
|
|
|
|
Sep 8 2013, 06:09
|
Гуру
     
Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937

|
Цитата(Acvarif @ Sep 7 2013, 23:38)  Понятно. Как можно в матлаб (не симулинк) симитировать работу КИХ фильтра с дециматором? Имеются коэффициенты, центральная входная частота, частота выборок, частота децимации. На выходе нужно получить данные от выборки к выборке (за определенный промежуток времени) нарисовать входной сигнал и выходной. Буду признателен за подобного рода пример или ссылку на подобные примеры. Всякие готовые функции фильтрации на раз ищутся. Но всегда можно сделать на элементарных операциях. Адресация подвектора из вектора данных data(i : i + L-1), L - количество коэффициентов фильтра. Перебираете в цикле подвектора соответствующие выходным отсчётам после децимации. .* - поэлементное умножение подвектора данных и вектора коэффициентов фильтра, sum(vec) - сумма элементов вектора. Цитата(Acvarif @ Sep 7 2013, 23:38)  (не симулинк) Ну и зря игнорируете инструмент облегчающий понимание.
|
|
|
|
|
Sep 8 2013, 16:31
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(petrov @ Sep 8 2013, 09:09)  Ну и зря игнорируете инструмент облегчающий понимание. Да куда мне симулинк. Хотя-бы на элементарных операциях (в editor) чего нибудь написать. Уже будет прогресс. Цитата Адресация подвектора из вектора данных data(i : i + L-1), L - количество коэффициентов фильтра. Перебираете в цикле подвектора соответствующие выходным отсчётам после децимации. .* - поэлементное умножение подвектора данных и вектора коэффициентов фильтра, sum(vec) - сумма элементов вектора. В качестве примера, как это выглядит в коде? Это все, что мне пришло на ум. Код % количество коэффициентов фильтра L = 51; % коэффициенты фильтра Kf = [0,-28,0,106,0,-259,-1,470,1,-658,-1,677,1,-350,-1,-455,1,1740,0,-3332, 0,4901,0,-6056,0,6481,0,-6056,0,4901,0,-3332,0,1740,1,-455,-1,-350,1,677, -1,-658,1,470,-1,-259,0,106,0,-28,0]; % входная частота 90 кГц f = 90000; % частота выборок 360 кГц fs = 360000; % дециматор ds = 5;
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|