Форум программистов, компьютерный форум, киберфорум
Наши страницы
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
ShawnNik
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 6
1

Амплитуда и частота при БПФ (AForge.NET)

04.04.2015, 19:31. Просмотров 1756. Ответов 4
Метки нет (Все метки)

Здравствуйте.
Пожалуйста, помогите разобраться с данной ситуацией.
Пробовал получить спектр сигнала используя набор классов AForge.NET Framework, значения амплитуды являются действительными числами. Для примера был взят синусоидальный сигнал с измеренной вольтметром частотой 159,776 (если не ошибаюсь). Частота дискретизации при записи сигнала была равна 4800Hz. Амплитудные значения записывались в файл формата .txt, из которого считывались пробной программой. В программе производился вывод на экран временной области и спектр сигнала.
Амплитуда и частота при БПФ (AForge.NET)


Для получения спектра сигнала размер БПФ был равен 16384.
Амплитуда и частота при БПФ (AForge.NET)


Как можно увидеть, частота сигнала на спектре почти совпала с измеренной, а амплитуда нет.

Также при увеличении размера БПФ до 32768 и 131072 получался похожий спектр, но со слегка другой частотой на графике и с ещё более заниженной амплитудой сигнала. При этом ни в одном из трёх случаев дополнение БПФ нулями не производилось.
Амплитуда и частота при БПФ (AForge.NET)

Если правильно понял, то для получения истинного значения амплитуды необходимо использовать масштабирующий коэффициент N/2 (N/2 так как значения амплитуды синусоидального сигнала заданы действительными числами), где N - количество отсчётов.

Код на C#, реализующий расчёт БПФ при 16384 отсчётах:
C#
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
private void button3_Click(object sender, EventArgs e)
        {
            chart1.ChartAreas[0].AxisX.Interval = 5;
            Series plot = chart1.Series[0];
            plot.Points.Clear();
            AForge.Math.Complex[] fft = new AForge.Math.Complex[16384];
            for (int n = 0; n < 16384; n++)
            {
                fft[n].Re = amplitudeList[n];
                fft[n].Im = 0;
            }
            FourierTransform.FFT(fft, FourierTransform.Direction.Forward);
            List<double> frequency = new List<double>();
            for (int i = 0; i < fft.Length; i++)
            {
                // Расчёт частоты по оси X.
                frequency.Add(i * (4800.0D / 16384.0D));
            }
            double max = 0.0D;
            int index = 0;
            for (int n = 0; n < 1024; n++)
            {
                plot.Points.AddXY(frequency[n], fft[n].Magnitude);
                if (max < fft[n].Magnitude)
                {
                    max = fft[n].Magnitude;
                    index = n;
                }
            }
            MessageBox.Show(frequency[index].ToString());
        }
Поэтому возникло несколько вопросов:
1. Как и какой именно применить масштабирующий коэффициент в коде, чтобы получить истинное значение амплитуды сигнала на спектре? Вопрос возник, потому что применение N/2 приводило к получению амплитуды ещё больше отличавшегося от истинного (в приведённом выше коде коэффициент не применялся).
2. Почему отличаются значение частоты и амплитуды на спектрах при 16384 и 32768 (131072) отчётах? Из-за отсутствия применения коэффициента?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2015, 19:31
Ответы с готовыми решениями:

Размазывание при БПФ?
Приветствую всех. Друзья, снова заезженное БПФ, с которым я совсем недавно...

Результат БПФ при использовании FFTW
Всем доброго дня! У меня есть массив данных, над которыми я выполняю БПФ,...

Амплитуда спектра
Есть задание, дан сигнал, нужно по картинке определить функцию, вставить в...

Амплитуда n-й гармоники импульса
Если сигнал не периодический,а это импульс,то его спектр сплошной.А как можно...

Амплитуда запуска ждущего мультивибратора?
Дали как РГР рассчитать ждущий мультивибратор. Все рассчитал , но сказали...

4
raxp
10186 / 6569 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
04.04.2015, 20:12 2
1- амплитуду следует нормировать, среди прочего амплитуда есть корень квадратный из сумм квадратов квадратур (косинусной и синусной), а вы занулили мнимую часть.
2- потому что БПФ дает сетку с одинаковым шагом равную отношению частоты дискретизации к количеству точек преобразования, для получения более точных параметров в тех же цифровых осциллографах используется метод переменной сетки с накоплением.
0
ShawnNik
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 6
04.04.2015, 22:46  [ТС] 3
1. А разве при применении комплексного БПФ к действительному сигналу мнимая часть не приравнивается к нулю? По крайней мере несколько записей на сайтах об этом встречал.
0
raxp
10186 / 6569 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
04.04.2015, 22:59 4
...приравнивается, но это не отменяет необходимости нормирования. Среди прочего с реальным сигналом вам никто не гарантирует когерентности, а при выкидывании мнимой части вы также теряете возможность получения фазы сигнала, а она часто-густо и пригодится.
0
ShawnNik
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 6
05.04.2015, 10:34  [ТС] 5
Извиняюсь, но я так и не понял, как же всё-таки получить истинное значение амплитуды (нормирование) для действительного сигнала. Амплитудное значение (
C#
1
fft[n].Magnitude
) в AForge вычислялось нахождением квадратного корня сумм произведений вещественной и мнимой части
C#
1
Sqrt( Re * Re + Im * Im )
.
0
05.04.2015, 10:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2015, 10:34

БПФ синусоиды
Делаю БПФ для массива данных (индекс-отсчет, значение массива- значение файла в...

БПФ и разрядность
Помогите. Нужно вичеслить розрядность (N) БП, если время преобразования равен...

Как зависит амплитуда первой гармоники спектра от длительности импульса?
Прочитал в описании ПЗРК &quot;Игла&quot;, что амплитуда первой гармоники спектра...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru