С Новым годом! Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/40: Рейтинг темы: голосов - 40, средняя оценка - 4.88
5 / 5 / 1
Регистрация: 11.10.2013
Сообщений: 416
1

Амплитудный и фазовый спектры аудио сигнала

10.03.2018, 13:56. Показов 8027. Ответов 38
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Необходимо построить графики АЧХ и ФЧХ wav - файла. Можно ли это сделать с помощью следующей команды:
Matlab M
1
2
[x,Fs,bits]=wavread('c:\1.wav');
fvtool(x)
Если нельзя, то как построить АЧХ и ФЧХ wav - файла?
Спасибо.

Добавлено через 13 минут
Или же для сигнала нельзя построить АЧХ и ФЧХ, а можно построить только амплитудный и фазовый спектры?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2018, 13:56
Ответы с готовыми решениями:

Амплитудный и фазовый спектры
Здравствуйте. Требуется написать функцию, которая используется для построения амплитудной и фазовой...

Как строить амплитудный и фазовый спектры
помогите, пожалуйста. где можно взять подробную информацию про функции? имеется спектральная...

Амплитудный и частотно-фазовый спектры. Мучаюсь уже месяц или около того
Дан код. clc syms wk bk ck arg k Cabs bk = (2 - 2 * (-1)^k) / pi / k; Cabs = abs(bk); arg...

Как можно получить амплитудный и фазовый спектры, коэффициенты разложения бпф без стандартной функции fft
Зосима, если тебя не затруднит, не мог бы ты показать как можно получить амплитудный и фазовый...

38
Эксперт по электронике
939 / 839 / 121
Регистрация: 23.11.2012
Сообщений: 2,489
10.03.2018, 18:07 2
Цитата Сообщение от Alex7676 Посмотреть сообщение
Или же для сигнала нельзя построить АЧХ и ФЧХ, а можно построить только амплитудный и фазовый спектры?
Именно так. А то, что Вы в начале написали лишено всякого смысла.
0
5 / 5 / 1
Регистрация: 11.10.2013
Сообщений: 416
11.03.2018, 00:33  [ТС] 3
R2D2, не подскажете, как построить амплитудный и фазовый спектры wave файла?

Добавлено через 7 минут
И что получается в моём описанном случае? То есть что будет, если применить к аудио файлу команду fvtool()?

Добавлено через 5 часов 52 минуты
R2D2, можно ли таким способом построить амплитудный и фазовый спектры аудио файла?
Matlab M
1
2
3
4
5
6
7
N=2048
Y=wavread('C:\1.wav', N)
T=0:1/(N-1):1
M=length(T)
A=fftshift(fft(Y))
plot(T, abs(A)) %амплитудный спектр
plot(T, angle(A)) %фазовый спектр
0
Эксперт по электронике
939 / 839 / 121
Регистрация: 23.11.2012
Сообщений: 2,489
11.03.2018, 15:56 4
Alex7676, это уже лучше, но все ровно ерунда. Разбкритесь, что Вы откладываете по оси OX.
А в том варианте использования fvtool, что Вы в начале писали - функция или вообще выдаст ошибку, или если и проглотит аргумент, то воспримет Ваш сигнал, как коэф-ты фильтра.
1
5 / 5 / 1
Регистрация: 11.10.2013
Сообщений: 416
11.03.2018, 21:04  [ТС] 5
R2D2, по оси Ох должны быть частоты, как я понимаю. Но как это исправить для меня вопрос.

Добавлено через 1 час 33 минуты
R2D2, может, вот таким образом:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
T = 5;
tay=0.01;
t = 0 : tay : T;
f0=1/T;
x=wavread('C:\1.wav');
max=1/2*tay;
N=length(x);
fmax=-max:abs((2*max)/(N-1)):max;
A=fftshift(fft(x));
        
