Проблема с FFT

Захват, обработка и генерирование сигнала
Ответить
brainstorm
beginner
beginner
Сообщения: 29
Зарегистрирован: 18 мар 2009, 11:07
Версия LabVIEW: 8.6

Проблема с FFT

Сообщение brainstorm »

Ситуация такова: в цикле вычисляется БПФ сигнала, форма которого в свою очередь зависит от итерации цикла.
У меня возникли проблемы с:
1) масштабом, а именно на графике с результатом БПФ ось абсцисс не соотвествует по масштабу частотной оси.
2) мне необходимо прослеживать мощность одной определенной составляющей (гармоники) результата FFT и в результате получить график зависимости мощности этой составляющей от итерации цикла.
brainstorm
beginner
beginner
Сообщения: 29
Зарегистрирован: 18 мар 2009, 11:07
Версия LabVIEW: 8.6

Re: Проблема с FFT

Сообщение brainstorm »

Высылай копию моей программы. Суть проблем такова:
С помощью блока Bit Generation из Modulation Toolkit формируется псевдослучайная последовательность (ПСП, PN-sequence), далее в первом цикле она домножается на меандр полутактовой частоты и на выходе цикла имеется модифицированная ПСП, ортогональная первой по огибающей. Далее с помощью блоков Modulate PSK формируются ФМ-сигналы обычной и модифицированной ПСП. Далее из них извлекается квадратурная составляющая с помощью блоков Get Complex IQ Component. Во втором цикле происходит перемножение обычной и модифицированной ПСП, причем на каждой итерации происходит сдвиг обычной ПСП относительно модифицированной на величину равную 1/(Samples per Symbol). Количество итераций равно величине Samples per Symbol. Т.о. за весь цикл одна ПСП "сдвинется" относительно другой на величину равную длительности импульса. При этом на каждой итерации цикла считается БПФ от результата перемножения последовательностей. Проблема заключается в том, что на графике БПФ значения на оси абсцисс не соответствуют частотам гармоник спектра Фурье (т.е. общий вид спектра похож на правду, но масштаб частотной оси явно не соответствует действительности). Из первой проблемы вытекает невозможность решения основной задачи: мне необходимо во время выполнения второго цикла следить за амплитудой определенной гармоники (Fт=1/Ts=1/0.01=100 Hz) и на выходе иметь график зависимости амплитуды этой гармоники от задержки (tau, номер итерации цикла). Звучит страшно, но в примере все понятно. Помогите пожалуйста решить данную задачу.
Вложения
PN-filter.vi
(26.77 КБ) 176 скачиваний
Аватара пользователя
Viktor

Activity Professionalism Tutorials Black
expert
expert
Сообщения: 1408
Зарегистрирован: 23 мар 2008, 10:56
Награды: 4
Версия LabVIEW: 2020
Откуда: Санкт-Петербург
Благодарил (а): 17 раз
Поблагодарили: 3 раза
Контактная информация:

Re: Проблема с FFT

Сообщение Viktor »

Есть предложение:
Давайте будем выкладывать на форум :vi: , сохранённые для :labview: 8.0, чтобы все могли их открыть
:bye:
brainstorm
beginner
beginner
Сообщения: 29
Зарегистрирован: 18 мар 2009, 11:07
Версия LabVIEW: 8.6

Re: Проблема с FFT

Сообщение brainstorm »

Извиняюсь и выкладываю для 8.0...
Вложения
PN-filter.vi
(39.92 КБ) 181 скачивание
brainstorm
beginner
beginner
Сообщения: 29
Зарегистрирован: 18 мар 2009, 11:07
Версия LabVIEW: 8.6

Re: Проблема с FFT

Сообщение brainstorm »

По идее отслеживать определенную частотную составляющую можно так : перемножаем сигнал с гармоническим колебанием с частотой нужной нам гармоники и дальше производим низкочастотную фильтрацию. Я прав? Помогите пожалуйста!
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Проблема с FFT

Сообщение Konstantin Sumenko »

Чтобы отслеживать только нужную частоту, поступают так: проводят прямое преобразование Фурье и выделяют необходимую гармонику. Чтобы предотвратить расползание на соседние частоты используют полосовые фильтры. Просто перемножить сигнал во временной области на гармонический сигнал нужной частоты нельзя- получится чушь. Используй свертку (в частотной области это будет как раз перемножение спектров).
brainstorm
beginner
beginner
Сообщения: 29
Зарегистрирован: 18 мар 2009, 11:07
Версия LabVIEW: 8.6

Re: Проблема с FFT

Сообщение brainstorm »

Crowbar писал(а):Чтобы отслеживать только нужную частоту, поступают так: проводят прямое преобразование Фурье и выделяют необходимую гармонику.
Прямое преобразование Фурье, насколько я понимаю, можно произвести FFT.vi ? Если да, то на выходе этой :vi: я получаю массив комплексных чисел и не знаю какой частоте соотвествует какая амплитуда.
Crowbar писал(а):Используй свертку (в частотной области это будет как раз перемножение спектров).
Можно поподробней про свертку, если можно какой нибудь маленький примерчик.
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Проблема с FFT

Сообщение Konstantin Sumenko »

А ты найди модуль комплексного числа и не забудь нормировать по кол-ву точек в массиве, либо сразу воспользуйся PWR Spectrum, Amp and Ph Spect. Свертка по-английски convolution. В частности, ты можешь посмотреть примеры построения коэффициентов для FIR фильтров (через алгоритм взвешивающих окон (Windowed FIR) и алгоритм Parks-McClellan). FIR фильтр (по-русски КИХ фильтр) есть применение свертки.
brainstorm
beginner
beginner
Сообщения: 29
Зарегистрирован: 18 мар 2009, 11:07
Версия LabVIEW: 8.6

Re: Проблема с FFT

Сообщение brainstorm »

Crowbar писал(а):А ты найди модуль комплексного числа и не забудь нормировать по кол-ву точек в массиве
Ок, и у меня получится массив модулей, а как к реальным частотам то привязаться?

А по поводу нормирования - просто разделить модуль на кол-во элементов массива?
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Проблема с FFT

Сообщение Konstantin Sumenko »

Да, разделить на кол-во элементов. Индекс в массиве умножь на частоту Найквиста, потом подели на половинное кол-во отсчетов (до преобразования), так же шаг по частоте есть обратное значение периода дискретизации. Пример: частота дискретизации 2000 Гц, кол-во отсчетов 2000 => частота Найквиста 1000 Гц => частотный дискрет 1000/1000 = 1гц.
brainstorm
beginner
beginner
Сообщения: 29
Зарегистрирован: 18 мар 2009, 11:07
Версия LabVIEW: 8.6

Re: Проблема с FFT

Сообщение brainstorm »

Ничего если частотный дискрет получился не целым числом?
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Проблема с FFT

Сообщение Konstantin Sumenko »

Не вижу в этом никакого криминала :D
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Обработка сигнала»