реклама на сайте
подробности

 
 
> Поворачивающие множители для БПФ в матлаб
Acvarif
сообщение Sep 6 2013, 16:51
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
petrov
сообщение Sep 6 2013, 17:28
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Для примера в консоли введите

exp(-j*2*pi/8) .^ mod([0:8-1].' * [0:8-1], 8) * ones(1,8).'

это DFT8 от вектора столбца состоящего из единичек.

Вводите в консоли части этого выражения и поймёте что они означают.
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Sep 6 2013, 18:30
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
petrov
сообщение Sep 6 2013, 18:56
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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

Ну это так для примера, каких собственно операций вам не хватает?
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Sep 6 2013, 19:18
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
petrov
сообщение Sep 6 2013, 19:32
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(Acvarif @ Sep 6 2013, 23:18) *
6.123234e-017 (странное число) Получается равен 0?


Да конечно 10^-17 ноль практически.
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Sep 6 2013, 19:44
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(petrov @ Sep 6 2013, 22:32) *
Да конечно 10^-17 ноль практически.

Понятно. Спасибо. Поворачивающие множители нужны для БПФ в ПЛИС.
По ходу еще тема. Можно-ли в матлаб както симитировать отдельно входы реал и мнимый fft32 (32 точки) чтобы подать на них синусоиду и косинусоиду (дискретно, по выборкам)?
Go to the top of the page
 
+Quote Post
petrov
сообщение Sep 6 2013, 21:53
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(Acvarif @ Sep 6 2013, 23:44) *
По ходу еще тема. Можно-ли в матлаб както симитировать отдельно входы реал и мнимый fft32 (32 точки) чтобы подать на них синусоиду и косинусоиду (дискретно, по выборкам)?


re+j*im
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Sep 7 2013, 19:38
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(petrov @ Sep 7 2013, 00:53) *
re+j*im

Понятно.
Как можно в матлаб (не симулинк) симитировать работу КИХ фильтра с дециматором?
Имеются коэффициенты, центральная входная частота, частота выборок, частота децимации.
На выходе нужно получить данные от выборки к выборке (за определенный промежуток времени) нарисовать входной сигнал и выходной.
Буду признателен за подобного рода пример или ссылку на подобные примеры.
Go to the top of the page
 
+Quote Post
petrov
сообщение Sep 8 2013, 06:09
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 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) *
(не симулинк)


Ну и зря игнорируете инструмент облегчающий понимание.
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Sep 8 2013, 16:31
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 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;

Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th June 2025 - 16:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01461 секунд с 7
ELECTRONIX ©2004-2016