plot(fmax, abs(A)); %амплитудный спектр
plot(fmax, angle(A)); %фазовый спектр
grid on;
По оси Ох частоты в Гц, по оси Оу - что?
0
1296 / 926 / 448
Регистрация: 21.10.2012
Сообщений: 2,601
12.03.2018, 17:18 6
Исходя из того, что вы знаете частоту дискретизации сигнала (fs):
Matlab M
1
2
3
4
5
6
FftS=abs(fft(x,fs));% Амплитуды преобразования Фурье сигнала
FftS=2*FftS./fs;% Нормировка спектра по амплитуде
F=0:1:fs/2-1/fs;% Массив частот вычисляемого спектра Фурье
figure;
plot(F,FftS(1:length(F)));% Построение спектра Фурье сигнала
grid on;
1
5 / 5 / 1
Регистрация: 11.10.2013
Сообщений: 416
12.03.2018, 21:05  [ТС] 7
АлександрКом, как я понимаю, по оси Оу для фазового спектра будет фаза в радианах, а для амплитудного спектра - амплитуда в чем?
0
Эксперт по электронике
939 / 839 / 121
Регистрация: 23.11.2012
Сообщений: 2,489
14.03.2018, 10:28 8
АлександрКом, объясните, почему для нормировки Вы делите на частоту дискретизации? Более того - Вы частоту дискретизации передаете в качестве размерности БПФ. Это так надо или я чего то не понимаю?
0
1296 / 926 / 448
Регистрация: 21.10.2012
Сообщений: 2,601
14.03.2018, 11:23 9
R2D2, исходил я из того, что преобразование Фурье для каждой из частот фактически представляет собой суммирование сигнала перемноженного на комплексную экспоненту. Поэтому реальный результат будет меньше полученного ровно в количество суммирований (частот в результате). А число частот равно основанию БПФ, которое я выбрал равным частоте дискретизации. Поэтому и делю на fs.
А основание БПФ я выбрал равным частоте дискретизации для того, чтобы частоты в спектре шли ровно через 1 Гц (частота дискретизации / основание БПФ).
0
Эксперт по электронике
939 / 839 / 121
Регистрация: 23.11.2012
Сообщений: 2,489
14.03.2018, 11:49 10
Цитата Сообщение от АлександрКом Посмотреть сообщение
А основание БПФ я выбрал равным частоте дискретизации для того, чтобы частоты в спектре шли ровно через 1 Гц
А я думал, что шаг по частоте определяется длительностью рассматриваемого временного интервала...
0
1296 / 926 / 448
Регистрация: 21.10.2012
Сообщений: 2,601
14.03.2018, 12:27 11
Цитата Сообщение от R2D2 Посмотреть сообщение
длительностью рассматриваемого временного интервала
В этом случае длительность влияет только на "качество" спектра (чем больше временная выборка, тем отчетливее пик в спектре).
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
43
fs = 1000;
t = 0:1/fs:1;
x = cos(2*pi*100.*t);
 
FftS=abs(fft(x,fs));% Амплитуды преобразования Фурье сигнала
FftS=2*FftS./fs;% Нормировка спектра по амплитуде
F=0:1:fs/2-1/fs;% Массив частот вычисляемого спектра Фурье
figure;
subplot(2,2,1)
plot(F,FftS(1:length(F)));% Построение спектра Фурье сигнала
grid on;
 
%% Другое основание
fs = 500;
FftS=abs(fft(x,fs));% Амплитуды преобразования Фурье сигнала
FftS=2*FftS./fs;% Нормировка спектра по амплитуде
F=0:1:fs/2-1/fs;% Массив частот вычисляемого спектра Фурье
subplot(2,2,2)
plot(F,FftS(1:length(F)));% Построение спектра Фурье сигнала
grid on;
 
%% Меньше длительность, старое основание
fs = 1000;
t = 0:1/fs:0.5;
x = cos(2*pi*100.*t);
 
FftS=abs(fft(x,fs));% Амплитуды преобразования Фурье сигнала
FftS=2*FftS./fs;% Нормировка спектра по амплитуде
F=0:1:fs/2-1/fs;% Массив частот вычисляемого спектра Фурье
subplot(2,2,3)
plot(F,FftS(1:length(F)));% Построение спектра Фурье сигнала
grid on;
 
%% Ещё меньше длительность, старое основание
t = 0:1/fs:0.1;
x = cos(2*pi*100.*t);
 
