971 / 704 / 330
Регистрация: 21.10.2012
Сообщений: 2,100
1

Нормировка спектра разных сигналов

28.11.2018, 13:51. Показов 3698. Ответов 13
Метки нет (Все метки)

Здравствуйте. Вопрос связан с нормировкой сигнала, полученного на выходе функции fft. Для рассмотрения взял обычный периодический сигнал единичной амплитуды, построил его спектр, используя разные основания fft.
Кликните здесь для просмотра всего текста
Matlab M
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
clear; clc;
fs = 1000;
t = 0 : 1/fs : 2;
f = 100;
sig = cos(2*pi*f.*t);
 
n = length(sig);
n1 = 2^nextpow2(length(sig));
n2 = 2^(nextpow2(length(sig)) + 1);
 
FFTsig = fft(sig, n);
FFTsig1 = fft(sig, n1);
FFTsig2 = fft(sig, n2);
 
P2 = abs(FFTsig / n);
P21 = abs(FFTsig1 / n1);
P22 = abs(FFTsig2 / n2);
 
P1 = P2(1:n/2);
P1(2:end) = 2*P1(2:end);
 
P11 = P21(1:n1/2);
P11(2:end) = 2*P11(2:end);
 
P12 = P22(1:n2/2);
P12(2:end) = 2*P12(2:end);
 
F = 0: fs/n : fs/2 - fs/n;
F1 = 0: fs/n1 : fs/2 - fs/n2;
F2 = 0: fs/n2 : fs/2 - fs/n2;
 
subplot(2,2,1);
plot(F, P1);
title('n = length(sig)');
 
subplot(2,2,2);
plot(F1, P11);
title('n1 = 2^{nextpow2(length(sig))}');
 
subplot(2,2,3);
plot(F2, P12);
title('n2 = 2^{nextpow2(length(sig)) + 1}');

При основании, равном длине сигнала, получаем амплитуду, практически равную 1. Если взять основание, равное степени 2-ки (и больше, чем длина сигнала), амплитуда сигнала в спектре становится всё меньше и меньше (с ростом основания). Вроде бы, мы должны видеть больше частот (ближе расположенных), но почему искажается амплитуда? (Рис. 1)

И второе: в прикреплённом файле записаны отсчеты импульсной характеристики. Получал я их через fdatool (ФНЧ 1-го порядка, частота дискретизации 44100, частота среза 1000). Захотел я построить спектр этой импульсной характеристики.
Кликните здесь для просмотра всего текста
Matlab M
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
clear; clc;
fs = 44100;
 
load('h1.txt');
sig = h1;
 
n = 8192;
 
FFTsig = fft(sig, n);
FFTsig1 = fft(sig, n);
 
P2 = abs(FFTsig / n);
P21 = abs(FFTsig1);
 
P1 = P2(1:n/2);
P1(2:end) = 2*P1(2:end);
 
P11 = P21(1:n/2);
 
F = 0: fs/n : fs/2 - fs/n;
F1 = 0: fs/n : fs/2 - fs/n;
 
subplot(1,2,1);
plot(F, P1);
title('С нормировкой');
 
subplot(1,2,2);
plot(F1, P11);
title('Без нормировки');

