Jump to content

    

Спектральный анализ Фурье

1 hour ago, my504 said:

Не может ли мне кто нибудь предложить калькулятор поворачивающих коэффициентов для БПФ? А лучше генератор графа БПФ при задании размера входного массива.

Даа.. Уровень квалификации местных "экспертов" упал ниже плинтуса..

Про MATLAB и Visual Studio вы, похоже, даже не слышали..

:biggrin:

Share this post


Link to post
Share on other sites
2 hours ago, Xenia said:

А я-то что вам говорю? Что именно обработка узким окном во временной области и является их ПРИЧИНОЙ. Не курочьте сигнал во временной области, а обрабатывайте его В ЧАСТОТНОЙ ОБЛАСТИ - и не будет у вас никаких лепестков. Для того и Фурье применяют..

Ксения, не расстраивайте меня... Вы не слышите о чем я Вам говорю. Окно во временной области определяет ПОЛОСУ ОДНОГО ФИЛЬТРА. И не может быть изменено произвольным образом. Это окно (речь конечно о прямоугольном) и создает эти самые лепестки, а точнее паразитные каналы приема ДЛЯ КАЖДОГО ФИЛЬТРА в Фурье. Пусть ближайший лепесток будет на частоте сдвинутой от центральной частоты фильтра на 1 кГц. Тогда сигнал на этой самой сдвинутой на 1 кГц от фильтра частоте будет принят этим фильтром так, как будто он попал прямо в фильтр (с учетом подавления на этом лепестке, конечно). Какое еще окно в частотной области? Вы вообще о чем? У паразитного сигнала в этом боковом лепестке такой спектр РЕАЛЬНО СУЩЕСТВУЕТ. Вы хоть обнакладывайтесь окнами в частотной области, бин будет принимать частоты в своем боковом лепестке.

А если обработать оптимальным окном во временной области, то это приведет к подавлению этих спектральных компонент и никаких "ушей" у АЧХ фильтров уже не будет.

1 hour ago, blackfin said:

Даа.. Уровень квалификации местных "экспертов" упал ниже плинтуса..

Про MATLAB и Visual Studio вы, похоже, даже не слышали..

:biggrin:

Милостивый государь, я канешна понимаю повод по которому Вы тут щеритесь, но от этого Ваше поведение не становится умнее. Я не спрашивал ничего про МАТЛАБ. Я и без вас знаю про МАТЛАБ. Но у меня на работе не стоит МАТЛАБ, по простой и очевидной причине. Мы не используем нелицензионное ПО под страхом увольнения. Даже файлов из сред, на которые нет законной лицензии на рабочих компьютерах нет. А характер решаемых мною задач не требует МАТЛАБа. Даже там, где МАТЛАБ был бы целесообразен с технической точки зрения, он не целесообразен с финансовой. 

Поэтому мне нужен именно калькулятор и желательно онлайн, а не проприетарный резидентный софт. 

Я достаточно понятно изложил мотивы моей просьбы, любезный?

Share this post


Link to post
Share on other sites

Есть же Octave  и NumPy. 

Шеф конторы ваш видать бывший уголовник. А если еще и не пьете на корпоративах - то и алкоголик :D

Share this post


Link to post
Share on other sites

Октав я  попробую. Если там есть требуемый мне генератор, то буду использовать. Сама среда для собственно тестовых расчетов мне нужна крайне редко.

Такова специфика разработок. По сути, во всех изделиях используется одинаковый тип принимаемого сигнала, а методы его приема в линейной части обработки не требуют ничего кроме FIR или IIR (ну и  DFT, конечно). Нелинейную фильтрацию я тестирую прямо на железе, поскольку при симуляции практически невозможно создать специфические помехи. Да и быстрее проверить на железе.

 

ЗЫ. Пока предметно не разобрался, просто потестил обычной арифметикой, но в Октаве я не нашел бокса как в МАТЛАБе со специальными тулзами для генерации фильтров и прочих ништяков. Мне ведь не библиотека с ФФТ нужна. Мне нужно написать код на АСМе для FFT длиной 1К под dsPIC33CH. Свой код, а не библиотечный из Микрочиповского dsplib.

Share this post


Link to post
Share on other sites
1 hour ago, DASM said:

Шеф конторы ваш видать бывший уголовник. А если еще и не пьете на корпоративах - то и алкоголик :D

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

Share this post


Link to post
Share on other sites
9 hours ago, my504 said:

Вы просто не в теме относительно тенденций на эту тему.

Это вы не в теме: Visual Studio

 

11 hours ago, my504 said:

Мне нужно написать код на АСМе для FFT длиной 1К

Считайте sin/cos в Excel'е..

Excel то у вас есть? 

 

 

Share this post


Link to post
Share on other sites
4 minutes ago, blackfin said:

Это вы не в теме

И что? Какое это имеет отношение к моей просьбе? Если Вы знаете встроенный инструмент в бесплатном ПО, который мне сгенерирует граф БПФ, то так и скажите. Не нужно меня отчитывать за то, что у меня не стоит софт, который мне по роду работы не нужен. Даже если он бесплатен. Я не программист. Я радиоинженер. Мои нынешние задачи требуют вполне определенных знаний и навыков. Когда мне их не хватает, я обращаюсь к поисковикам и к сообществу. ЧЯДНТ?

ЗЫ. Задачи разработки я решаю в достаточном для этой ниши качестве. Уверяю Вас.

Share this post


Link to post
Share on other sites
11 minutes ago, my504 said:

Если Вы знаете встроенный инструмент в бесплатном ПО

К сожалению, я не знаю. Но в порядке так сказать помощи))) Поглядите scilab. Он даром. Может быть там найдёте нужный инструмент.

Share this post


Link to post
Share on other sites
26 minutes ago, blackfin said:

Считайте sin/cos в Excel'е..

Да уж... Любезный, как перевести алгебраическую форму комплексного числа в экспоненциальную и наоборот я знаю. Мой вопрос заключался не в расчете коэффициентов, а в самом графе. То есть мне нужны номера коэффициентов и их расстановка в графе.

Share this post


Link to post
Share on other sites
5 minutes ago, my504 said:

То есть мне нужны номера коэффициентов и их расстановка в графе.

"Может, вам ещё и ключ от квартиры где деньги лежат?" :biggrin:

 

5 minutes ago, my504 said:

Мой вопрос заключался не в расчете коэффициентов, а в самом графе.

Напомню:

5 hours ago, my504 said:

Не может ли мне кто нибудь предложить калькулятор поворачивающих коэффициентов для БПФ?

 

Share this post


Link to post
Share on other sites
35 minutes ago, blackfin said:

"Может, вам ещё и ключ от квартиры где деньги лежат?" :biggrin:

Напомню:

 

Милостивый государь, а давайте Вы не будете кривляться и делать вид что ничего не поняли? Вы выдернули цитату из контекста, обрезав следующее за ней предложение.

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

Я Вас услышал. И даже сделал выводы. :bye:

Share this post


Link to post
Share on other sites
4 minutes ago, my504 said:

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

Не знаю, о чем вы тут трындите.. :biggrin:

Я делал БПФ на 2^3, ..., 2^20 точек на С++ для PC, на ассемблере для blackfin'а и на Verilog'е для FPGA.

Никаких графов для 2^20 точек я не рисовал..

Учите матчасть! :)

Share this post


Link to post
Share on other sites
4 minutes ago, blackfin said:

Я делал БПФ на 2^3, ..., 2^20 точек на С++ для PC, на ассемблере для blackfin'а и на Verilog'е для FPGA.

Никаких графов для 2^20 точек я не рисовал..

О! Отлично! Вы то мне и нужны... )))

Есть куча литературы по БПФ в которой в качестве примера приведены графы для 8-ми, максимум для 16-ти точечного БПФ. Есть стандартная общеизвестная формула самой бабочки, в которой индексы поворачивающего коэффициента (угла) привязаны к номеру отсчета.

ЛИЧНО У МЕНЯ, возможно в силу туповатости и/или возраста (мне 61-ый пошел) возникли сложности с вычислением этого самого угла через текущий счетчик итераций.

И я обратился сюда. 

Посылать меня учить матчасть не надо. Иначе я пошлю Вас. Довольно далеко.

Спасибо.

Share this post


Link to post
Share on other sites
кусок кода, детектирующий гармоники в составе сигнала
Спойлер

public ArrayList<SynthesizableSignal> detectHarmonics() {
    SignalCutter cutter = new SignalCutter(source, new Signal(source));
    SynthesizableComplexExponent heterodinParameter = new SynthesizableComplexExponent();
    heterodinParameter.setProperty("frequency", 0.0);
    Signal heterodin = new Signal(source.getLength());
    Signal heterodinedSignal = new Signal(cutter.getCurrentSignal());
    Spectrum spectrum = new Spectrum(heterodinedSignal);
    int harmonic;
    while ((harmonic = spectrum.detectStrongPeak(min)) != -1) {
        if (cutter.getCuttersCount() > 10)
            throw new RuntimeException("Unable to analyze signal! Try another parameters.");
        double heterodinSelected = 0.0;
        double signalToNoise = spectrum.getRealAmplitude(harmonic) / spectrum.getAverageAmplitudeIn(harmonic, windowSize);
        for (double heterodinFrequency = -0.5; heterodinFrequency < (0.5 + heterodinAccuracy); heterodinFrequency += heterodinAccuracy) {
            heterodinParameter.setProperty("frequency", heterodinFrequency);
            heterodinParameter.synthesizeIn(heterodin);
            heterodinedSignal.set(cutter.getCurrentSignal()).multiply(heterodin);
            spectrum.recalc();
            double newSignalToNoise = spectrum.getRealAmplitude(harmonic) / spectrum.getAverageAmplitudeIn(harmonic, windowSize);
            if (newSignalToNoise > signalToNoise) {
                signalToNoise = newSignalToNoise;
                heterodinSelected = heterodinFrequency;
            }
        }
        SynthesizableCosine parameter = new SynthesizableCosine();
        heterodinParameter.setProperty("frequency", heterodinSelected);
        heterodinParameter.synthesizeIn(heterodin);
        heterodinedSignal.set(cutter.getCurrentSignal()).multiply(heterodin);
        spectrum.recalc();
        parameter.setProperty("amplitude", MathHelper.adaptiveRound(spectrum.getRealAmplitude(harmonic)));
        parameter.setProperty("frequency", harmonic - heterodinSelected);
        parameter.setProperty("phase", MathHelper.round(spectrum.getPhase(harmonic), 1));
        cutter.addSignal(parameter);
        cutter.cutNext();
        heterodinedSignal.set(cutter.getCurrentSignal());
        spectrum.recalc();
    }
    return cutter.getSignalsParameters();
}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now