FftS=abs(fft(x,fs));% Амплитуды преобразования Фурье сигнала
FftS=2*FftS./fs;% Нормировка спектра по амплитуде
F=0:1:fs/2-1/fs;% Массив частот вычисляемого спектра Фурье
subplot(2,2,4)
plot(F,FftS(1:length(F)));% Построение спектра Фурье сигнала
grid on;
0
Эксперт по электронике
939 / 839 / 121
Регистрация: 23.11.2012
Сообщений: 2,489
14.03.2018, 18:07 12
Цитата Сообщение от АлександрКом Посмотреть сообщение
В этом случае длительность влияет только на "качество" спектра
Так это же и есть шаг по частоте. Короче не понять мне, как частота дискретизации (которая, кслову, вообще может быть и НЕ целым числом) может быть размерностью БПФ.
0
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
14.03.2018, 19:18 13
АлександрКом, Как то не рационально выбирать в качестве основания БПФ значение, не являющееся степенью числа 2. (Хоть это и не принципиально.) Настораживает другое. Указав Fs в качестве основания БПФ, Вы осуществляете БПФ по начальному участку входной последовательности длиной в Fs сэмплов. А изначально, как я понял, ставилась задача получения спектра для всего звукового файла.
Вот что сказано о параметре n функции fft:
If X is a vector and the length of X is less than n, then X is padded with trailing zeros to length n.
If X is a vector and the length of X is greater than n, then X is truncated to length n.
https://uk.mathworks.com/help/matlab/ref/fft.html
0
1296 / 926 / 448
Регистрация: 21.10.2012
Сообщений: 2,601
15.03.2018, 13:40 14
Цитата Сообщение от ida2 Посмотреть сообщение
Указав Fs в качестве основания БПФ, Вы осуществляете БПФ по начальному участку входной последовательности длиной в Fs сэмплов. А изначально, как я понял, ставилась задача получения спектра для всего звукового файла
Т.е. вы хотите сказать, что в качестве основания следует брать число отсчетов в рассмтриваемом сигнале? Или я вас неправильно понял
0
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
15.03.2018, 13:58 15
Цитата Сообщение от АлександрКом Посмотреть сообщение
Т.е. вы хотите сказать, что в качестве основания следует брать число отсчетов в рассмтриваемом сигнале?
Да, именно так, если интересует спектр всего wav файла:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
[x,Fs]=audioread('1.wav');
L = length(x);
 
n = 2^nextpow2(L);
Y = fft(x,n);
f = Fs*(0:(n/2))/n;
P = abs(Y/n);
 
plot(f,P(1:n/2+1))
xlabel('Frequency (f)')
ylabel('|P(f)|')
Это слегка модифицированный код примера по ссылке из моего предыдущего поста.
1
1296 / 926 / 448
Регистрация: 21.10.2012
Сообщений: 2,601
15.03.2018, 14:40 16
Цитата Сообщение от ida2 Посмотреть сообщение
Да, именно так, если интересует спектр всего wav файла:
Возможно, для звуковых файлов так и делается, я точно не знаю. Решил проверить одну вещь: открыл матлабовский SPtool и посмотрел как выглядит спектр сигнала train (trainse [auto]). Настройки никакие не менял, только сделал линейный масштаб по оси OY (см. Рис 1). Видим 3 нарастающих пика (не считая ещё 2-3 маленьких далее). А потом попробовал сам построить спектр; взял ваш код и свой. Результат Рис.2. Почему-то в вашем случае второй пик оказался больше третьего.
Миниатюры
Амплитудный и фазовый спектры аудио сигнала   Амплитудный и фазовый спектры аудио сигнала  
0
1296 / 926 / 448
Регистрация: 21.10.2012
Сообщений: 2,601
15.03.2018, 14:42 17
Перезалил Рис.1
Миниатюры
Амплитудный и фазовый спектры аудио сигнала  
0
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
15.03.2018, 17:51 18
АлександрКом, Я думаю, это объяснимо.

