Анализ аудиозаписей на наличие фонового шума сети
Добрый день, уважаемые участники форума!
В рамках исследования возникли сложности с анализом аудиозаписей посредством программы Matlab по причине отстутсвия опыта написания кода.
Если коротко, то в электросети присутсвует шум с частотой примерно в 50 Гц. Моя цель заключается в анализе аудиозапсией, сделанных с помощью диктофона компьютера, чтобы найти этот шум и сравнить спектральные анализы различных аудиозаписей.
Запланированные шаги:
1. загрузка файла в среду матлаб
2. применение фильтра частот, чтобы анализировать дипазон между 49 и 51 Гц.
3. Построение графика (спектрограммы "время , сек" и "частота, Гц") для каждой аудиозаписи.
4. Сравнение графиков (в идеале бы тоже сделать это в матлабе, но это не самый важный шаг).
На данный момент с помощью "гугления" удалось построить некоторые графики. Но как только доходит дело до их оптимизации, то я встаю в ступор, поскольку не понимаю, что как выбрать необходимые параметры.
С какими пунктами хотелось бы получить помощь:
- реализации фильтра чатсот
- вывод спектрограммы с другими значениями оси координат
Ниже пример исходного кода:
[x, fs]= audioread('iMac.wav')
x = x(:,1);
N = length(x);
t = (0:N-1)/fs;
N/fs
%plot domain signal
plot(t, x)
grid on
set(gca, 'FontName', 'Time New Roman', 'FontSize', 12)
xlabel('Time (s)')
ylabel('Ampl')
title('Signal in time domain')
%stats info
maxValue = max(x)
minValue = min(x)
meanValue = mean(x)
stdValue = std(x)
spectrogram(x, 1024,512,1024,fs,'yaxis')
title ('Spectrogram 1')
specgram(x,512,fs, kaiser(256,5),220)
title('Spectrogram 2')
%Linear Chirp
spectrogram(x,128,125,128,fs,'yaxis')
title('Linear Chirp')
[~,f,t,p] = spectrogram(x,100,80,100,10e3);
[fridge,~,lr] = tfridge(p,f);
hold on
plot3(t,fridge,abs(p(lr)),'LineWidth',4)
hold off
Буду рад выслушать Ваши комментарии и предложения по доработке. Призывы лучше гуглить или прочитать несколько книжек за 2 дня тоже приветствуются ;)
Ответы
50 Гц сети это полезный сигнал, а не шум.
2. Требования к фильтру есть? Нет. Вам нужно понять какой фильтр вам нужен. Можно хотябы запустить FilterDesign tool и там сразу будет картинка и параметры: в духе частоты среза, подавление и т.п. Вот с этим вам придется сперва определиться. И сразу надо сказать чтосделать фильтр "выделяющий только 49-51 Гц" - невозможно. Поэтому и вырабатываются требования.
3. Вот тут вопрос почему именно спектрограмма, это какое-то задание или что?
4. А вот тут еще интереснее, что значит "сравнение"? Сравнение это больше или равно, меньше или равно. А бывает сравнение и анализ творчества поэтов XIX века. Одно элементарная операция, а второе - научная работа. Что же вы подразумеваете под "сравнением"? Критерии?
Не совсем ясно о чем это? Какие координаты вы хотите?
Благодарю за интерес к моей проблеме и столько скорый ответ! Думаю, Вы правы - мне определенно стоит поработать над терминологией.
Это что-то вроде самостоятельной (курсовой рабты) для магистратуры. Суть заключается в анализе аудиозаписей, сделанных устройствами, питающимися от батарей (то есть к сети они не будут подключаться). Если они улавливают фон сети (то что я изначально нахывал шумом сети), то его нужно идентифицировать и сравнить на каждой из сделанных аудиозаписей. Для сравннеия требуется просто вывести несколько графиков на один (пример будет представлен ниже).
Неделю назад мне удалось связаться с коллегами из США, которые работали над похожей работой - анализ записей с устройств, подключенных к сети. Сегодня получил их ответ:
"If you take a closer look at our Fig. 1(b), you can see we have restricted the displayed frequency range to a very narrow range of 59--61 Hz, while the spectrogram you showed went all the way up to 25 kHz, which is not needed.
You may downsample your recording to 1 kHz using Audacity or Matlab's built-in functions (make sure a proper anti-aliasing filter is applied before downsampling), and then play with the spectrogram() function. If you want smoother transitions along the frequency axis, try to increase the nfft parameter. I hope this explanation helps."
1. им удалось сократить отображаемый частотный диапазон с 59 до 61 Гц. В моем случае это должно быть 49 - 51.
2. на какие параметры фильтра сглаживания мне стоит обратить внимание? Как я понял, мне нужно снизить частоту дискретизации до 1 кГц.
3. Под Спектрограммой я понимаю график, который мне покажет, как сигнал в рамках 49 - 51 Гц изменяется во времени. Частота должна быть в Гц, время - в секундах (это я и имел ввиду под параметры осей координат). Такие графики от каждой аудиозаписи я буду сравнивать визуально друг с другом, чтобы убедиться, что они похожи или даже идентичны.
Вот примерно так выглядело это в той нучной работе (см. во вложении).
Тогда все ясно.
Вобще мне кажется что down делать ни к чему, либо каких-то условий задачи не оговорено тут. Ширина спектра определяется длиной записи. Мне кажется достаточно будет поставить довольно простенький фильтр (учитывая картинки которые вы привели, т.к. на них и на глаз не плохо просматривается все, значит фильтр не требовательный).
С down конечно тоже можно заморочиться, но будет сложнее. По этому вопросу на ютуб канале портала, автор (боюсь ошибиться) Марат Усс, тема - ЦОС, - там есть что-то вроде "многоскоростные системы" или "многоскоростные фильтры".
По мне так в вашем случае наиболее важно переходный участок АФЧХ, т.е. шинина между тем, что пропускаем и тем, что подавляем. Чем она уже, тем выше будет порядок фильтра. Порядок фильтра - это длительность переходного процесса, и это тоже возможно отнести к требованиям. Все же зависит от задачи. В каких-то случаях важно четко выделить частоты, тогда порядок фильтра большой, но скорость преобразования малая, т.е. медленная система. А когда важна скорость работы, то тогда получить АЧХ близкую к идеальной - не получится.
Да, понятно. Спросил к тому, что по мне, информативно всегда число. А картинка "раскрашенная красками" - не очень. Спектры информативнее. Хотя по сути это одно и тоже и цвет тоже можно перевести в амплитуду и фазу (хотя не уверен).
Я нашел в каком-то посте Ваш вопрос относительно фильтрации частот с шагом в 1 Гц, где Вы пытались отфильтровать сигнал в 50 Гц и отобразить его в виде синусиды. Могли бы мне подробнее рассказать, как Вам это удалось? Был это искусственно созданный сигнал? Могли бы мы организовать небольшой конф-колл в зуме или скайпе?
Ссылку пришлите где было про это написано. Скорее всего просто по амплитуе. Если амплитуда больше какого-то значение, оно остается без изменений в спектре. Если меньше, то зануляется. Затем по спектру восстанавливается (ifft) сигнал и он уже получается отфильтрованный.