Я предполагал увидеть 1 при нуле и 0,707 на частоте среза. Если использовать нормировку как написано выше, получаем значения меньше тех, что я предполагал увидеть. А вот если не проводить никакой нормировки, то получим ровно эти значения. Рис.2.
Как так происходит? Как в итоге правильно проводить нормировку?
0
Миниатюры
Нормировка спектра разных сигналов   Нормировка спектра разных сигналов  
Вложения
Тип файла: zip 1.zip (1.3 Кб, 4 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2018, 13:51
Ответы с готовыми решениями:

Нормировка амплитудного спектра
Такой вопрос допустим есть спектр аналитического сигнала в котором наблюдается не полное подавление...

Нормировка амплитудного спектра прямоугольного импульса
tay=10^(-4); % длительность импульсов q = 2; % скважность n=1024; Tp=tay*q;% период следования...

Построение спектра сигналов
Сигнал состоит из нижней половины синусоиды и единичного прямоугольного импульса. ...

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

13
163 / 134 / 60
Регистрация: 16.05.2015
Сообщений: 372
28.11.2018, 21:40 2
Я бы нормировал именно на длину сигнала, без добавленных нулей. А дальше, все будет зависеть от того, совпала ли частота синусоиды с каким либо бином спектра или не совпала. Если совпала, то вся энергия синусоиды приходится именно на этот бин, и его амплитуда будет соответствовать тому значению, которое Вы ожидаете увидеть. Если не совпала, то энергия синусоиды будет размазана по нескольким бинам в окрестности частоты синусоиды (называется растекание спектра), и максимальная амплитуда на спектре будет меньше.
1
971 / 704 / 330
Регистрация: 21.10.2012
Сообщений: 2,100
29.11.2018, 12:47  [ТС] 3
Цитата Сообщение от ida2 Посмотреть сообщение
Я бы нормировал именно на длину сигнала, без добавленных нулей
Да, выходит, что так и нужно делать. Но с импульсной характеристикой пока всё равно не очень понятно.
0
163 / 134 / 60
Регистрация: 16.05.2015
Сообщений: 372
29.11.2018, 16:17 4
Цитата Сообщение от АлександрКом Посмотреть сообщение
Но с импульсной характеристикой пока всё равно не очень понятно.
Очень даже понятно. Импульсная характеристика содержит 69 отсчетов. Вы делаете FFT длиной 8192 отсчета. При нормировке Вы делите на 8192, и умножаете на 2. Для бина спектра с номером 1001 (как на правом графике) имеем: 0.7067 * 2 / 8192 = 0.0001725. Что соответствует значению на левом графике.
Но основной подвох кроется в превратном истолковывании значений по оси частот. Бин спектра с номером 1001, не соответствует (в общем случае) частоте 1000Гц! Последний бин спектра соответствует частоте, равной половине частоты дискретизации. В Вашем случае 22050Гц. Цена деления по оси частот составляет (в Вашем случае) 22050 / 8192 = 2.6917Гц. Следовательно, бин с номером 1001 соответствует частоте 2691.7Гц. Т.о. частота 1000Гц находится между бинами спектра с номерами 372 и 373.
0
971 / 704 / 330
Регистрация: 21.10.2012
Сообщений: 2,100
29.11.2018, 16:36  [ТС] 5
Цитата Сообщение от ida2 Посмотреть сообщение
Цена деления по оси частот составляет (в Вашем случае) 22050 / 8192 = 2.6917Гц
Но я же вывожу только половину значений, разве шаг тогда не будет 22050 / (8192/2) = 5,3833 Гц?

Добавлено через 4 минуты
Цитата Сообщение от ida2 Посмотреть сообщение
Бин спектра с номером 1001, не соответствует (в общем случае) частоте 1000Гц
Да, ей соответствуе бин с номером 186
0
163 / 134 / 60
Регистрация: 16.05.2015
Сообщений: 372
29.11.2018, 17:09 6
Цитата Сообщение от АлександрКом Посмотреть сообщение
Но я же вывожу только половину значений
Изначально (на выходе fft()), спектр содержит значения для положительных (0 - Fs/2) и отрицательных (-Fs/2 - 0) частот. Обе половины спектра симметричны. Мы (как правило) отбрасываем отрицательные частоты, но компенсируем эту потерю путем умножения на 2 при нормировке (для всех частот кроме 0). Поэтому шаг именно (Fs/2)/n.
0
971 / 704 / 330
Регистрация: 21.10.2012
Сообщений: 2,100
29.11.2018, 17:26  [ТС] 7
ida2, вот с официального сайта (https://www.mathworks.com/help/matlab/ref/fft.html)
Шаг Fs/L
0
Миниатюры
Нормировка спектра разных сигналов  
163 / 134 / 60
Регистрация: 16.05.2015
Сообщений: 372
29.11.2018, 17:45 8
Цитата Сообщение от АлександрКом Посмотреть сообщение
вот с официального сайта ... Шаг Fs/L
Рассмотрим последнюю точку массива f: частота в ГЦ = (Fs * (L/2))/L, после сокращения L получаем Fs/2.
А насчет шага, да, опростоволосился: у нас же пол-спектра, т.е. (Fs/2)/(n/2) = Fs/n. Вы правы.
0
971 / 704 / 330
Регистрация: 21.10.2012
Сообщений: 2,100
29.11.2018, 17:56  [ТС] 9
Цитата Сообщение от ida2 Посмотреть сообщение
Рассмотрим последнюю точку массива f: частота в ГЦ = (Fs * (L/2))/L, после сокращения L получаем Fs/2
Не совсем понял к чему это
И всё же вопрос был по другому поводу: частоты, получается, выставлены верно. Вас, может быть, смутило, что на графике х = 1001. 1001 - это не номер бина, а значение частоты, 1001 Гц. Номер бина там 186. Вопрос в другом - почему не нужно нормировать значения амплитуды в этом случае?
0
163 / 134 / 60
Регистрация: 16.05.2015
Сообщений: 372
29.11.2018, 20:58 10
Цитата Сообщение от АлександрКом Посмотреть сообщение
Не совсем понял к чему это
Да, это я начал об одном, отвлекся, и закончил о другом, каюсь.

Вычитал в одном месте:
1) когда мы нормируем на длину сигнала - получаем амплитуды вещественных гармонических составляющих.
2) когда мы нормируем на длину FFT - получаем спектральную плотность мощности.
0
163 / 134 / 60
Регистрация: 16.05.2015
Сообщений: 372
30.11.2018, 01:10 11
Что касается получения частотной характеристики из импульсной: путь вроде верный, но есть одно но. Взгляните на рисунок. А теперь взгляните на Вашу ИХ (второй рисунок). Почему она не симметричная? Может быть это только ее часть? Или это был фильтр какой-то марсианский? Иль это вообще что-то не то?
0
Миниатюры
Нормировка спектра разных сигналов   Нормировка спектра разных сигналов  
971 / 704 / 330
Регистрация: 21.10.2012
Сообщений: 2,100
30.11.2018, 11:08  [ТС] 12
Цитата Сообщение от ida2 Посмотреть сообщение
Почему она не симметричная? Может быть это только ее часть? Или это был фильтр какой-то марсианский? Иль это вообще что-то не то?
Миниатюры
Фильтр создавал в fdatool, получал коэффициенты фильтра и через impz получал импульсную характеристику. Импульсная характеристика действительно не симметричная, но для IIR фильтров она и должна, вроде бы, такой быть. Чтобы уж точно проверить, создал новый фильтр и получил его импульсную характеристику (симметричную) (см. рис. и прикрепленный файл). Далее опять построил спектр, один нормированный, второй нет. Видно, что ненормированный совпадает с тем, что предлагает сам fdatool (да и по смыслу подходит). Получается, что проблема не в форме импульсной характеристики
0
Миниатюры
Нормировка спектра разных сигналов   Нормировка спектра разных сигналов  
Вложения
Тип файла: zip h.zip (595 байт, 1 просмотров)
163 / 134 / 60
Регистрация: 16.05.2015
Сообщений: 372
30.11.2018, 11:28 13
В литературе по фильтрам, да и вообще по линейным системам, говорится всегда только одно: применение преобразования Фурье к ИХ дает ЧХ. И про какую-либо нормировку ни слова. Может быть так оно и есть? Если хотим получить амплитуды гармонических составляющих - нормируем спектр, а если не нормируем - имеем коэффициенты передачи для разных частот.
0
971 / 704 / 330
Регистрация: 21.10.2012
Сообщений: 2,100
30.11.2018, 12:06  [ТС] 14
Цитата Сообщение от ida2 Посмотреть сообщение
Если хотим получить амплитуды гармонических составляющих - нормируем спектр, а если не нормируем - имеем коэффициенты передачи для разных частот
По всей видимости что так
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2018, 12:06

Сравнение спектра двух сигналов
Здравствуйте! Мне дали задание сравнить спектры двух сигналов. Фурье преобразование сделал, спектры...

Замер фаз когерентных сигналов разных амплитуд
Как измеряют разность фаз когерентных сигналов разных амплитуд? Частоты порядка 10 МГц. Например...

Связывание сигналов и слотов для разных окон
Привет! Случилась такая проблема: есть два окна, при нажатии кнопки в одном окне должен...

Построить временные диаграммы выходных сигналов триггеров для заданных входных сигналов
1 задание. Построить временную диаграмму выходных сигналов T-триггера при заданных входных...


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

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

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