Для начала вопрос: В Вашем коде и в моем коде использовалось одинаковое значение параметра n при вызове функции fft? Если нет, то все закономерно, т.к. в этом случае получены спектры различной длины, и бины двух спектров соответствуют разным частотам. Если значение n в обоих случаях были одинаковые, то нужно думать.

Что касается SPtool, то здесь еще проще. Исходя из приведенного скрина fft осуществлялось для 256 окон длиной 1024 сэмпла, очевидно с последующим усреднением полученных спектров. А это уже несколько не то, что в моем коде. Кроме того, результирующий спектр (а может и каждый из спектров окон, не знаю) был взвешен окном Ханнинга, и это также вносит свои коррективы. Эту информацию я черпнул из параметров на скрине.
0
1296 / 926 / 448
Регистрация: 21.10.2012
Сообщений: 2,601
15.03.2018, 18:19 19
Используемый код:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
clear; clc;
load('train');
 
FftS=abs(fft(y,Fs));% Амплитуды преобразования Фурье сигнала
FftS=2*FftS./Fs;% Нормировка спектра по амплитуде
F=0:1:Fs/2-1/Fs;% Массив частот вычисляемого спектра Фурье
figure;
subplot(2,1,1)
plot(F,FftS(1:length(F)));% Построение спектра Фурье сигнала
grid on;
 
L = length(y); 
n = 2^nextpow2(L);
Y = fft(y,n);
f = Fs*(0:(n/2))/n;
P = abs(Y/n);
subplot(2,1,2)
plot(f,P(1:n/2+1))
xlabel('Frequency (f)')
ylabel('|P(f)|')
grid on;
Цитата Сообщение от ida2 Посмотреть сообщение
В Вашем коде и в моем коде использовалось одинаковое значение параметра n при вызове функции fft
Нет, но тут как раз вопрос: если я правильно понимаю точки в спектре идут с шагом Fs/n. В моем случае этот шаг равняется 1, в вашем - именно для этого случая с шагом 8192/16384 = 1/2. Т.е. все значения на оси OX делим на 2 и получаем реальные частоты в Гц. Вопрос: почему пики в обоих случаях практически совпадают по своему положению?
0
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
15.03.2018, 20:51 20
Цитата Сообщение от АлександрКом Посмотреть сообщение
точки в спектре идут с шагом Fs/n
На самом деле с шагом Fs/(2*n). На выходе из fft мы получаем симметричный спектр для частот от -Fs/2 до +Fs/2, а выводим на график только его половину, соответствующую положительным частотам.
Цитата Сообщение от АлександрКом Посмотреть сообщение
почему пики в обоих случаях практически совпадают по своему положению?
А почему бы им не совпадать? Оба спектра описывают диапазон частот от 0 до Fs/2, но только с разным разрешением. Проведем аналогию. Представьте себе две линейки длиной 1 метр. Одна с делениями допустим 1 мм, а вторая с делениями допустим 2 мм. Будем измерять этими линейками расстояние равное 101 мм. Первая покажет ровно 101 мм. Вторая покажет точку между 100 мм и 102 мм. Но это будет одно и то же место на обоих линейках (от начала шкалы). Для второй линейки мы можем интерполировать между 100 и 102, и получим 101 мм. То же происходит и со спектрами. По этому, скорее всего, отличаются и амплитуды "одинаковых" пиков. Бина соответствующего 101 мм нет на спектре с более низким разрешением, а его энергия размазана по соседним бинам.
0
15.03.2018, 20:51
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.03.2018, 20:51
Помогаю со студенческими работами здесь

Амплитудный спектр полигармонического сигнала
Доброго времени суток. Дали нам вводную лабу в универе, с шаблоном выполнения. В этой части надо...

Амплитудный спектр сигнала (Matlab)
Здравствуйте. Подскажите, пожалуйста, какие есть способы вычисления амплитудного спектра...

Нужно сделать преобразование Шаудера для аудио сигнала
Добрый день, нужно сделать преобразование Шаудера для аудио сигнала. Алгоритм есть, но не понимаю,...

Вычислить амплитудный и фазовый спектры этого сигнала
Всем привет, при выполнении задания на маткаде столкнулся с проблемой, когда пытаюсь расчитать одну...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru