tag:blogger.com,1999:blog-30134886095728891552024-03-09T18:16:48.640-08:00Visual Basic 6.0 - Superior Source Code(2014 - 2024)Unknownnoreply@blogger.comBlogger292125tag:blogger.com,1999:blog-3013488609572889155.post-3039730155412321322022-06-09T18:47:00.010-07:002022-06-09T18:47:00.196-07:00Trend Micro HiJackThis source code in VB6<p>The HiJackThis project is made by <a href="https://github.com/dragokas" target="_blank">Stanislav Polshyn</a>, a professional in our community! I advise you to visit his <a href="https://github.com/dragokas?tab=repositories" target="_blank">repositories on GitHub</a>. <a href="https://github.com/dragokas/hijackthis" target="_blank">HiJackThis</a> literally made history (<span style="background-color: white; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-weight: 600;">Trend Micro</span>).</p><p><a href="https://drive.google.com/file/d/15iSsVaniN6EZ_xKj7KJt7wijYxyprqxg/view?usp=sharing" target="_blank">Download from me</a></p><p><a href="https://github.com/dragokas/hijackthis" target="_blank">Download from GitHub</a></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjTEV-qtEqNv-qYdrrhFn5k3YHGI-vp2n074Qhbq-YATC7zLfEOnZ3hctuoDxvPmhiBb2T_eOveenfs0D55q_NNb8C5ejjroNpjrC06Zhy-nNtad0mm43fA1nkV2TmUs6YTWnZY7qEqjeYWHhtsVicWSE7OFPBEhZqIUxQM1gPl49TU5F8OZNyYg8yG=s586" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="550" data-original-width="586" height="600" src="https://blogger.googleusercontent.com/img/a/AVvXsEjTEV-qtEqNv-qYdrrhFn5k3YHGI-vp2n074Qhbq-YATC7zLfEOnZ3hctuoDxvPmhiBb2T_eOveenfs0D55q_NNb8C5ejjroNpjrC06Zhy-nNtad0mm43fA1nkV2TmUs6YTWnZY7qEqjeYWHhtsVicWSE7OFPBEhZqIUxQM1gPl49TU5F8OZNyYg8yG=w640-h600" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: right;"><div class="separator" style="clear: both; text-align: left;"><h2 dir="auto" style="background-color: white; border-bottom: 1px solid var(--color-border-muted); box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;"><span style="font-size: medium;">Features</span></h2><ul dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;">Lists non-default settings in the registry, hard drive and memory related to autostart</li><li style="box-sizing: border-box; margin-top: 0.25em;">Generates organized, easily readable reports</li><li style="box-sizing: border-box; margin-top: 0.25em;">Does not use a database of specific malware, adware, etc</li><li style="box-sizing: border-box; margin-top: 0.25em;">Detects potential <em style="box-sizing: border-box;">methods</em> used by hijackers</li><li style="box-sizing: border-box; margin-top: 0.25em;">Can be configured to automatically scan at system boot up</li></ul><div><span style="background-color: white; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";"><b>Advantages</b></span></div><ul dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;">Short logs</li><li style="box-sizing: border-box; margin-top: 0.25em;">Fast scans</li><li style="box-sizing: border-box; margin-top: 0.25em;">No need to manually create fixing scripts</li><li style="box-sizing: border-box; margin-top: 0.25em;">No need for Internet access or recurring database updates</li><li style="box-sizing: border-box; margin-top: 0.25em;">Already familiar to many people</li><li style="box-sizing: border-box; margin-top: 0.25em;">Portable</li></ul><div><span style="color: #24292f; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;"><br /></span></div><div><span style="background-color: white; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";"><b>New in version 3</b></span></div><ul dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;">Detects several new hijacking methods</li><li style="box-sizing: border-box; margin-top: 0.25em;">Fully supports new Windows versions</li><li style="box-sizing: border-box; margin-top: 0.25em;">New and updated supplementary tools</li><li style="box-sizing: border-box; margin-top: 0.25em;">Improved interface, security and backups</li></ul><p dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;">HiJackThis also comes with several useful tools for manually removing malware from a computer:</p><ul dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;">StartupList 2 <span style="box-sizing: border-box; font-weight: 600;">(*new*)</span></li><li style="box-sizing: border-box; margin-top: 0.25em;">Process Manager</li><li style="box-sizing: border-box; margin-top: 0.25em;">Uninstall manager</li><li style="box-sizing: border-box; margin-top: 0.25em;">Hosts file manager</li><li style="box-sizing: border-box; margin-top: 0.25em;">Alternative Data Spy</li><li style="box-sizing: border-box; margin-top: 0.25em;">Delete file / service staff</li><li style="box-sizing: border-box; margin-top: 0.25em;">Digital Signature Checker <span style="box-sizing: border-box; font-weight: 600;">(*new*)</span></li><li style="box-sizing: border-box; margin-top: 0.25em;">Registry key unlocker <span style="box-sizing: border-box; font-weight: 600;">(*new*)</span></li><li style="box-sizing: border-box; margin-top: 0.25em;">Files unlocker <span style="box-sizing: border-box; font-weight: 600;">(*new*)</span></li><li style="box-sizing: border-box; margin-top: 0.25em;">Check Browsers' LNK & ClearLNK (as downloadable components) <span style="box-sizing: border-box; font-weight: 600;">(*new*)</span></li></ul><div><span style="background-color: white; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";"><b>Log analysis</b></span></div><div><span style="background-color: white; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";"><br /></span></div><p dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;"><span style="box-sizing: border-box; font-weight: 600;">IMPORTANT</span>: HiJackThis Fork does not make value-based calls on what is considered good or bad. You must exercise caution when using this tool. Avoid making changes to your computer settings without thoroughly studying the consequences of each change.</p><p dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;">If you are not already an expert, we recommend submitting your case to an online help forum. Here are some suggestions:</p><ul dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;">English: <a href="https://github.com/dragokas/hijackthis/wiki/How-to-make-a-request-for-help-in-the-PC-cure-section%3F" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Our GitHub</a> ; <a href="http://www.geekstogo.com/forum/topic/2852-malware-and-spyware-cleaning-guide/" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">GeeksToGo</a> ; <a href="https://www.bleepingcomputer.com/forums/t/34773/preparation-guide-for-use-before-using-malware-removal-tools-and-requesting-help/" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">BleepingComputer</a></li><li style="box-sizing: border-box; margin-top: 0.25em;">Russian: <a href="https://safezone.cc/pravila/" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">SafeZone</a> ; <a href="https://www.cyberforum.ru/viruses/thread49792.html" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">CyberForum</a> ; <a href="http://forum.oszone.net/thread-98169.html" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">OSZone</a> ; <a href="https://softboard.ru/topic/51343-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0-%D0%BF%D0%BE%D0%B4%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B0/" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">SoftBoard</a> ; <a href="http://www.thg.ru/forum/showthread.php?t=92236" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">THG</a> ; <a href="https://virusinfo.info/showthread.php?t=1235" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">VirusInfo</a> ; <a href="https://forum.kasperskyclub.ru/index.php?showtopic=43640" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">KasperskyClub</a> ; <a href="https://forum.drweb.com/index.php?showtopic=313238" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Dr.Web</a></li></ul><blockquote style="background-color: white; border-left: 0.25em solid var(--color-border-default); box-sizing: border-box; color: var(--color-fg-muted); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin: 0px 0px 16px; padding: 0px 1em;"><p dir="auto" style="box-sizing: border-box; margin-bottom: 0px; margin-top: 0px;">Note: currently, only Russian-speaking anti-malware supporting team (e.g., <a href="https://github.com/VIRUSNET-Association" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">VIRUSNET association</a>) can provide direct analysis of HiJackThis logs in <a href="https://github.com/dragokas/hijackthis/wiki/How-to-make-a-request-for-help-in-the-PC-cure-section%3F" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">our github 'Issues' section</a>. Please feel free to ask help there (English only).</p></blockquote><p><span style="background-color: white; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";"><b>Technical support</b></span></p><ul dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;"><a href="https://dragokas.com/tools/help/hjt_tutorial.html" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Actual short User's manual</a> (in English)</li><li style="box-sizing: border-box; margin-top: 0.25em;"><a href="https://regist.safezone.cc/hijackthis_help/hijackthis.html" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Actual complete User's manual</a> (in Russian)</li><li style="box-sizing: border-box; margin-top: 0.25em;"><a href="https://safezone.cc/threads/27470/" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Recent updates by the author</a> (in Russian)</li><li style="box-sizing: border-box; margin-top: 0.25em;"><a href="https://github.com/dragokas/hijackthis/wiki" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Additional instructions on Wiki-pages</a></li><li style="box-sizing: border-box; margin-top: 0.25em;">Discussion and news are in <a href="https://safezone.cc/threads/hijackthis-fork-i-voprosy-k-razrabotchikam.28770/" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">this topic</a> (in Russian) or on <a href="https://www.geekstogo.com/forum/topic/361755-hijackthisfork-improvement-development-bug-reports/" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">GeeksToGo</a> (in English; access restricted to experts only) or on our <a href="https://github.com/dragokas/hijackthis/discussions/137" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">GitHub page</a> (for everybody).</li><li style="box-sizing: border-box; margin-top: 0.25em;">You can also freely ask questions, report bugs, or propose improvements by <a href="https://github.com/dragokas/hijackthis/issues" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">creating an issue on GitHub</a></li></ul><div><span style="background-color: white; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";"><b>System Requirements</b></span></div><p dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;">Operating System</p><ul dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;">Microsoft™ Windows™ 11 / 10 / 8.1 / 8 / 7 / Vista / XP / 2000 (32/64-bit desktop and server)</li></ul><div><span style="background-color: white; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";"><b>Copyrights</b></span></div><ul dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;"><span style="box-sizing: border-box; font-weight: 600;">Polshyn Stanislav</span> { <a href="https://github.com/dragokas" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">@dragokas</a> } - author of fork (major v3 and all post-v2.0.6 updates), refactoring, additions, tools integration</li><li style="box-sizing: border-box; margin-top: 0.25em;"><span style="box-sizing: border-box; font-weight: 600;">Merijn Bellekom</span> { <a href="https://github.com/mrbellek" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">@mrbellek</a> } - original author, author of the new <a href="https://github.com/mrbellek/StartupList2" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">StartupList v2</a> and <a href="https://github.com/mrbellek/ADSspy" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">ADS Spy</a></li><li style="box-sizing: border-box; margin-top: 0.25em;"><span style="box-sizing: border-box; font-weight: 600;">Trend Micro</span> { <a href="https://github.com/trendmicro" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">@trendmicro</a> } - owner of the <a href="https://sourceforge.net/projects/hjt/" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">original version</a> (2.0.5)</li></ul><div><span style="background-color: white; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 1.25em;"><b>Thanks to:</b></span></div><ul dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;"><span style="box-sizing: border-box; font-weight: 600;">regist</span> (VIRUSNET) { <a href="https://forum.kasperskyclub.ru/index.php?showuser=44533" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">@regist</a> } - for the valuable tips and ideas, user's manual, database updates, closed and beta-testing</li><li style="box-sizing: border-box; margin-top: 0.25em;"><span style="box-sizing: border-box; font-weight: 600;">Sandor</span> (VIRUSNET) { <a href="https://github.com/Sandor-Helper" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">@Sandor-Helper</a> } - for the beta-testing, lot of reports, PC treatment on GitHub and forums of association</li><li style="box-sizing: border-box; margin-top: 0.25em;"><span style="box-sizing: border-box; font-weight: 600;">akok</span> (VIRUSNET) { <a href="https://github.com/akokSZ" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">@akokSZ</a> } - for product promotion, providing a platform for tests and discussion, help with resolving conflicts with antiviruses</li><li style="box-sizing: border-box; margin-top: 0.25em;"><span style="box-sizing: border-box; font-weight: 600;">SafeZone.cc team</span> (general <a href="https://github.com/VIRUSNET-Association/VIRUSNET" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">VIRUSNET</a> community) - for promotion and support, feedback and bug reports, PC treatment on forums of association</li><li style="box-sizing: border-box; margin-top: 0.25em;"><span style="box-sizing: border-box; font-weight: 600;">Fernando Mercês</span> { <a href="https://github.com/merces" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">@merces</a> } (Trend Micro) - coordinator of original HJT, for the tips, suggestions and promotion</li><li style="box-sizing: border-box; margin-top: 0.25em;"><span style="box-sizing: border-box; font-weight: 600;">Loucif Kharouni</span> { <a href="https://github.com/loucifkharouni" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">@loucifkharouni</a> } (Trend Micro) - coordinator of original HJT, for the tips & suggestions</li></ul><p dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;">HiJackThis Fork by Alex Dragokas (my pseudonym) is a continuation of Trend Micro HiJackThis development, based on <a href="https://sourceforge.net/p/hjt/code/HEAD/tree/beta/2.0.6/" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">v.2.0.6</a> and 100% rewritten at the moment. It was initially supported by Trend Micro, but they have since refused support and closed its GitHub repository. HiJackThis Fork is distributed under the <a href="https://github.com/dragokas/hijackthis/blob/devel/LICENSE.md" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">GPLv2 license</a>. It also includes several tools and plugins available as freeware.</p></div></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj-viJ58pp5SNrcjnmXRHBO4N9eTNUDyWJ7tkKrZ9LuDm2v7d5fi4LQ2Q9yE6sD8bw1u7fSQv8h3ytc7irILdiisOt_o6TYfp8IjPywZPcgEeoLx67NL2nJyPK4d4sllsxSWPU8SrjTMKyUFP0I040qHM1OD9LkrLGRGChlHQlY-TRGEIUWYpx0rfvl=s586" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="550" data-original-width="586" height="600" src="https://blogger.googleusercontent.com/img/a/AVvXsEj-viJ58pp5SNrcjnmXRHBO4N9eTNUDyWJ7tkKrZ9LuDm2v7d5fi4LQ2Q9yE6sD8bw1u7fSQv8h3ytc7irILdiisOt_o6TYfp8IjPywZPcgEeoLx67NL2nJyPK4d4sllsxSWPU8SrjTMKyUFP0I040qHM1OD9LkrLGRGChlHQlY-TRGEIUWYpx0rfvl=w640-h600" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjSqhZJZpFzFIpZeGOWIBx2sjQwr8WSqyPSEZ2LnRtDH7PTrDXqzcNSenWXcpAH_6JyEn5bJmyxxNb7Qjg5TcJEqpmC9MQOna7R8W_E_PyT30aU0AEjdCmgYi0jLAydamjD30odKD-ZUtTcFHvMDsin_n8xpfQLG6nzpfkGTZsziJkaquuY_4agJ-pc=s586" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="550" data-original-width="586" height="600" src="https://blogger.googleusercontent.com/img/a/AVvXsEjSqhZJZpFzFIpZeGOWIBx2sjQwr8WSqyPSEZ2LnRtDH7PTrDXqzcNSenWXcpAH_6JyEn5bJmyxxNb7Qjg5TcJEqpmC9MQOna7R8W_E_PyT30aU0AEjdCmgYi0jLAydamjD30odKD-ZUtTcFHvMDsin_n8xpfQLG6nzpfkGTZsziJkaquuY_4agJ-pc=w640-h600" width="640" /></a></div><br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-30670211374824638182022-05-02T18:13:00.043-07:002022-05-02T18:13:00.207-07:00MSVBVM60.dll library - open source version in C++<p>When I have seen the title on GitHub I started to cough in disbelief. From where?, how?, since when do we have the open source of the main engine of VB6? This post is a big ! A moment of silence please in sign of respect. This is posted by <a href="http://cocus.rf.gd/?i=1" target="_blank">Santiago Hormazabal</a>, a genius in our community! I advise you to visit his <a href="https://github.com/cocus" target="_blank">repositories on GitHub</a>.</p><p><a href="https://drive.google.com/file/d/11nCQh_XEGn9hDCrR62XTc9vEpSYdnlJv/view?usp=sharing" target="_blank">Download from me</a></p><p><a href="https://github.com/cocus/openmsvbvm" target="_blank">Download from GitHub</a></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhzfbO0EqT37Y_PhyyTgQsnaOWcwmGy8soA0chbTULy2krrIijzIyte5wYa4jBGZpR7BtWZF8ZOOzRYfS5DhvMSErJGo6m7XK2TZyIeJRCJlRfcJOrw9_81u6-eqp-kb4UbsDgCaYFdsDkFyN0LPD_UJ-ov3q_KSB8ruZXq1RZ5DPS2oe00-ovqYyLr=s720" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="720" height="427" src="https://blogger.googleusercontent.com/img/a/AVvXsEhzfbO0EqT37Y_PhyyTgQsnaOWcwmGy8soA0chbTULy2krrIijzIyte5wYa4jBGZpR7BtWZF8ZOOzRYfS5DhvMSErJGo6m7XK2TZyIeJRCJlRfcJOrw9_81u6-eqp-kb4UbsDgCaYFdsDkFyN0LPD_UJ-ov3q_KSB8ruZXq1RZ5DPS2oe00-ovqYyLr=w640-h427" width="640" /></a></div><br /><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-45204657136744500312022-04-04T17:35:00.001-07:002022-04-04T17:35:00.210-07:00PhotoDemon - the number one photo editor (VB6)<p>This open source project is one of the most advanced photo editors in the world. Obviously it is made in Visual Basic 6.0! When I see a project like this I have to keep a moment of silence in sign of respect. The source code represents with no exaggeration, perfection.</p><p><a href="https://drive.google.com/file/d/1jKfAjPOEd8WCAQ-DjRKYRySL1HBJDZ1q/view?usp=sharing" target="_blank">Download from Me</a></p><p><a href="https://github.com/tannerhelland/PhotoDemon" target="_blank">Download from GitHub</a></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjSpiT_QhWpVQ5n194LA4v0Q0BQsmVul7-2PtFoCeI4WXSelkoL7Uq9UBG6NnJVb8dyfsfi3RQMjnSj8FeleRBbL3fpwwib-e42F6BNVfcOBfB9dsezCI4YaVuWN4KC7Kz8OIQMKFVuyDjLcsx-NggEupmHxQjTZVIhMxyhLnD190h2wA9DVSgaP8Dx=s2162" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1253" data-original-width="2162" height="370" src="https://blogger.googleusercontent.com/img/a/AVvXsEjSpiT_QhWpVQ5n194LA4v0Q0BQsmVul7-2PtFoCeI4WXSelkoL7Uq9UBG6NnJVb8dyfsfi3RQMjnSj8FeleRBbL3fpwwib-e42F6BNVfcOBfB9dsezCI4YaVuWN4KC7Kz8OIQMKFVuyDjLcsx-NggEupmHxQjTZVIhMxyhLnD190h2wA9DVSgaP8Dx=w640-h370" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Photo Demon</td></tr></tbody></table><br /><p><span style="background-color: white; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 1.25em;"><b>Lightweight and completely portable</b></span></p><p dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;">No installer is provided or required. Aside from a temporary folder – which you can specify in the <code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Tools > Options</code> menu – PhotoDemon leaves no trace on your hard drive. Many users run PhotoDemon from a USB stick or microSD card.</p><p dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;"><span style="font-size: 1.25em;"><b>Integrated macro recording and batch processing</b></span></p><p dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;">Complex editing actions can be recorded as macros (similar to Office software). A built-in batch processor lets you apply macros to entire folders of images.</p><p dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;"><span style="font-size: 1.25em;"><b>Usability is paramount</b></span></p><p dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;">Many open-source photo editors are usability nightmares. PhotoDemon tries not to be. Small touches like real-time effect previews, save/load presets on all tools, unlimited Undo/Redo, "Fade last action", keyboard accelerators, mouse wheel and X-button support, and descriptive icons make it fast and easy to use.</p><p dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;"><span style="font-size: 1.25em;"><b>Pro-grade features and tools</b></span></p><ul dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;">Extensive file format support, including Adobe Photoshop (PSD), Corel PaintShop Pro (PSP), and all major camera RAW formats</li><li style="box-sizing: border-box; margin-top: 0.25em;">Color-managed workflow, including full support for embedded ICC profiles</li><li style="box-sizing: border-box; margin-top: 0.25em;">Advanced multi-layer support, including editable text layers and non-destructive layer modifications</li><li style="box-sizing: border-box; margin-top: 0.25em;">On-canvas tools: digital paintbrushes, clone and pattern brushes, interactive gradients, and more</li><li style="box-sizing: border-box; margin-top: 0.25em;">Adjustment tools: levels, curves, HDR, shadow/highlight recovery, white balance, and many more</li><li style="box-sizing: border-box; margin-top: 0.25em;">Filters and effects: perspective correction, edge detection, noise removal, content-aware blur, unsharp masking, green screen, lens diffraction, vignetting, and many more</li><li style="box-sizing: border-box; margin-top: 0.25em;">More than 200 tools are provided in the current build.</li></ul><div><span style="color: #24292f; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;"><br /></span></div><div><span style="color: #24292f; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;"><b>Limitation</b></span></div><div><span style="color: #24292f; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;"><br /></span></div><ul dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;">PhotoDemon isn't designed for operating systems other than Microsoft Windows. A compatibility layer like <a href="http://www.winehq.org/" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Wine</a> may allow it to work on macOS, Linux, or BSD systems, but these configurations are not officially supported.</li><li style="box-sizing: border-box; margin-top: 0.25em;">Due to its portable nature, PhotoDemon is only available as a 32-bit application. (This means it cannot load or save images larger than ~2 GB in size.)</li></ul><div><h3 dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;">File formats</h3><h3 dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;"><ul dir="auto" style="box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;">Comprehensive import and export support for <a href="https://en.wikipedia.org/wiki/PaintShop_Pro" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Corel Paintshop Pro (psp, pspimage) images</a>, including many text and vector layer features.</li><li style="box-sizing: border-box; margin-top: 0.25em;">Comprehensive import and export support for the brand-new <a href="https://en.wikipedia.org/wiki/AV1#AV1_Image_File_Format_(AVIF)" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">AVIF file format</a>, c/o the <a href="https://github.com/AOMediaCodec/libavif" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">open-source libavif library</a>. AVIF file support is incredibly complex (the stock encoder+decoder apps are almost 3x larger than PhotoDemon!) and they are only available for 64-bit systems, so PhotoDemon does not ship these libraries by default. If you attempt to open or save an AVIF file, PhotoDemon will offer to download a local copy of libavif for you.</li><li style="box-sizing: border-box; margin-top: 0.25em;">Comprehensive import and export support for <a href="https://developers.google.com/speed/webp" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">animated WebP images</a>, including direct export to animated WebP from PhotoDemon's built-in screen recorder tool (<code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Tools > Animated screen capture</code>)</li><li style="box-sizing: border-box; margin-top: 0.25em;">Comprehensive import and export support for <a href="https://qoiformat.org/" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">lossless QOI ("quite OK image") files</a>.</li><li style="box-sizing: border-box; margin-top: 0.25em;">Comprehensive import support for <a href="https://en.wikipedia.org/wiki/Scalable_Vector_Graphics" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">SVG and SVGZ images</a>, c/o the <a href="https://github.com/RazrFalcon/resvg" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">open-source resvg library</a></li><li style="box-sizing: border-box; margin-top: 0.25em;">Comprehensive import support for <a href="https://en.wikipedia.org/wiki/Lossless_JPEG" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">lossless JPEG (JPEG-LS) images</a>, c/o the <a href="https://github.com/team-charls/charls" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">open-source CharLS library</a></li><li style="box-sizing: border-box; margin-top: 0.25em;">Comprehensive import support for <a href="https://en.wikipedia.org/wiki/Comic_book_archive" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Comic Book Archive (CBZ) images</a>.</li><li style="box-sizing: border-box; margin-top: 0.25em;">Comprehensive import support for <a href="https://en.wikipedia.org/wiki/MBM_(file_format)" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Symbian (mbm, aif) images</a></li><li style="box-sizing: border-box; margin-top: 0.25em;">All-new <a href="https://github.com/tannerhelland/PhotoDemon/commit/cfee72e569721a71efe4a5bc8b8858a5f8501517" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">GIF import and export engines</a>, including a new <a href="https://github.com/tannerhelland/PhotoDemon/commit/aaab70c06a0697b56d0336e22477782b9af59093" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">best-in-class GIF optimizer</a>.</li><li style="box-sizing: border-box; margin-top: 0.25em;">New <a href="https://github.com/tannerhelland/PhotoDemon/commit/fc27cfc6a5ce7ab42a7d929e80e220281c818bb6" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">neural-network color quantizer</a> for maximum-quality results when saving to 256-color image formats, like GIF or web-optimized PNGs. (The new quantizer is also directly accessible from the <code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Effects > Stylize > Palettize</code> tool.)</li></ul><div><br /></div><div><span style="font-size: 16px;">Effects</span></div><div><span style="font-size: 16px; font-weight: 400;"><br /></span></div><ul dir="auto" style="box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box; margin-top: 0.25em;">New support for <a href="https://en.wikipedia.org/wiki/Photoshop_plugin" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Photoshop effect plugins</a> ("8bf", 32-bit only), with thanks to <a href="https://github.com/spetric/Photoshop-Plugin-Host" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">spetric's Photoshop-Plugin-Host library</a>.</li></ul></h3><h3 dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;"><ul dir="auto" style="box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box; margin-top: 0.25em;">New <a href="https://github.com/tannerhelland/PhotoDemon/pull/364" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;"><code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Effects > Distort > Droste</code></a> tool, so you can channel your inner <a href="https://en.wikipedia.org/wiki/Print_Gallery_(M._C._Escher)" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">M.C. Escher</a></li><li style="box-sizing: border-box; margin-top: 0.25em;">New <a href="https://github.com/tannerhelland/PhotoDemon/pull/358" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;"><code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Effects > Render > Truchet Tiles</code> tool</a></li><li style="box-sizing: border-box; margin-top: 0.25em;">New <code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Effects > Animation menu</code>, including new <a href="https://github.com/tannerhelland/PhotoDemon/commit/06a4f1df3a5231eb0cac17dd7f426a049e44f7e7" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Foreground and Background effects</a> (for automatically applying a background or foreground to an animated image)</li><li style="box-sizing: border-box; margin-top: 0.25em;">New <a href="https://github.com/tannerhelland/PhotoDemon/commit/f7e28487c087f1483dac435290ab3c30f7c18ac0" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;"><code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Effects > Edge > Gradient flow</code></a> tool</li><li style="box-sizing: border-box; margin-top: 0.25em;">Greatly improved and accelerated <a href="https://github.com/tannerhelland/PhotoDemon/commit/02f60a5c6807cec763fcfb7628332b9b6de897f2" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;"><code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Effects > Artistic > Stained Glass</code></a> and <a href="https://github.com/tannerhelland/PhotoDemon/commit/ac2772d145a30b5e1a4bccd334c642062f63708c" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;"><code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Effects > Pixelate > Crystallize</code></a> tools</li></ul><div><span style="font-size: 16px; font-weight: 400;"><br /></span></div><div><span style="font-size: 1.25em;">Adjustments</span></div></h3><h3 dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;"><ul dir="auto" style="box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;">New <a href="https://github.com/tannerhelland/PhotoDemon/commit/5739253c850fbeb86af85f2ba4020da0ce1262d7" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;"><code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Adjustments > Color > Color lookup</code></a> tool, with built-in support for <a href="https://helpx.adobe.com/photoshop/how-to/edit-photo-color-lookup-adjustment.html" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">all 3D LUT formats that ship with Photoshop</a> (cube, look, 3dl) and <a href="https://www.nvidia.com/content/GTC/posters/2010/V01-Real-Time-Color-Space-Conversion-for-High-Resolution-Video.pdf" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">high-performance tetrahedral interpolation</a> for best-in-class quality</li><li style="box-sizing: border-box; margin-top: 0.25em;">New <a href="https://github.com/tannerhelland/PhotoDemon/commit/dde19d0c6e45b41f9c0d88d6d7c62a4651595836" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;"><code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Adjustments > Lighting > Dehaze</code> tool</a></li><li style="box-sizing: border-box; margin-top: 0.25em;">Overhauled <a href="https://github.com/tannerhelland/PhotoDemon/commit/989f861d8cf4b32e5a49c10cc87c094cc7f38b33" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;"><code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Adjustments > Curves</code> tool</a>, with improved performance and a new UI</li><li style="box-sizing: border-box; margin-top: 0.25em;">Completely redesigned <a href="https://github.com/tannerhelland/PhotoDemon/commit/f142633977c1eed9f627f6ab6ab84053960914a1" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;"><code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Adjustments > Color > Photo filter</code></a> tool, to better match the identical tool in Photoshop</li><li style="box-sizing: border-box; margin-top: 0.25em;"><a href="https://en.wikipedia.org/wiki/Otsu%27s_method" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Otsu's method</a> is now used by <a href="https://github.com/tannerhelland/PhotoDemon/commit/4286395b520ec84b4c047eb37092a91532e7d500" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">the <code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Adjustments > Monochrome</code> tool</a>, for improved contrast when reducing an image to two colors.</li></ul><div><span style="font-size: 1.25em;">Image and Layer tools</span></div></h3><h3 dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;"><ul dir="auto" style="box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;"><a href="https://github.com/tannerhelland/PhotoDemon/pull/387" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">All-new selection tool engine</a>, including full support for merging selections. All selection tools support new "Add", "Subtract", and "Intersect" combine modes. In addition, a new canvas selection renderer automatically highlights the selected region of composite selections. (Other new rendering UI features are available on each selection toolpanel).</li><li style="box-sizing: border-box; margin-top: 0.25em;">Completely redesigned <a href="https://github.com/tannerhelland/PhotoDemon/pull/361" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;"><code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Image > Resize</code> tool</a>, with real-time interactive previews, 12 different resampling filters, memory size estimations, a user-resizable dialog, progress bar updates, and more. The new tool was custom-built for PhotoDemon, and it has very low memory requirements, excellent performance, and zero 3rd-party dependencies. (The <code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Layer > Resize</code> tool also receives all of these new features!)</li><li style="box-sizing: border-box; margin-top: 0.25em;">New <a href="https://github.com/tannerhelland/PhotoDemon/commit/24f50821c1fd665494d72fd4e4e75fc29e8c3a0e" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;"><code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Layer > Replace</code> tools</a>, for quickly replacing an existing layer with data from the clipboard or any arbitrary image file.</li><li style="box-sizing: border-box; margin-top: 0.25em;">Overhauled <a href="https://github.com/tannerhelland/PhotoDemon/commit/6bfe841f282ae9ec9d75b4cd29065eee11c7e9f2" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;"><code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Image > Crop</code> tool</a>, including new support for retaining editable text layers after cropping (instead of rasterizing them).</li><li style="box-sizing: border-box; margin-top: 0.25em;">New <a href="https://github.com/tannerhelland/PhotoDemon/commit/3b74576eb425c5ff80a4b05615f94a86faabf261" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">lock aspect ratio</a> toggle on the Move/Size tool</li></ul><div><span style="font-size: 1.25em;">Batch processor</span></div></h3><h3 dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;"><ul dir="auto" style="box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;">New support for <a href="https://github.com/tannerhelland/PhotoDemon/commit/4c6e7040440e5f2424485670d04d618a7fe211bd" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">preserving folder structure</a> when batch processing images from a complex folder tree</li><li style="box-sizing: border-box; margin-top: 0.25em;">New support for batch processing <a href="https://github.com/tannerhelland/PhotoDemon/commit/647927e3130eaeaac4d58376c5b0f20463fbf57b" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">animated image formats (GIF, PNG, WebP)</a></li></ul><div><span style="font-size: 1.25em;">User interface</span></div></h3><h3 dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;"><ul dir="auto" style="box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;"><li style="box-sizing: border-box;">A <a href="https://github.com/tannerhelland/PhotoDemon/commit/471070d3b01b44261ba2289dc32095a9346990a0" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">new toolpanel design</a> takes up less space than ever before, while still providing one-click access to all of PhotoDemon's advanced on-canvas tool features. (This also enables PhotoDemon to successfully work all the way down to 1024x768 screen resolutions - a rare case of supporting even <em style="box-sizing: border-box;">older</em> hardware than previous versions of the app!)</li><li style="box-sizing: border-box; margin-top: 0.25em;">Adjustment and Effect dialogs are no longer fixed-size - <a href="https://github.com/tannerhelland/PhotoDemon/commit/ab5363a885aec5529a81c28255defe77a516b285" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">you can resize every last one of them at run-time</a>!</li><li style="box-sizing: border-box; margin-top: 0.25em;">Adjustment and Effect tools now have <a href="https://github.com/tannerhelland/PhotoDemon/commit/9d7adda0ab158f00d2f0ac393bc19ef800b31b30" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">built-in Undo/Redo on each dialog</a></li><li style="box-sizing: border-box; margin-top: 0.25em;"><a href="https://github.com/tannerhelland/PhotoDemon/commit/a56af482d262f6dab1ff016f111a0e909d9bfb98" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Faster app startup time</a>, particularly on Windows 10</li><li style="box-sizing: border-box; margin-top: 0.25em;">PhotoDemon can now <a href="https://github.com/tannerhelland/PhotoDemon/commit/735ba00b2f8da59356fab95c8486cda54b915939" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">automatically restore your previous session</a> if a system reboot interrupts your work.</li><li style="box-sizing: border-box; margin-top: 0.25em;"><a href="https://github.com/tannerhelland/PhotoDemon/commit/84f84be77b7a1f52cb1151eeef8e5df1bbec5fad" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Improved clipboard support</a> when copy/pasting to/from Google Chrome</li><li style="box-sizing: border-box; margin-top: 0.25em;">New <a href="https://github.com/tannerhelland/PhotoDemon/commit/dbac890b93ec10b36fd2e63aecf96d5e92904c6f" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">background image compressor</a> greatly reduces memory usage when working with multiple images at once</li><li style="box-sizing: border-box; margin-top: 0.25em;">Similarly, a new <a href="https://github.com/tannerhelland/PhotoDemon/commit/f00f0a81bf9f8fbff0a2c125b774884111de82e3" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">run-time resource minimizer</a> specifically designed for UI elements makes PhotoDemon - already among the lightest photo editors - even lighter on system resources.</li><li style="box-sizing: border-box; margin-top: 0.25em;">PhotoDemon's <code style="background-color: var(--color-neutral-muted); border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Window</code> menu now displays a <a href="https://github.com/tannerhelland/PhotoDemon/commit/009721ddc60246c803ee32ffe4c4376937a09bb4" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">list of open images</a> for immediate access to any open image (even if you've disabled the image tabstrip).</li><li style="box-sizing: border-box; margin-top: 0.25em;"><a href="https://github.com/tannerhelland/PhotoDemon/commit/a421afaaddfee746e1769768503f300cf4849616" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Expanded "convenience" buttons in the Layer Toolbox</a>, including new Shift+Click behavior (see button tooltips)</li><li style="box-sizing: border-box; margin-top: 0.25em;"><a href="https://github.com/tannerhelland/PhotoDemon/commit/08b2ad83e2e1fc89e2aa69f219a1da9d036098ce" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Additional hotkeys have been implemented</a> to better match other photo editing software</li><li style="box-sizing: border-box; margin-top: 0.25em;"><a href="https://github.com/tannerhelland/PhotoDemon/commit/e2c17eaeda95abb2e27fd9bc036a6cf5047a184b" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">Recent image and macro files</a> will now appear in search results from PhotoDemon's built-in search tool (Ctrl+F)</li></ul><div><span style="font-size: 1.25em;">Other</span></div></h3><h3 dir="auto" style="background-color: white; box-sizing: border-box; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px;"><p dir="auto" style="box-sizing: border-box; font-size: 16px; font-weight: 400; margin-bottom: 16px; margin-top: 0px;">For a full list of changes, <a href="https://github.com/tannerhelland/PhotoDemon/commits/master" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">check the project's commit log</a>.</p></h3></div>Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-3013488609572889155.post-55722451548490372302022-03-10T06:54:00.001-08:002022-03-10T06:54:00.186-08:00Quake shooter - a 3D game with sources in VB6<p>Mikle again ! I have posted projects from Mikle in the past. If you don't know who Mikle is, well, he is the best 3D developer I have seen. I think his name is "Михаил Ильин", which translated is Mihail Ilyin.<a href="https://www.vbforums.com/showthread.php?893176-VB6-My-new-Quake-style-shooter-sources" target="_blank"> </a><span style="background-color: white;"><a href="https://www.vbforums.com/showthread.php?893176-VB6-My-new-Quake-style-shooter-sources" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" target="_blank"><span style="color: #c81010;">This Visual Basic 6.0 open source project</span> </a><span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 13.2px;">is one of the most advanced shooters I have seen !</span></span></span></p><p><a href="https://disk.yandex.ru/d/ETg2tzRBQHh-uA" target="_blank">Download VB6 source code from Mikle</a></p><p><a href="https://drive.google.com/file/d/1lw8a-wQ1Z85zm1wswubyhYObKKOLjiLS/view?usp=sharing" target="_blank">Download VB6 source code from me</a></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEglWpZzlwfuzCnyKUMyRLXe-Ov4Z6B3yUMRGodgj6g-1IJf4g005Sl4F4AJl5xsXqJN12AFFC2psCxbpx9ok2KUfo1hlsCAouAonG26cMK5Tr-7m-IOVjZmdJpOGKSQxXUPnGDrFDIoEv4LMJ9Vu8vDHDcYClvxe3EmB933dKbsnOpiZH_-iWzEmLZK=s1976" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1020" data-original-width="1976" height="330" src="https://blogger.googleusercontent.com/img/a/AVvXsEglWpZzlwfuzCnyKUMyRLXe-Ov4Z6B3yUMRGodgj6g-1IJf4g005Sl4F4AJl5xsXqJN12AFFC2psCxbpx9ok2KUfo1hlsCAouAonG26cMK5Tr-7m-IOVjZmdJpOGKSQxXUPnGDrFDIoEv4LMJ9Vu8vDHDcYClvxe3EmB933dKbsnOpiZH_-iWzEmLZK=w640-h330" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhLcyGomuA1IkpAn9NEoyEbpbTMQ9WaUhgLfjSLt4KuwnNKLyTXIiXrldvgzrKwiCrENYql4NLvNeQqO6kJCF0qPjqXD9GIZoXAeqzh979otaCTktgZYWu0Je-srDZ3UpEpnIoALRceOTiWUEf_AAZ-LEen0QNoN3U_V0gKw9qLP65Wxh7Qppc815R7=s1965" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="987" data-original-width="1965" height="322" src="https://blogger.googleusercontent.com/img/a/AVvXsEhLcyGomuA1IkpAn9NEoyEbpbTMQ9WaUhgLfjSLt4KuwnNKLyTXIiXrldvgzrKwiCrENYql4NLvNeQqO6kJCF0qPjqXD9GIZoXAeqzh979otaCTktgZYWu0Je-srDZ3UpEpnIoALRceOTiWUEf_AAZ-LEen0QNoN3U_V0gKw9qLP65Wxh7Qppc815R7=w640-h322" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhnbOUbOlVYZJTtR5KMadK2yMRkM4aF0lG2YegS9rJRb8BxP9LYwb1drVo4NJQCAM6kz7ITQJayDBOegtkTJ4g479QY-7KFBULbdGPdELSJLQU-eJitR2xkiwtos0RTa8PnLP_jrvs5HosEkfCnKTZ7V1_f4Or7qVox8KkKm7C5-HX8c2Sb4UZCfOnj=s1946" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1014" data-original-width="1946" height="334" src="https://blogger.googleusercontent.com/img/a/AVvXsEhnbOUbOlVYZJTtR5KMadK2yMRkM4aF0lG2YegS9rJRb8BxP9LYwb1drVo4NJQCAM6kz7ITQJayDBOegtkTJ4g479QY-7KFBULbdGPdELSJLQU-eJitR2xkiwtos0RTa8PnLP_jrvs5HosEkfCnKTZ7V1_f4Or7qVox8KkKm7C5-HX8c2Sb4UZCfOnj=w640-h334" width="640" /></a></div><br /><p><br /></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="381" src="https://www.youtube.com/embed/QPkqbLofXOc" width="641" youtube-src-id="QPkqbLofXOc"></iframe></div><p><br /></p><p>References:</p><p><a href="https://www.vbforums.com/showthread.php?893176-VB6-My-new-Quake-style-shooter-sources">https://www.vbforums.com/showthread.php?893176-VB6-My-new-Quake-style-shooter-sources</a></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-16110742825501969602022-02-25T06:50:00.002-08:002022-02-25T07:10:13.690-08:00Access of Speed 6 - a 3D game with sources in VB6<p>Mikle again ! I have posted projects from Mikle in the past. If you don't know who Mikle is, well, he is the best 3D developer I have seen.I think his name is "Михаил Ильин", which translated is Mihail Ilyin. <span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; font-size: 13.2px;"><a href="https://www.vbforums.com/showthread.php?889979-Access-of-Speed-6-My-new-game" target="_blank">This Visual Basic 6.0 open source project</a> is one of the most advanced NFS-like games I have seen.</span></p><p><br /></p><p>Download VB6 source code from Mikle: <a href="Access of Speed 6" target="_blank">AoS6Src</a></p><p>Download VB6 source code from me: <a href="https://drive.google.com/file/d/1vMd4QV7YcZ3SMa2OUi50u6UpAToLsk3N/view?usp=sharing" target="_blank">AoS6Src</a></p><p><br /></p><p>Screenshots:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEirSHk0pbrAAxetIRMFRk520btDF70RcrN6oUTUC5U8UJhkAqEekbKG4scZxnWaQfw_DW1KtlPID1eNFlPq6vj0cyExJO9TCKfJMmXDl9Kx_fRm2zRKFRleUs6h5GTH8rq0gdBoYWzdA5E6FeZ-aDOrkYDzMtWHVggk-cItqs0-OioJ7qOIFeJaL0AM=s1280" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="360" src="https://blogger.googleusercontent.com/img/a/AVvXsEirSHk0pbrAAxetIRMFRk520btDF70RcrN6oUTUC5U8UJhkAqEekbKG4scZxnWaQfw_DW1KtlPID1eNFlPq6vj0cyExJO9TCKfJMmXDl9Kx_fRm2zRKFRleUs6h5GTH8rq0gdBoYWzdA5E6FeZ-aDOrkYDzMtWHVggk-cItqs0-OioJ7qOIFeJaL0AM=w640-h360" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh-aUmiC51cNzh0pLEH08ZKu8gJUtFy7GsDO2tAMpr_6IkcXCnlz_TnZbllYV0lh5ukO0sGFibEKx93t10V4SH5EGL97DVXOBMLBKzhT4veRBdviFlFU12CrnUU3k2O2lG30NCzQxImem8x4KjaIwZuqE1ib8Hk1qGqK-3glTwcAQpQMg2JmMkk-HhI=s1280" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="360" src="https://blogger.googleusercontent.com/img/a/AVvXsEh-aUmiC51cNzh0pLEH08ZKu8gJUtFy7GsDO2tAMpr_6IkcXCnlz_TnZbllYV0lh5ukO0sGFibEKx93t10V4SH5EGL97DVXOBMLBKzhT4veRBdviFlFU12CrnUU3k2O2lG30NCzQxImem8x4KjaIwZuqE1ib8Hk1qGqK-3glTwcAQpQMg2JmMkk-HhI=w640-h360" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEguGgL187apTxvbQ3MNI5Kr8TY89n44mUYEo-vp50vn18tRB5qdBAEbGv8w3Op3j9oq5LlBRjUYTp9OIg01tB52xr2JR87mRkVTNz55z17egnNwbih5-AtzKsu2x1X4SbppehJZK_bZezQmE8UNSz6GUgYR9P3OhRZiDGkNMgKtSJzvg6Fn7aa_UiYl=s1280" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="360" src="https://blogger.googleusercontent.com/img/a/AVvXsEguGgL187apTxvbQ3MNI5Kr8TY89n44mUYEo-vp50vn18tRB5qdBAEbGv8w3Op3j9oq5LlBRjUYTp9OIg01tB52xr2JR87mRkVTNz55z17egnNwbih5-AtzKsu2x1X4SbppehJZK_bZezQmE8UNSz6GUgYR9P3OhRZiDGkNMgKtSJzvg6Fn7aa_UiYl=w640-h360" width="640" /></a></div><p><br /></p><p>References:</p><p><a href="https://www.vbforums.com/showthread.php?889979-Access-of-Speed-6-My-new-game">https://www.vbforums.com/showthread.php?889979-Access-of-Speed-6-My-new-game</a></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-12317335575173908612021-10-20T01:21:00.000-07:002021-10-20T01:21:00.191-07:00Ant colony simulation (by David Rutten)Simulate the behaviour of an Ant colony. This is an experiment of a system with 'intelligent' agents who affect and are affected by their environment and counterparts.<br />
<br />
<a href="https://drive.google.com/file/d/1ikBC3qZiw4mxYlz45NuBtQaP-Hva8mzi/view?usp=sharing">Download from ME</a><br />
<a href="https://planet-source-code.com/vb/scripts/ShowZip.asp?lngWId=1&lngCodeId=55195&strZipAccessCode=tp%2FA551950172">Download from PSC</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixtyN0csQNwNEaSAS3IM6IWNyuOYqPuyjsI7PqdLYLrKpD7kyH5ACpPsdNlvIXMi4Ul1C34eftXK7B-Cq34hn4l2DjzAjABMO5mdM7yfcXFshzIC5YcX95V6RtKEG78i5vI-J5q5gMAmM/s1600/Capweewtuere.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="1027" data-original-width="1313" height="500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixtyN0csQNwNEaSAS3IM6IWNyuOYqPuyjsI7PqdLYLrKpD7kyH5ACpPsdNlvIXMi4Ul1C34eftXK7B-Cq34hn4l2DjzAjABMO5mdM7yfcXFshzIC5YcX95V6RtKEG78i5vI-J5q5gMAmM/s640/Capweewtuere.JPG" width="640" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNJvp4jRbSdWpoBSInw71RPN_HD_9qWGv0rWlELIpBgV2Dk8XjGO5BL02CXPQt9hyphenhyphenGzh_gCVqYsIB45p3EQFhXscHtC_68Fyr3bwqO2v78VvSMRVx3Z-tnd2jQJ7DC_Y41Y8KMz_r_gJE/s1600/Captuweewewre.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="1027" data-original-width="1313" height="500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNJvp4jRbSdWpoBSInw71RPN_HD_9qWGv0rWlELIpBgV2Dk8XjGO5BL02CXPQt9hyphenhyphenGzh_gCVqYsIB45p3EQFhXscHtC_68Fyr3bwqO2v78VvSMRVx3Z-tnd2jQJ7DC_Y41Y8KMz_r_gJE/s640/Captuweewewre.JPG" width="640" /></a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPzN82xofMFuWjVqyDcDkg0VF6nH7n31yUjvezyJlDz5rUHbSpWPEeyvgC5_4bE8XMCy8BxaFlgkj8ogPR2Z7cEKuCRgnEkJ6lXxkYOCjBNIJUQJs85SQjMos590rHJWGVqjwfAndev5I/s1600/Capeture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1027" data-original-width="1313" height="500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPzN82xofMFuWjVqyDcDkg0VF6nH7n31yUjvezyJlDz5rUHbSpWPEeyvgC5_4bE8XMCy8BxaFlgkj8ogPR2Z7cEKuCRgnEkJ6lXxkYOCjBNIJUQJs85SQjMos590rHJWGVqjwfAndev5I/s640/Capeture.JPG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA85qzhEbAxOQTE0SqA7EbDlv5ASgP5D3YlkVyCIGesDCrle9Q1Jj0u7LPfYCY_QAz0wY8uplhpx1oKfXW3xgM00vENyEMGRB1VQTBViokLpfKGV2ex3ToWquEIjYxk440b_d-lE_XSoE/s1600/Capteeeeeeeeeeeeure.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1027" data-original-width="1313" height="500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA85qzhEbAxOQTE0SqA7EbDlv5ASgP5D3YlkVyCIGesDCrle9Q1Jj0u7LPfYCY_QAz0wY8uplhpx1oKfXW3xgM00vENyEMGRB1VQTBViokLpfKGV2ex3ToWquEIjYxk440b_d-lE_XSoE/s640/Capteeeeeeeeeeeeure.JPG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmRXDxHKXzvkPsiY1km0vh4me0aJ6jknwjtmMFTrMpw0fz9JhhseuptNmiH6Pv97692a3vrs02W1hcwn5cEDXbSi9q5BRrw6rMA68o-IyY2kkQ_iqFH04tkmqigsWFxrwmwwN3hTSKm4I/s1600/Capteeure.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1027" data-original-width="1313" height="500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmRXDxHKXzvkPsiY1km0vh4me0aJ6jknwjtmMFTrMpw0fz9JhhseuptNmiH6Pv97692a3vrs02W1hcwn5cEDXbSi9q5BRrw6rMA68o-IyY2kkQ_iqFH04tkmqigsWFxrwmwwN3hTSKm4I/s640/Capteeure.JPG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqI4GP9Z_ygBFpg12u7HohSVucBCHIZ3AyXZiDDH4cV8L0IvaWzoEMAKHJRI6gP6NKD7XDgoCNG1_Kqpl4eE6GFqwfnpfZWgVDkufRuR_8vGI5vhrI1FyZV2eW6QA11iV8ngLrP70teRQ/s1600/Capteure.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1027" data-original-width="1313" height="500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqI4GP9Z_ygBFpg12u7HohSVucBCHIZ3AyXZiDDH4cV8L0IvaWzoEMAKHJRI6gP6NKD7XDgoCNG1_Kqpl4eE6GFqwfnpfZWgVDkufRuR_8vGI5vhrI1FyZV2eW6QA11iV8ngLrP70teRQ/s640/Capteure.JPG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcK9qkpAy5omOsK1Cs41ejejA32UUHneuOtvcHMMLgwUZwG0gqp_BMNaAMvvpv5-ljGnrHNLKIp5btKbc2Eo_00bSQBs6nP7bVcb9UXtC5gBJmgpRgLL6pnwqiQyXpETorVsfnHnlyvaQ/s1600/Captuccre.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="990" data-original-width="1118" height="566" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcK9qkpAy5omOsK1Cs41ejejA32UUHneuOtvcHMMLgwUZwG0gqp_BMNaAMvvpv5-ljGnrHNLKIp5btKbc2Eo_00bSQBs6nP7bVcb9UXtC5gBJmgpRgLL6pnwqiQyXpETorVsfnHnlyvaQ/s640/Captuccre.JPG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihBlujoXmIqQwIzQv4xyhbeMT-YBZaIdrl-b47i-pmPdbufMZFslmmO9KACJnUaLfBnuQIOh1Z49UpfgiS7ZSC1IlUbRsEe9_OtAzRQfDV27ColhqCQ2ZALzIStjotPti4G_bT82rtIpI/s1600/Captuere.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1027" data-original-width="1313" height="500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihBlujoXmIqQwIzQv4xyhbeMT-YBZaIdrl-b47i-pmPdbufMZFslmmO9KACJnUaLfBnuQIOh1Z49UpfgiS7ZSC1IlUbRsEe9_OtAzRQfDV27ColhqCQ2ZALzIStjotPti4G_bT82rtIpI/s640/Captuere.JPG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNJvp4jRbSdWpoBSInw71RPN_HD_9qWGv0rWlELIpBgV2Dk8XjGO5BL02CXPQt9hyphenhyphenGzh_gCVqYsIB45p3EQFhXscHtC_68Fyr3bwqO2v78VvSMRVx3Z-tnd2jQJ7DC_Y41Y8KMz_r_gJE/s1600/Captuweewewre.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1027" data-original-width="1313" height="500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNJvp4jRbSdWpoBSInw71RPN_HD_9qWGv0rWlELIpBgV2Dk8XjGO5BL02CXPQt9hyphenhyphenGzh_gCVqYsIB45p3EQFhXscHtC_68Fyr3bwqO2v78VvSMRVx3Z-tnd2jQJ7DC_Y41Y8KMz_r_gJE/s640/Captuweewewre.JPG" width="640" /></a></div>
<br />
<b>Sources:</b><br />
<a href="https://planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=55195&lngWId=1">https://planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=55195&lngWId=1</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-26879784793619129162021-09-29T01:07:00.000-07:002021-09-29T01:07:00.181-07:00Voronoi diagrams (by David Rutten)<div style="background-color: white; line-height: 1.4; text-align: justify;">
<span style="color: #111111; font-family: "segoe ui" , "arial" , sans-serif;"><span style="font-size: 14px;">Voronoi diagrams are named after Russian mathematician Georgy Feodosievych Voronoy who defined and studied the general n-dimensional case in 1908.</span></span></div>
<div style="background-color: white; color: #111111; font-family: "Segoe UI", Arial, sans-serif; font-size: 14px; line-height: 1.4; text-align: justify;">
<br /></div>
<div style="background-color: white; color: #111111; font-family: "Segoe UI", Arial, sans-serif; font-size: 14px; line-height: 1.4; text-align: justify;">
Voronoi diagrams are quite useful tools in computational geometry and have a wide range of uses such as, calculating the area per tree in the forest, or figuring out where the poisoned wells were in a city (based on victims' addresses), and so on. In general it is useful for finding "who is closest to whom." A collection of problems where Voronoi diagrams are used is shown below:</div>
<ul style="background-color: white; border: 0px; color: #111111; font-family: "Segoe UI", Arial, sans-serif; font-size: 14px; margin: 10px 0px; padding: 0px 0px 0px 40px;">
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Collision detection</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Pattern recognition</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Geographical optimization</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Geometric clustering</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Closest pairs algorithms</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">k-nearest-neighbor queries</li>
</ul>
<br />
<a href="https://drive.google.com/file/d/1f-NuTR7oCWC2Q90rDDBSBJ-J1whXA120/view?usp=sharing">Download from ME</a><br />
<a href="https://planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=57062&lngWId=1">Download from PSC</a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHRx8R5od-G__Bt36zi88GtkyBRMOJSoZqzm9YwtW1YCayOgYO1HCHugnJY29hZoOkXm2g9Ldc_4Q8KGotaec4bJJlNbUEt1HTue4XCChqgortBjL8yoHB54W_xcCxrA6co_DuYOfMoj8/s1600/voronoi+source+code+vb6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="884" data-original-width="1398" height="404" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHRx8R5od-G__Bt36zi88GtkyBRMOJSoZqzm9YwtW1YCayOgYO1HCHugnJY29hZoOkXm2g9Ldc_4Q8KGotaec4bJJlNbUEt1HTue4XCChqgortBjL8yoHB54W_xcCxrA6co_DuYOfMoj8/s640/voronoi+source+code+vb6.JPG" width="640" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitQDmLly7XSRLXp2zptF-hXd0VnPXXuz0_nghnY_VwMAcvGwM8d57rJJXIJgPPOXRQFBiDc1jTRvx8-9yVjTU8VQwEHiREMLunFwg71NuJwjx5Q9jooi0qt_jLAbKg4QPwSGu0m8dEUZA/s1600/voronoi+VB6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="884" data-original-width="1398" height="404" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitQDmLly7XSRLXp2zptF-hXd0VnPXXuz0_nghnY_VwMAcvGwM8d57rJJXIJgPPOXRQFBiDc1jTRvx8-9yVjTU8VQwEHiREMLunFwg71NuJwjx5Q9jooi0qt_jLAbKg4QPwSGu0m8dEUZA/s640/voronoi+VB6.JPG" width="640" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEierTuL39zIDR9zExx4hn03i7OxQew18bngNkJ5G5UECyRhrXM6VLPL-klCX7eTSlXyPn_vMCy_huJXJBCzyH9Dq2f-lksv1oZ8c2_4wrYoeFdfQmsll1DVdRHVumYu2Ttazzz5_xFfx1k/s1600/vb6+voronoi.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="884" data-original-width="1398" height="404" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEierTuL39zIDR9zExx4hn03i7OxQew18bngNkJ5G5UECyRhrXM6VLPL-klCX7eTSlXyPn_vMCy_huJXJBCzyH9Dq2f-lksv1oZ8c2_4wrYoeFdfQmsll1DVdRHVumYu2Ttazzz5_xFfx1k/s640/vb6+voronoi.JPG" width="640" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnjYzEVeEH958qygZPKI4Z5KaNVfQM56yZ5knySH3GDhmU0Bfi8erMYE63a9O-LGaJT55L1UNl3W20z26zsttvaHz60uzh0PrYk9Kc9IMv8V7wgfBFaEWiY2EIQJtuCotK_g9EmBXOmiU/s1600/voronoi+vb6+logo.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="884" data-original-width="1398" height="404" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnjYzEVeEH958qygZPKI4Z5KaNVfQM56yZ5knySH3GDhmU0Bfi8erMYE63a9O-LGaJT55L1UNl3W20z26zsttvaHz60uzh0PrYk9Kc9IMv8V7wgfBFaEWiY2EIQJtuCotK_g9EmBXOmiU/s640/voronoi+vb6+logo.JPG" width="640" /></a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfA2w_ESEfCSmapKGO29_NsevChrbIwp4a76NsaOM2DxHfRiKXsWGfHj1r3p3Pt3EkGgFhucH3FyGwTTNsqbeDIbCKW_wBSpHH3H-xkVa_cyDSbRj5pKenRbjBtz0zVkKEHAqwoYQGFkY/s1600/Capture+voronoi+VB6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="884" data-original-width="1398" height="404" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfA2w_ESEfCSmapKGO29_NsevChrbIwp4a76NsaOM2DxHfRiKXsWGfHj1r3p3Pt3EkGgFhucH3FyGwTTNsqbeDIbCKW_wBSpHH3H-xkVa_cyDSbRj5pKenRbjBtz0zVkKEHAqwoYQGFkY/s640/Capture+voronoi+VB6.JPG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOT6mOxjtOnW0MS5O-cMw3biNzY3dv0cRYeuM2lLXkPmzDLRtpjC5B4VI0ZjqdI7VYzrk3w1-vr_4svqyoL90i3aPqOBnG4-wppezNPT6-1eeqEBGKjN2Q_snAJ_wnFEJtqeQR-3Fq3B8/s1600/VB6+points.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="884" data-original-width="1398" height="404" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOT6mOxjtOnW0MS5O-cMw3biNzY3dv0cRYeuM2lLXkPmzDLRtpjC5B4VI0ZjqdI7VYzrk3w1-vr_4svqyoL90i3aPqOBnG4-wppezNPT6-1eeqEBGKjN2Q_snAJ_wnFEJtqeQR-3Fq3B8/s640/VB6+points.JPG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMGqS3xu6DXIV1E5KZ0HqgB7zD0cUBqKAp0Lylnwnt-I6zYqDFQbrL26cIyhEqV2Q5rGyzRBYWdTiSZY9wX3ngbw4h9xRoUBF_G50FkTf_XOAUXPrQ3zGytkTzSQMfK_2odAt6dHMqJM8/s1600/vb6+voronoi+vb6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="884" data-original-width="1398" height="404" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMGqS3xu6DXIV1E5KZ0HqgB7zD0cUBqKAp0Lylnwnt-I6zYqDFQbrL26cIyhEqV2Q5rGyzRBYWdTiSZY9wX3ngbw4h9xRoUBF_G50FkTf_XOAUXPrQ3zGytkTzSQMfK_2odAt6dHMqJM8/s640/vb6+voronoi+vb6.JPG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Sources:</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=57062&lngWId=1">https://planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=57062&lngWId=1</a></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://www.codeproject.com/Articles/411242/Create-a-Voronoi-diagram-1-of-2">https://www.codeproject.com/Articles/411242/Create-a-Voronoi-diagram-1-of-2</a></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-22594987499562511032021-07-31T14:02:00.000-07:002021-07-31T14:02:00.265-07:00CryptoAPI encryption/Decryption, hashing, and random number generation (by Kenneth Ives)<div style="text-align: justify;">
<span style="background-color: white; font-family: Verdana;">Demonstration of CryptoAPI encryption/Decryption, hashing, and random number generation. Encryption includes RC2, RC4, DES, DES3, AES-128, AES-192, AES-256. Hashing includes MD4, MD5, SHA-1, SHA-256, SHA-384, SHA-512. Windows XP SP2 or earlier no longer supported. Updated </span><span style="background-color: white; font-family: Verdana;">20-Jul-2017, </span><span style="background-color: white; font-family: Verdana;">support modules and documentation.</span></div>
<br />
<a href="https://drive.google.com/file/d/1NwnJWwLASZn52Zv2EHolusE5P75Kr8zO/view?usp=sharing">Download from ME</a><br />
<a href="http://www.planetsourcecode.com/vb/scripts/ShowZip.asp?lngWId=1&lngCodeId=74645&strZipAccessCode=tp%2FC746450672">Download from PSC</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtakPVAMU-ZQ6MGzGkU01oQx6J10yFrZFMsFvDsIPtghy_rAKMMeYlraUnbCmPkaZXO3TSxErn68EzkIluVj1eEx4DnVuX_j3gwA9FlpASdUIBP7yWlfCms1GTRgLrSCRCjkiGhp0rN9w/s1600/0Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="567" data-original-width="751" height="482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtakPVAMU-ZQ6MGzGkU01oQx6J10yFrZFMsFvDsIPtghy_rAKMMeYlraUnbCmPkaZXO3TSxErn68EzkIluVj1eEx4DnVuX_j3gwA9FlpASdUIBP7yWlfCms1GTRgLrSCRCjkiGhp0rN9w/s640/0Capture.JPG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfpWin_qfpi_tH8Z-pigf4tCUDlA4L5_wxOiEA24NIC6Sf_Kk23R_aO93qOnap4Qh9qsFIFWbN7J_Nci_mByhaVc79w0wbk1isYH9TVeJ246OJ_bfF6w6oWv0FIuOh3-ofKZTWR2I_ir0/s1600/000Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="567" data-original-width="751" height="482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfpWin_qfpi_tH8Z-pigf4tCUDlA4L5_wxOiEA24NIC6Sf_Kk23R_aO93qOnap4Qh9qsFIFWbN7J_Nci_mByhaVc79w0wbk1isYH9TVeJ246OJ_bfF6w6oWv0FIuOh3-ofKZTWR2I_ir0/s640/000Capture.JPG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitlMAssI2ltGNJhZsruawHrt6JHaEL0_vNscmc7M2eNV43o5v0QZ6ErstjNWMIMN5DLmOEuws8drZct-7eV2t9nKY7GNbOEFpoMW56HuU0LbE5bd6faI-mAl7wABGsw3PTidZedBCndEg/s1600/0000000Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="567" data-original-width="751" height="482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitlMAssI2ltGNJhZsruawHrt6JHaEL0_vNscmc7M2eNV43o5v0QZ6ErstjNWMIMN5DLmOEuws8drZct-7eV2t9nKY7GNbOEFpoMW56HuU0LbE5bd6faI-mAl7wABGsw3PTidZedBCndEg/s640/0000000Capture.JPG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiytVZOGWj1bBWq7Nja1C71SS6i4xWytQF08bJWwlRisYcy0t7IGBfZ-FSCcDodszZw-dyAHMKr_62MPfLu3WFeD2OF5v84hRRHQmXtcdKqms_0fZGeyAmrWmry4rnLEZ_A7y-Xs_qVKkQ/s1600/0000000000Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="567" data-original-width="751" height="482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiytVZOGWj1bBWq7Nja1C71SS6i4xWytQF08bJWwlRisYcy0t7IGBfZ-FSCcDodszZw-dyAHMKr_62MPfLu3WFeD2OF5v84hRRHQmXtcdKqms_0fZGeyAmrWmry4rnLEZ_A7y-Xs_qVKkQ/s640/0000000000Capture.JPG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgTGUH7Mx2fnJ-BCi3VNkWdW5jiVCevHvDEY0PBauR7qzgs8CJqIgObXCtfVvyDbULSoXSEdlVLodRTOrl5oL6YigVM-zBMzrmIPXygKayJ8Up5v3yh7U6unbrLpm11qkZGYzDGnqnTnk/s1600/000000000000000000Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="567" data-original-width="751" height="482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgTGUH7Mx2fnJ-BCi3VNkWdW5jiVCevHvDEY0PBauR7qzgs8CJqIgObXCtfVvyDbULSoXSEdlVLodRTOrl5oL6YigVM-zBMzrmIPXygKayJ8Up5v3yh7U6unbrLpm11qkZGYzDGnqnTnk/s640/000000000000000000Capture.JPG" width="640" /></a></div>
<br />
<br />
Count Lines of Code v2.0.353 22 Mar 2017 06:29 AM<br />
<br />
CryptoAPI_Group.vbg<br />
Kenneth Ives kenaso@tx.rr.com<br />
------------------------------------------------------------------------------<br />
<br />
VBG Name: C:\Kens Software\CryptoAPI\CryptoAPI_Group.vbg<br />
<br />
VBP Name: C:\Kens Software\CryptoAPI\CryptoAPIDemo.vbp<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\clsKeyEdit.cls<br />
<br />
10 Sub routines<br />
80 Miscellaneous lines of code<br />
15 Auto generated lines (** Not included in totals **)<br />
60 Blank lines (** Not included in totals **)<br />
287 Comment lines (** Not included in totals **)<br />
----------<br />
90 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\clsManifest.cls<br />
<br />
3 Constant variables<br />
1 Enum Structures<br />
1 Type Structures<br />
5 API Declare statements<br />
4 Property Let routines<br />
2 Sub routines<br />
4 Functions<br />
182 Miscellaneous lines of code<br />
13 Auto generated lines (** Not included in totals **)<br />
88 Blank lines (** Not included in totals **)<br />
289 Comment lines (** Not included in totals **)<br />
----------<br />
198 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\clsOperSystem.cls<br />
<br />
105 Constant variables<br />
1 Type Structures<br />
6 API Declare statements<br />
163 Property Get routines<br />
13 Sub routines<br />
1,170 Miscellaneous lines of code<br />
15 Auto generated lines (** Not included in totals **)<br />
381 Blank lines (** Not included in totals **)<br />
378 Comment lines (** Not included in totals **)<br />
----------<br />
1,295 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\clsPrivileges.cls<br />
<br />
11 Constant variables<br />
3 Type Structures<br />
6 API Declare statements<br />
4 Property Let routines<br />
1 Property Get routines<br />
3 Sub routines<br />
3 Functions<br />
173 Miscellaneous lines of code<br />
13 Auto generated lines (** Not included in totals **)<br />
117 Blank lines (** Not included in totals **)<br />
213 Comment lines (** Not included in totals **)<br />
----------<br />
199 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\frmAbout.frm<br />
<br />
7 Constant variables<br />
3 API Declare statements<br />
9 Sub routines<br />
95 Miscellaneous lines of code<br />
332 Auto generated lines (** Not included in totals **)<br />
23 Blank lines (** Not included in totals **)<br />
84 Comment lines (** Not included in totals **)<br />
----------<br />
114 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\frmMain.frm<br />
<br />
6 Constant variables<br />
2 API Declare statements<br />
37 Sub routines<br />
1,340 Miscellaneous lines of code<br />
779 Auto generated lines (** Not included in totals **)<br />
93 Blank lines (** Not included in totals **)<br />
258 Comment lines (** Not included in totals **)<br />
----------<br />
1,385 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\frmSplash.frm<br />
<br />
2 Sub routines<br />
10 Miscellaneous lines of code<br />
52 Auto generated lines (** Not included in totals **)<br />
6 Blank lines (** Not included in totals **)<br />
17 Comment lines (** Not included in totals **)<br />
----------<br />
12 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\modCentering.bas<br />
<br />
12 Constant variables<br />
1 Type Structures<br />
7 API Declare statements<br />
2 Sub routines<br />
3 Functions<br />
83 Miscellaneous lines of code<br />
1 Auto generated lines (** Not included in totals **)<br />
73 Blank lines (** Not included in totals **)<br />
207 Comment lines (** Not included in totals **)<br />
----------<br />
108 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\modCommon.bas<br />
<br />
5 Constant variables<br />
5 Functions<br />
79 Miscellaneous lines of code<br />
1 Auto generated lines (** Not included in totals **)<br />
50 Blank lines (** Not included in totals **)<br />
99 Comment lines (** Not included in totals **)<br />
----------<br />
89 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\modDialogBox.bas<br />
<br />
61 Constant variables<br />
7 Type Structures<br />
24 API Declare statements<br />
6 Sub routines<br />
11 Functions<br />
652 Miscellaneous lines of code<br />
1 Auto generated lines (** Not included in totals **)<br />
105 Blank lines (** Not included in totals **)<br />
770 Comment lines (** Not included in totals **)<br />
----------<br />
761 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\modMain.bas<br />
<br />
34 Constant variables<br />
1 Type Structures<br />
23 API Declare statements<br />
8 Sub routines<br />
11 Functions<br />
340 Miscellaneous lines of code<br />
1 Auto generated lines (** Not included in totals **)<br />
244 Blank lines (** Not included in totals **)<br />
654 Comment lines (** Not included in totals **)<br />
----------<br />
417 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\modMessages.bas<br />
<br />
24 Constant variables<br />
2 Enum Structures<br />
1 Type Structures<br />
9 API Declare statements<br />
4 Sub routines<br />
4 Functions<br />
101 Miscellaneous lines of code<br />
1 Auto generated lines (** Not included in totals **)<br />
79 Blank lines (** Not included in totals **)<br />
405 Comment lines (** Not included in totals **)<br />
----------<br />
145 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\modProcesses.bas<br />
<br />
9 Constant variables<br />
1 Type Structures<br />
16 API Declare statements<br />
2 Sub routines<br />
13 Functions<br />
265 Miscellaneous lines of code<br />
1 Auto generated lines (** Not included in totals **)<br />
199 Blank lines (** Not included in totals **)<br />
398 Comment lines (** Not included in totals **)<br />
----------<br />
306 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\modTrimStr.bas<br />
<br />
1 Constant variables<br />
1 Type Structures<br />
2 API Declare statements<br />
2 Functions<br />
53 Miscellaneous lines of code<br />
1 Auto generated lines (** Not included in totals **)<br />
33 Blank lines (** Not included in totals **)<br />
129 Comment lines (** Not included in totals **)<br />
----------<br />
59 Module lines of code<br />
<br />
----------<br />
5,178 Sub-total for project<br />
<br />
<br />
VBP Name: C:\Kens Software\CryptoAPI\DLL\kiCryptoAPI.vbp<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\DLL\clsAPI_Hash.cls<br />
<br />
39 Constant variables<br />
1 Enum Structures<br />
7 API Declare statements<br />
5 Property Let routines<br />
2 Property Get routines<br />
1 Event routines<br />
6 Sub routines<br />
7 Functions<br />
320 Miscellaneous lines of code<br />
15 Auto generated lines (** Not included in totals **)<br />
204 Blank lines (** Not included in totals **)<br />
554 Comment lines (** Not included in totals **)<br />
----------<br />
381 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\DLL\clsBigFiles.cls<br />
<br />
19 Constant variables<br />
10 API Declare statements<br />
2 Property Let routines<br />
2 Event routines<br />
4 Sub routines<br />
13 Functions<br />
351 Miscellaneous lines of code<br />
15 Auto generated lines (** Not included in totals **)<br />
230 Blank lines (** Not included in totals **)<br />
704 Comment lines (** Not included in totals **)<br />
----------<br />
399 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\DLL\clsCRC32.cls<br />
<br />
8 Constant variables<br />
1 Property Let routines<br />
2 Property Get routines<br />
1 Event routines<br />
3 Sub routines<br />
4 Functions<br />
202 Miscellaneous lines of code<br />
15 Auto generated lines (** Not included in totals **)<br />
56 Blank lines (** Not included in totals **)<br />
189 Comment lines (** Not included in totals **)<br />
----------<br />
218 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\DLL\clsCipher.cls<br />
<br />
7 Constant variables<br />
7 Property Let routines<br />
5 Property Get routines<br />
1 Event routines<br />
3 Sub routines<br />
4 Functions<br />
324 Miscellaneous lines of code<br />
15 Auto generated lines (** Not included in totals **)<br />
63 Blank lines (** Not included in totals **)<br />
98 Comment lines (** Not included in totals **)<br />
----------<br />
339 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\DLL\clsCryptoAPI.cls<br />
<br />
73 Constant variables<br />
2 Enum Structures<br />
13 API Declare statements<br />
7 Property Let routines<br />
3 Property Get routines<br />
2 Event routines<br />
5 Sub routines<br />
11 Functions<br />
708 Miscellaneous lines of code<br />
15 Auto generated lines (** Not included in totals **)<br />
376 Blank lines (** Not included in totals **)<br />
654 Comment lines (** Not included in totals **)<br />
----------<br />
814 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\DLL\clsHash.cls<br />
<br />
1 Constant variables<br />
4 Property Let routines<br />
2 Property Get routines<br />
1 Event routines<br />
3 Sub routines<br />
2 Functions<br />
128 Miscellaneous lines of code<br />
15 Auto generated lines (** Not included in totals **)<br />
38 Blank lines (** Not included in totals **)<br />
117 Comment lines (** Not included in totals **)<br />
----------<br />
135 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\DLL\clsRandom.cls<br />
<br />
71 Constant variables<br />
3 Enum Structures<br />
14 API Declare statements<br />
2 Property Let routines<br />
2 Property Get routines<br />
13 Sub routines<br />
19 Functions<br />
918 Miscellaneous lines of code<br />
15 Auto generated lines (** Not included in totals **)<br />
502 Blank lines (** Not included in totals **)<br />
1,391 Comment lines (** Not included in totals **)<br />
----------<br />
1,038 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\DLL\modCommon.bas<br />
<br />
18 Constant variables<br />
7 API Declare statements<br />
3 Sub routines<br />
18 Functions<br />
232 Miscellaneous lines of code<br />
1 Auto generated lines (** Not included in totals **)<br />
172 Blank lines (** Not included in totals **)<br />
544 Comment lines (** Not included in totals **)<br />
----------<br />
278 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\DLL\modMessages.bas<br />
<br />
24 Constant variables<br />
2 Enum Structures<br />
1 Type Structures<br />
9 API Declare statements<br />
4 Sub routines<br />
4 Functions<br />
101 Miscellaneous lines of code<br />
1 Auto generated lines (** Not included in totals **)<br />
79 Blank lines (** Not included in totals **)<br />
405 Comment lines (** Not included in totals **)<br />
----------<br />
145 Module lines of code<br />
<br />
Module Name: C:\Kens Software\CryptoAPI\DLL\modTrimStr.bas<br />
<br />
1 Constant variables<br />
1 Type Structures<br />
2 API Declare statements<br />
2 Functions<br />
53 Miscellaneous lines of code<br />
1 Auto generated lines (** Not included in totals **)<br />
33 Blank lines (** Not included in totals **)<br />
129 Comment lines (** Not included in totals **)<br />
----------<br />
59 Module lines of code<br />
<br />
----------<br />
3,806 Sub-total for project<br />
<br />
<br />
==========<br />
8,984 Total number of lines of code<br />
<br />
******************************************************************************<br />
NOTE: Visual Basic trailers are not counted. These are the<br />
logical ending statements used by proceedural headings.<br />
<br />
End Sub End Function End Property<br />
End If End Type Loop<br />
Next Wend End With<br />
End Select<br />
******************************************************************************<br />
<br />
<b>kiCryptoAPI.dll Kenneth Ives</b> (kenaso|at|tx.rr.com)<br />
I am open to ways to improve this application, please email me.<br />
Visual Basic 6.0 with Service Pack 6 runtime files required.<br />
To obtain required files (VBRun60sp6.exe):<br />
http://www.microsoft.com/downloads/details.aspx?FamilyId=7B9BA261-7A9C-43E7-9117-F6730<br />
77FFB3C<br />
VBRun60sp6.exe installs Visual Basic 6.0 SP6 run-time files.<br />
http://support.microsoft.com/kb/290887<br />
This software has been tested on Windows XP SP3 64-bit through Windows 10.<br />
Windows XP 32-bit, 9x, 2000 and NT4 are no longer supported.<br />
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*<br />
*** WARNING *** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ***<br />
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*<br />
You acknowledge that this software is subject to the export control<br />
laws and regulations of the United States ("U.S.") and agree to abide<br />
by those laws and regulations. Under U.S. law, this software may not<br />
be downloaded or otherwise exported, reexported, or transferred to<br />
restricted countries, restricted end-users, or for restricted<br />
end-uses. The U.S. currently has embargo restrictions against Cuba,<br />
Iran, Iraq, Libya, North Korea, Sudan, and Syria. The lists of<br />
restricted end-users are maintained on the U.S. Commerce Department's<br />
Denied Persons List, the Commerce Department's Entity List, the<br />
Commerce Department's List of Unverified Persons, and the U.S.<br />
Treasury Department's List of Specially Designated Nationals and<br />
Blocked Persons. In addition, this software may not be downloaded or<br />
otherwise exported, reexported, or transferred to an end-user engaged<br />
in activities related to weapons of mass destruction.<br />
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*<br />
REFERENCE:<br />
The Cryptography API, or How to Keep a Secret<br />
http://msdn.microsoft.com/en-us/library/ms867086.aspx<br />
CryptoAPI Cryptographic Service Providers<br />
http://msdn.microsoft.com/en-us/library/bb931357(VS.85).aspx<br />
SHA-2 support on MS Windows<br />
Paraphrasing: Regarding SHA-224 support, SHA-224 offers less security<br />
than SHA-256 but takes the same amount of resources. Also SHA-224 is<br />
not generally used by protocols and applications. The NSA's (National<br />
Security Agency) Suite B standards also does not include it. Microsoft<br />
has no plans to add it to future versions of their Cryptographic<br />
Service Providers (CSP).<br />
http://blogs.msdn.com/b/alejacma/archive/2009/01/23/sha-2-support-on-windows-xp.aspx<br />
NIST (National Institute of Standards and Technology)<br />
FIPS (Federal Information Processing Standards Publication)<br />
SP (Special Publications)<br />
http://csrc.nist.gov/publications/PubsFIPS.html<br />
FIPS 180-2 (Federal Information Processing Standards Publication)<br />
dated 1-Aug-2002, with Change Notice 1, dated 25-Feb-2004<br />
http://csrc.nist.gov/publications/fips/fips180-2/FIPS180-2_changenotice.pdf<br />
FIPS 180-3 (Federal Information Processing Standards Publication)<br />
<br />
dated Oct-2008 (supercedes FIPS 180-2)<br />
http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf<br />
FIPS 180-4 (Federal Information Processing Standards Publication)<br />
dated Mar-2012 (Supercedes FIPS-180-3)<br />
http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf<br />
Examples of the implementation of the secure hash algorithms<br />
SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 and<br />
SHA-512/256, can be found at:<br />
http://csrc.nist.gov/groups/ST/toolkit/examples.html<br />
http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA2_Additional.pdf<br />
Aaron Gifford's additional test vectors<br />
http://www.adg.us/computers/sha.html<br />
Guidelines for Media Sanitization (SP800-88)<br />
http://csrc.nist.gov/publications/nistpubs/800-88/NISTSP800-88_rev1.pdf<br />
WARNING:<br />
MD4 Message-Digest Algorithm has been compromised at the rump<br />
session of Crypto 2004 it was announced that Xiaoyun Wang,<br />
Dengguo Feng, Xuejia Lai and Hongbo Yu found collisions for<br />
MD4, MD5, RIPEMD, and the 128-bit version of HAVAL.<br />
http://eprint.iacr.org/2004/199.pdf<br />
Feb-2005: SHA-1 has been compromised. Recommended that<br />
you do not use for password or document authentication.<br />
http://www.schneier.com/blog/archives/2005/02/sha1_broken.html<br />
http://csrc.nist.gov/groups/ST/toolkit/documents/shs/NISTHashComments-final.pdf<br />
Mar-2005 Demonstrating a technique for finding MD5 collisions quickly.<br />
Eight hours on 1.6 GHz computer.<br />
http://cryptography.hyperlink.cz/md5/MD5_collisions.pdf<br />
Jun-2005 Two researchers from the Institute for Cryptology and<br />
IT-Security have generated PostScript files with identical MD5-sums<br />
but entirely different (but meaningful!) content.<br />
http://www.schneier.com/blog/archives/2005/06/more_md5_collis.html<br />
March 15, 2006: The SHA-2 family of hash functions<br />
(i.e., SHA-224, SHA-256, SHA-384 and SHA-512) may be used<br />
by Federal agencies for all applications using secure hash<br />
algorithms. Federal agencies should stop using SHA-1 for<br />
digital signatures, digital time stamping and other<br />
applications that require collision resistance as soon as<br />
practical, and must use the SHA-2 family of hash functions<br />
for these applications after 2010. After 2010, Federal<br />
agencies may use SHA-1 only for the following applications:<br />
- hash-based message authentication codes (HMACs)<br />
- key derivation functions (KDFs)<br />
- random number generators (RNGs)<br />
Regardless of use, NIST encourages application and protocol<br />
designers to use the SHA-2 family of hash functions for all<br />
new applications and protocols.<br />
http://csrc.nist.gov/groups/ST/hash/policy.html<br />
<br />
Export Control: Certain cryptographic devices and technical<br />
data regarding them are subject to Federal export controls.<br />
Exports of cryptographic modules implementing this standard<br />
and technical data regarding them must comply with these<br />
Federal regulations and be licensed by the Bureau of Export<br />
Administration of the U.S. Department of Commerce.<br />
<br />
Information about export regulations is available at:<br />
http://www.bis.doc.gov/index.htm<br />
*****************************************************************************<br />
How to use:<br />
For a simple example, execute the SHA_Demo application. The demo converts<br />
the data to a byte array prior to passing it to the DLL to be hashed.<br />
[STRING DATA]<br />
Convert string data to byte array prior to passing to the HashString function.<br />
Ex: abytData() = StrConv("abc", vbFromUnicode)<br />
[FILE DATA]<br />
Just the path and filename are passed in the byte array. Convert the<br />
path\filename data to byte array prior to passing to the HashFile function.<br />
The HashFile routine will open and read the file into an internal byte array.<br />
Ex: abytData() = StrConv("C:\Files\Test Folder\Testfile.txt", vbFromUnicode)<br />
Both will create a hashed output string based on file data input.<br />
-------------------------------------------------------------------------------<br />
Test data provided to test either hash or cipher:<br />
TestPhrase.txt ASCII text phrase (Copy & paste phrase for string test)<br />
TestFile.txt ASCII text file<br />
Binary test files:<br />
kB_32.dat 32,768 binary zeros<br />
OneMil_0.dat One million binary zeros (FIPS 180-3)<br />
OneMil_a.dat One million letter "a" (FIPS 180-2)<br />
API32.txt Text file over 1 MB<br />
*****************************************************************************<br />
Note from Mark Hutchinson's presentation about Microsoft's VB random number<br />
generator. http://www.15seconds.com/issue/051110.htm<br />
References:<br />
Randomize Statement Doesn't Re-initialize Rnd Function<br />
http://support.microsoft.com/default.aspx?scid=kb;en-us;120587<br />
"To re-initialize the random-number generator, use the Rnd function with a<br />
value of -1 to re-initialize the Rnd function, and then use the Randomize<br />
statement with the value you want to use as the seed value for the Rnd<br />
function."<br />
<br />
VBA's Pseudo Random Number Generator<br />
http://www.noesis.net.au/prng.php<br />
INFO: How Visual Basic Generates Pseudo-Random Numbers for the RND Function<br />
http://support.microsoft.com/kb/231847/en-us<br />
RND and RANDOMIZE Alternatives for Generating Random Numbers<br />
http://support.microsoft.com/kb/28150/EN-US/<br />
<br />
** Enhanced ciphers<br />
********************************<br />
With all ciphers, except ArcFour, the data length will change. After<br />
encrytption, data sizes will not match original sizes. This is due to<br />
internal padding and the storing of information required to decrypt the<br />
data later.<br />
********************************<br />
** PASSWORDS<br />
********************************<br />
Currently there is a minimum and maximum length of the password the user<br />
may enter. This can be changed in the kiCrypt DLL basCommon.bas module.<br />
In the declarations section, locate these two constants and make the<br />
desired change. Be sure to recompile the DLL and the demo application.<br />
PWD_LENGTH_MIN = 8<br />
PWD_LENGTH_MAX = 50<br />
If no hash algorithm is selected then the default hash will be SHA-256.<br />
<br />
<b>Sources:</b><br />
<a href="http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=74645&lngWId=1">http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=74645&lngWId=1</a><br />
<a href="http://www.vbforums.com/showthread.php?831741-How-do-I-use-Crypto-API-functionality-in-VB6-without-CAPICOM-ActiveX-control">http://www.vbforums.com/showthread.php?831741-How-do-I-use-Crypto-API-functionality-in-VB6-without-CAPICOM-ActiveX-control</a><br />
<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-31240849570102194972021-07-21T10:58:00.000-07:002021-07-21T10:58:00.195-07:00ProcCounters & ProcMonitor - instrument your application<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTzDSd-dTt783l-oLDOZFnVP7tXtls3a1Avll6xwkhef4Rh3Poo_pxWBhKYR1_NTMC84WPwtVy5KkqdLzQHY17YWJtNxw0og1hmsv0Ew98xFihqBn_3mA0dabHIwrbqUDIkLNH95BvFEg/s1600/111111111111.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="397" data-original-width="599" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTzDSd-dTt783l-oLDOZFnVP7tXtls3a1Avll6xwkhef4Rh3Poo_pxWBhKYR1_NTMC84WPwtVy5KkqdLzQHY17YWJtNxw0og1hmsv0Ew98xFihqBn_3mA0dabHIwrbqUDIkLNH95BvFEg/s320/111111111111.JPG" width="320" /></a><span style="background-color: white;"></span><br />
<div style="text-align: justify;">
<span style="color: #333333; font-family: Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif;">An issue many of us deal with is trying different approaches in an application in order to improve performance. Often enough these are big changes, for example ADO Client vs. Server cursor location or using a file vs. keeping everything in memory.</span></div>
<br /><br />
<a href="http://www.vbforums.com/attachment.php?attachmentid=126389&d=1430847749">Download from VBForums</a><br />
<a href="https://drive.google.com/file/d/1L1JkEmmZHId7GnBUFls4Xmqj64rFIW1d/view?usp=sharing">Download from ME</a><br />
<span style="background-color: white;"><br style="color: #333333; font-family: Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif;" /></span>
<div style="text-align: justify;">
<span style="color: #333333; font-family: Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif;">So you don't need a code profiler right off the bat to micro-optimize, instead you need more "global" performance numbers: accumulating counters for the process. There are some API calls to retrieve a number of statistics. Some of the more useful ones measure CPU use, I/O use, and memory use.</span></div>
<div style="text-align: justify;">
<span style="color: #333333; font-family: Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAx5TK1gp3CaUGc37EwRcDQ6a3GKxNlRU0sHzmrQ7Jqzwq2_wFYrc7C0A-htzs7NQ90vTQmtmvJ0Ql6rzXc_UtSBr7SzJEBgsJ6Vn0l1rHsXMJns6Nfx7vdTGe8aBF19q5GVDXPfm9zJI/s1600/11111111111111111111111111111.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="397" data-original-width="599" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAx5TK1gp3CaUGc37EwRcDQ6a3GKxNlRU0sHzmrQ7Jqzwq2_wFYrc7C0A-htzs7NQ90vTQmtmvJ0Ql6rzXc_UtSBr7SzJEBgsJ6Vn0l1rHsXMJns6Nfx7vdTGe8aBF19q5GVDXPfm9zJI/s1600/11111111111111111111111111111.JPG" /></a></div>
<div style="text-align: justify;">
<tt style="color: #333333; line-height: 13px; text-align: justify;"><br /></tt></div>
<div style="text-align: justify;">
<tt style="color: #333333; line-height: 13px; text-align: justify;">ProcCounters</tt><span style="color: #333333; font-family: Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif; text-align: justify;"> is a VB6 class wrapping several of these calls. </span><tt style="line-height: 13px; text-align: justify;">ProcMonitor</tt><span style="font-family: Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif; text-align: justify;"> is a VB6 UserControl that displays summary information you can watch while running your program. It samples statistics via </span><tt style="line-height: 13px; text-align: justify;">ProcCounters</tt><span style="font-family: Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif; text-align: justify;"> and shows them in abbreviated format. </span><span style="background-color: white; text-align: justify;">The test program in the attachment just does a bunch of grinding away while it logs </span><tt style="line-height: 13px; text-align: justify;">ProcCounters</tt><span style="background-color: white; text-align: justify;"> results </span><i style="text-align: justify;">and</i><span style="background-color: white; text-align: justify;"> has a </span><tt style="line-height: 13px; text-align: justify;">ProcMonitor</tt><span style="background-color: white; text-align: justify;"> (blue here) running as well. </span><span style="color: #333333; font-family: Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif; text-align: justify;">These require Windows 2000 or later. </span><span style="background-color: white; text-align: justify;">Note that </span><tt style="line-height: 13px; text-align: justify;">ProcMonitor</tt><span style="background-color: white; text-align: justify;"> uses SHLWAPI calls to format byte-count values in "base 2" scales, i.e. 1KB = 1024 bytes, etc.</span></div>
<br />
<span style="background-color: white;"><span style="color: #333333; font-family: Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif;"><br /></span></span>
<span style="background-color: white;"><span style="color: #333333; font-family: Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif;"><b>Source:</b></span></span><br />
<a href="http://earlier189.rssing.com/browser.php?indx=6373759&item=371">http://earlier189.rssing.com/browser.php?indx=6373759&item=371</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-64503685889248561312021-07-15T09:05:00.000-07:002021-07-15T09:05:00.200-07:00Digital Signal Processing (VB6)<div id="preview" style="background-color: white; color: #333333; font-family: Verdana, Helvetica, Arial, sans-serif; margin: auto 1em; padding-bottom: 3em;">
<strong>Visual Basic 6.0 - Preview:</strong><br />
<div style="background: rgb(39, 40, 34); border-color: gray; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 16.25px;"><span style="color: #75715e;">'======================================================================</span>
<span style="color: #75715e;">' Descrizione.....: Collezione di routines e costanti di utilita'</span>
<span style="color: #75715e;">' per il Digital Signal Processing.</span>
<span style="color: #75715e;">'======================================================================</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Le routines di questo modulo sono un sotto insieme</span>
<span style="color: #75715e;">' di quelle contenute nel progetto FiltCalc (sito dei</span>
<span style="color: #75715e;">' DownLoads) e sono state modificate per adattarle a</span>
<span style="color: #75715e;">' questa applicazione.</span>
<span style="color: #75715e;">' Non tutte le costanti e le routines di questo</span>
<span style="color: #75715e;">' modulo vengono, necessariamente, usate.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Option</span> <span style="color: #f8f8f2;">Explicit</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'--- Windows ----------------------------------------------------------</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #f8f8f2;">Type</span> <span style="color: #f8f8f2;">Window_Type</span> <span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Nome</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">String</span> <span style="color: #75715e;">' Nome della "Window":</span>
<span style="color: #f8f8f2;">PMin</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span> <span style="color: #75715e;">' Valore Min. del Parametro associato.</span>
<span style="color: #f8f8f2;">PMax</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span> <span style="color: #75715e;">' Valore Max. del Parametro associato.</span>
<span style="color: #f8f8f2;">PCor</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span> <span style="color: #75715e;">' Valore corrente del Parametro associato.</span>
<span style="color: #66d9ef;">End</span> <span style="color: #f8f8f2;">Type</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Const</span> <span style="color: #f8f8f2;">A0#</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.99938</span> <span style="color: #75715e;">' Coefficienti per la</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Const</span> <span style="color: #f8f8f2;">A1#</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.041186</span> <span style="color: #75715e;">' Weber Window.</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Const</span> <span style="color: #f8f8f2;">A2#</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1.637363</span> <span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Const</span> <span style="color: #f8f8f2;">A3#</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.828217</span> <span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Const</span> <span style="color: #f8f8f2;">B0#</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1.496611</span> <span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Const</span> <span style="color: #f8f8f2;">B1#</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1.701521</span> <span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Const</span> <span style="color: #f8f8f2;">B2#</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.372793</span> <span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Const</span> <span style="color: #f8f8f2;">B3#</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.0650621</span> <span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'--- Spettro mobile (sliding spectrum) -------------------------------------------------</span>
<span style="color: #75715e;">' Implementazione dei circuiti tratti da:</span>
<span style="color: #75715e;">' "Theory and Application of Digital Signal Processing"</span>
<span style="color: #75715e;">' di L. Rabiner e B. Gold. - pg. 382, 383.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">NsSpm&</span> <span style="color: #75715e;">' N° di campioni per il calcolo dello spettro mobile.</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">NormSpm#</span> <span style="color: #75715e;">' Fattore di normalizzazione sul N° di campioni.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Coefficienti per il calcolo con convoluzione diretta:</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">z1()</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Complex</span> <span style="color: #75715e;">' vettore dei coefficienti di calcolo dello spettro mobile.</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">SmRE#()</span> <span style="color: #75715e;">' registro a scorrimento dei campioni del segnale.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Coefficienti per il calcolo ricorsivo:</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">Sn_1</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Complex</span> <span style="color: #75715e;">' Sn * Z^-1.</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">z1_1</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Complex</span> <span style="color: #75715e;">' z1(0)^-1</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">z1_N</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Complex</span> <span style="color: #75715e;">' z1(0)^-N</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">Ic&,</span> <span style="color: #f8f8f2;">Kc&</span> <span style="color: #75715e;">' indici in SmRE() per buffer circolare.</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">NsSpm1&</span> <span style="color: #75715e;">' NsSpm + 1.</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">Xz1_N</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Complex</span> <span style="color: #75715e;">' variabili di appoggio.</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">Yz1_1</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Complex</span> <span style="color: #75715e;">' " " "</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">SnI</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Complex</span> <span style="color: #75715e;">' " " "</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">Sn</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Complex</span> <span style="color: #75715e;">' " " "</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Per multi frequenza:</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">NFreqSPM_1&</span> <span style="color: #75715e;">' N° di frequenze - 1 a cui calcolare gli spettri.</span>
<span style="color: #75715e;">' Coefficienti per il calcolo ricorsivo multi frequenza:</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">Sn_MF_1()</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Complex</span> <span style="color: #75715e;">' vettore degli (NFreqSPM_1 + 1) Sn * Z^-1</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">z1_MF_1()</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Complex</span> <span style="color: #75715e;">' z1()^-1</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">z1_MF_N()</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Complex</span> <span style="color: #75715e;">' z1()^-N</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">SqRE#()</span> <span style="color: #75715e;">' Registro a scorrimento dei campioni del segnale al quadrato.</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">VMed#</span> <span style="color: #75715e;">' Valore medio corrente.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'--- Filtri FIR ------------------------------------------------------------------------</span>
<span style="color: #75715e;">' Algoritmi tradotti ed adattati dal FORTRAN di:</span>
<span style="color: #75715e;">' "Digital Filters and their Applications"</span>
<span style="color: #75715e;">' di V. Cappellini, A. G. Constantinides, P. Emiliani.</span>
<span style="color: #75715e;">' Window method: pg. 350.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">Hc!()</span> <span style="color: #75715e;">' Vettore dei coefficienti del filtro.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">WF#()</span> <span style="color: #75715e;">' Tabella dei coefficienti per Windowing.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">SRE!()</span> <span style="color: #75715e;">' Registro a scorrimento dei Dati da Filtrare.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Const</span> <span style="color: #f8f8f2;">FiltroErrFIR$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Le Routines di calcolo hanno trovato"</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">&</span> <span style="color: #e6db74;">"una condizione imprevista."</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">&</span> <span style="color: #e6db74;">"Provare a rivedere i parametri del filtro."</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'--- Filtri IIR ------------------------------------------------------------------------</span>
<span style="color: #75715e;">' Gli algoritmi per la sintesi di filtri del tipo Butterworth</span>
<span style="color: #75715e;">' e Chebyshev sono stati tradotti ed adattati dal FORTRAN di:</span>
<span style="color: #75715e;">' "Digital Filters and their Applications"</span>
<span style="color: #75715e;">' di V. Cappellini, A. G. Constantinides, P. Emiliani.</span>
<span style="color: #75715e;">' pg. 367, 368, 369.</span>
<span style="color: #75715e;">' Metodi di calcolo dei filtri elementari.</span>
<span style="color: #75715e;">' - Algoritmi di trasformazione da "Digital Signal Processing"</span>
<span style="color: #75715e;">' di W. D. Stanley - pg. 172, 173, 174.</span>
<span style="color: #75715e;">' - La funzione di trasferimento del risuonatore reale parallelo</span>
<span style="color: #75715e;">' e' tratta da "Teoria delle Reti Elettriche", Appunti dai</span>
<span style="color: #75715e;">' corsi del Politecnico di Torino - pg. (1.3)1 e seg.</span>
<span style="color: #75715e;">' - L' idea della sostituzione degli zeri per il "Notch Filter"</span>
<span style="color: #75715e;">' proviene da: http://www-users.cs.york.ac.uk/~fisher/mkfilter/res.html</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">NK&,</span> <span style="color: #f8f8f2;">NCel&</span> <span style="color: #75715e;">' Ordine e numero di sezioni del filtro.</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">Ac!()</span> <span style="color: #75715e;">' Coefficienti del filtro.</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">Bc!()</span> <span style="color: #75715e;">' " " "</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Const</span> <span style="color: #f8f8f2;">NCMax&</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">20</span> <span style="color: #75715e;">' N. Massimo di sezioni del filtro. ¦</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">w!()</span> <span style="color: #75715e;">' Registri delle sezioni del filtro.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">CEB#(</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">NCMax</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #75715e;">' Vettori in uso durante la sintesi.</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">AN#(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #ae81ff;">4</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #75715e;">' " " " "</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">FINA#(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #75715e;">' " " " "</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">FINB#(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #75715e;">' " " " "</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Const</span> <span style="color: #f8f8f2;">FiltroErrIIR$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Le Routines di calcolo hanno trovato"</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">&</span> <span style="color: #e6db74;">"una condizione imprevista."</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">&</span> <span style="color: #e6db74;">"Provare a rivedere i parametri del filtro."</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'--- Per routines SFFTBI e SFTTBF ------------------------------------------------------</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">MM&</span> <span style="color: #75715e;">' integer such that N = 2**MM</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">S1#()</span> <span style="color: #75715e;">' array of sin() table (length >= n/8-1)</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">C1#()</span> <span style="color: #75715e;">' array of cos() table (length >= n/8-1)</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">S3#()</span> <span style="color: #75715e;">' array of sin() table (length >= n/8-1)</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">C3#()</span> <span style="color: #75715e;">' array of cos() table (length >= n/8-1)</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">ITAB&()</span> <span style="color: #75715e;">' integer bit reversal table (length >= sqrt(2n))</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">D1#()</span> <span style="color: #75715e;">' Vettore dei dati di ingresso a base 1, come richiesto dal FORTRAN.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'--- Per auto e mutua correlazione con SFFTBI_Corr, SFTTBF_Corr e SFFTBB_Corr ----------</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">N1_C&</span> <span style="color: #75715e;">' N° di valori in D1().</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">N2_C&</span> <span style="color: #75715e;">' N° di valori in D2().</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">MM_C&</span> <span style="color: #75715e;">' MM_C = Ceil(Log(CDbl(N1_C + N2_C - 1)) / Log2)</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">N_C&</span> <span style="color: #75715e;">' N_C = 2**MM_C</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">S1_C#()</span> <span style="color: #75715e;">' array of sin() table (length >= N_C/8-1)</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">C1_C#()</span> <span style="color: #75715e;">' array of cos() table (length >= N_C/8-1)</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">S3_C#()</span> <span style="color: #75715e;">' array of sin() table (length >= N_C/8-1)</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">C3_C#()</span> <span style="color: #75715e;">' array of cos() table (length >= N_C/8-1)</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">ITAB_C&()</span> <span style="color: #75715e;">' integer bit reversal table (length >= sqrt(2*N_C))</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">D1_C#()</span> <span style="color: #75715e;">' Vettore dei dati di ingresso a base 1, come richiesto dal FORTRAN.</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">NFre_C&</span> <span style="color: #75715e;">' N° di frequenze calcolate.</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">WnRe#()</span> <span style="color: #75715e;">' Tavole dei seni/coseni per il calcolo della trasformata del</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">WnIm#()</span> <span style="color: #75715e;">' segnale ritardato di N1_C campioni (solo per AutoCorr_FT).</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">Re1_C#()</span> <span style="color: #75715e;">' Parte reale della 1° trasformata.</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">Im1_C#()</span> <span style="color: #75715e;">' " immaginaria " " "</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">Re2_C#()</span> <span style="color: #75715e;">' Parte reale della 2° trasformata.</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">Im2_C#()</span> <span style="color: #75715e;">' " immaginaria " " "</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #f8f8f2;">s#(),</span> <span style="color: #f8f8f2;">f#()</span> <span style="color: #75715e;">' Vettori d' appoggio.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'--- API di gestione memoria: ----------------------------------------------------------</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Declare</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">CopyMemory</span> <span style="color: #66d9ef;">Lib</span> <span style="color: #e6db74;">"kernel32"</span> <span style="color: #66d9ef;">Alias</span> <span style="color: #e6db74;">"RtlMoveMemory"</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f8f8f2;">(hpvDest</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Any,</span> <span style="color: #f8f8f2;">hpvSource</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Any,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">numBytes</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Declare</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">MoveMemory</span> <span style="color: #66d9ef;">Lib</span> <span style="color: #e6db74;">"kernel32"</span> <span style="color: #66d9ef;">Alias</span> <span style="color: #e6db74;">"RtlMoveMemory"</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f8f8f2;">(hpvDest</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Any,</span> <span style="color: #f8f8f2;">hpvSource</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Any,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">numBytes</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Declare</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">ZeroMemory</span> <span style="color: #66d9ef;">Lib</span> <span style="color: #e6db74;">"kernel32"</span> <span style="color: #66d9ef;">Alias</span> <span style="color: #e6db74;">"RtlZeroMemory"</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f8f8f2;">(hpvDest</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Any,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">numBytes</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Function</span> <span style="color: #a6e22e;">EliminaCC</span><span style="color: #f8f8f2;">(d()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">VMed</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Ritorna i dati del vettore D(0 To N) dopo l' eliminazione</span>
<span style="color: #75715e;">' della componente continua. I dati risultanti avranno, quindi,</span>
<span style="color: #75715e;">' valor medio = 0. Ritorna anche VMed, valor medio dei dati in D().</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">N&,</span> <span style="color: #f8f8f2;">dd#()</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">dd()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">d()</span>
<span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">UBound(dd)</span>
<span style="color: #f8f8f2;">VMed</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span>
<span style="color: #f8f8f2;">VMed</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">VMed</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">dd(I)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #f8f8f2;">VMed</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">VMed</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(N</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span>
<span style="color: #f8f8f2;">dd(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">dd(I)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">VMed</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">EliminaCC</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">dd()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Function</span> <span style="color: #a6e22e;">SPM</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">Xn!)</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Single</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Funzione per il calcolo con convoluzione diretta dello</span>
<span style="color: #75715e;">' spettro mobile (sliding spectrum) su NsSpm campioni.</span>
<span style="color: #75715e;">' Devono essere stati definiti, precedentemente, il vettore</span>
<span style="color: #75715e;">' dei coefficienti Z1() ed un vettore SmRE(0 To NsSpm - 1) da</span>
<span style="color: #75715e;">' usare come registro a scorrimento dei campioni del segnale.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">K&</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NsSpm</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">SmRE(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">SmRE(K</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #f8f8f2;">SmRE(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(Xn)</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Sn</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">CCmp(SmRE(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#)</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NsSpm</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">Sn</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">CSom(Sn,</span> <span style="color: #f8f8f2;">CMol(CCmp(SmRE(K),</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#),</span> <span style="color: #f8f8f2;">z1(K)))</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">SPM</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CSng</span><span style="color: #f8f8f2;">(CAbs(Sn))</span> <span style="color: #f92672;">/</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NsSpm)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">SPM_Init</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">NsSpm_I</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">Freq</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">Fs</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo dei coefficienti necessari alla</span>
<span style="color: #75715e;">' implementazione con convoluzione diretta</span>
<span style="color: #75715e;">' dello spettro mobile su NsSpm campioni:</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">OmegaT#</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">NsSpm</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NsSpm_I</span> <span style="color: #75715e;">' N° di campioni per il calcolo dello spettro mobile.</span>
<span style="color: #f8f8f2;">NormSpm</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NsSpm)</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #75715e;">' Fattore di normalizzazione sul N° di campioni.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">z1(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NsSpm)</span> <span style="color: #75715e;">' Vettore dei coefficienti di calcolo con</span>
<span style="color: #75715e;">' convoluzione diretta dello spettro mobile;</span>
<span style="color: #75715e;">' z1(0) = e^j*omega*T.</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">SmRE#(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NsSpm)</span> <span style="color: #75715e;">' Registro a scorrimento dei campioni del segnale.</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">OmegaT</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Freq</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Fs</span> <span style="color: #75715e;">' Per frequenza in [Hz].</span>
<span style="color: #75715e;">'OmegaT = PI2 * Freq ' Per frequenza in [f/fs].</span>
<span style="color: #f8f8f2;">z1(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">CExp(CCmp(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#,</span> <span style="color: #f8f8f2;">OmegaT))</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Per calcolo con convoluzione diretta:</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NsSpm</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">z1(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">CPtN(z1(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">I)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">SPM_R_Init</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">NsSpm_I</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">Freq</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">Fs_I</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo dei coefficienti necessari alla</span>
<span style="color: #75715e;">' implementazione ricorsiva dello spettro</span>
<span style="color: #75715e;">' mobile su NsSpm campioni:</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">OmegaT#</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">NsSpm</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NsSpm_I</span> <span style="color: #75715e;">' N° di campioni per il calcolo dello spettro mobile.</span>
<span style="color: #f8f8f2;">NsSpm1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NsSpm</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">NormSpm</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NsSpm)</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #75715e;">' Fattore di normalizzazione sul N° di campioni.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">z1(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #75715e;">' z1(0) = e^j*omega*T.</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">SmRE#(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NsSpm)</span> <span style="color: #75715e;">' Registro a scorrimento dei campioni del segnale.</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">OmegaT</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Freq</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Fs_I</span> <span style="color: #75715e;">' Per frequenza in [Hz].</span>
<span style="color: #75715e;">'OmegaT = PI2 * Freq ' Per frequenza in [f/fs].</span>
<span style="color: #f8f8f2;">z1(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">CExp(CCmp(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#,</span> <span style="color: #f8f8f2;">OmegaT))</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Per calcolo ricorsivo:</span>
<span style="color: #f8f8f2;">Sn_1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">CCmp(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#,</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#)</span>
<span style="color: #f8f8f2;">z1_1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">CPtN(z1(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #f8f8f2;">z1_N</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">CPtN(z1(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">NsSpm)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">SPM_MF_R_Init</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">NsSpm_I</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">NFRE</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">Freq()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">Fs</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo dei coefficienti necessari alla</span>
<span style="color: #75715e;">' implementazione ricorsiva, multi frequenza</span>
<span style="color: #75715e;">' dello spettro mobile su NsSpm campioni.</span>
<span style="color: #75715e;">' Le frequenze, a cui calcolare gli spettri,</span>
<span style="color: #75715e;">' devono essere definite nel vettore Freq(0 to NFreqSPM_1):</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">OmegaT#</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">NsSpm</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NsSpm_I</span> <span style="color: #75715e;">' N° di campioni per il calcolo dello spettro mobile.</span>
<span style="color: #f8f8f2;">NsSpm1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NsSpm</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">NFreqSPM_1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NFRE</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #75715e;">' N° di frequenze - 1 a cui calcolare gli spettri.</span>
<span style="color: #f8f8f2;">NormSpm</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NsSpm)</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #75715e;">' Fattore di normalizzazione sul N° di campioni.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">z1(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #75715e;">' z1(0) = e^j*omega*T.</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">SmRE(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NsSpm)</span> <span style="color: #75715e;">' Registro a scorrimento dei campioni del segnale.</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">SqRE(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NsSpm)</span> <span style="color: #75715e;">' Registro a scorrimento dei campioni del segnale al quadrato.</span>
<span style="color: #f8f8f2;">VMed</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span> <span style="color: #75715e;">' Valore medio corrente.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Sn_MF_1(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFreqSPM_1)</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">z1_MF_1(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFreqSPM_1)</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">z1_MF_N(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFreqSPM_1)</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFreqSPM_1</span>
<span style="color: #f8f8f2;">OmegaT</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Freq(I)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Fs</span> <span style="color: #75715e;">' Per frequenze in [Hz].</span>
<span style="color: #75715e;">'OmegaT = PI2 * Freq(I) ' Per frequenze in [f/fs].</span>
<span style="color: #f8f8f2;">z1(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">CExp(CCmp(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#,</span> <span style="color: #f8f8f2;">OmegaT))</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Per calcolo ricorsivo:</span>
<span style="color: #f8f8f2;">Sn_MF_1(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">CCmp(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#,</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#)</span>
<span style="color: #f8f8f2;">z1_MF_1(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">CPtN(z1(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #f8f8f2;">z1_MF_N(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">CPtN(z1(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">NsSpm)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">SPM_MF_R</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">IMed</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">Xn</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Single</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">SpmMF()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">MedMF</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Routine per il calcolo ricorsivo dello spettro mobile (sliding</span>
<span style="color: #75715e;">' spectrum) multi frequenza su NsSpm campioni.</span>
<span style="color: #75715e;">' Devono essere stati definiti, precedentemente, i coefficienti</span>
<span style="color: #75715e;">' z1_MF_1(), z1_MF_N() ed un vettore SmRE(0 To NsSpm) da usare come</span>
<span style="color: #75715e;">' registro a scorrimento dei campioni del segnale.</span>
<span style="color: #75715e;">' Ritorna anche il valore della media (o del valor efficace) mobile</span>
<span style="color: #75715e;">' degli ultimi NsSpm campioni.</span>
<span style="color: #75715e;">' In questa routine, per ragioni di velocita', le funzioni di numeri</span>
<span style="color: #75715e;">' complessi sono state sostituite con il loro sviluppo in linea.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">K&</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">On</span> <span style="color: #66d9ef;">Error</span> <span style="color: #66d9ef;">Resume</span> <span style="color: #66d9ef;">Next</span> <span style="color: #75715e;">' Gestisce gli errori di troncamento nel calcolo di MedMF.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' SmRE() usato come buffer circolare:</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">((Ic</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">Mod</span> <span style="color: #f8f8f2;">NsSpm1)</span>
<span style="color: #f8f8f2;">Kc</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">((Ic</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">Mod</span> <span style="color: #f8f8f2;">NsSpm1)</span>
<span style="color: #f8f8f2;">SmRE(Ic)</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(Xn)</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFreqSPM_1</span>
<span style="color: #75715e;">'XZ1_N = CMol(CCmp(SmRE(Kc), 0#), z1_MF_N)</span>
<span style="color: #f8f8f2;">Xz1_N.Re</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">SmRE(Kc)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">z1_MF_N(K).Re</span>
<span style="color: #f8f8f2;">Xz1_N.Im</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">SmRE(Kc)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">z1_MF_N(K).Im</span>
<span style="color: #75715e;">'SnI = CDif(CCmp(SmRE(Ic), 0#), XZ1_N)</span>
<span style="color: #f8f8f2;">SnI.Re</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">SmRE(Ic)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Xz1_N.Re</span>
<span style="color: #f8f8f2;">SnI.Im</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">Xz1_N.Im</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'YZ1_1 = CMol(Sn_MF_1(K), z1_MF_1(K))</span>
<span style="color: #f8f8f2;">Yz1_1.Re</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sn_MF_1(K).Re</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">z1_MF_1(K).Re</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Sn_MF_1(K).Im</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">z1_MF_1(K).Im</span>
<span style="color: #f8f8f2;">Yz1_1.Im</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sn_MF_1(K).Re</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">z1_MF_1(K).Im</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Sn_MF_1(K).Im</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">z1_MF_1(K).Re</span>
<span style="color: #75715e;">'Sn = CSom(SnI, YZ1_1)</span>
<span style="color: #f8f8f2;">Sn.Re</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">SnI.Re</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Yz1_1.Re</span>
<span style="color: #f8f8f2;">Sn.Im</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">SnI.Im</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Yz1_1.Im</span>
<span style="color: #f8f8f2;">Sn_MF_1(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sn</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'SpmMF(K) = CAbs(Sn) / NormSpm</span>
<span style="color: #f8f8f2;">SpmMF(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sqr(Sn.Re</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Sn.Re</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Sn.Im</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Sn.Im)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NormSpm</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo la media/valor efficace mobile:</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(NsSpm</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">IMed)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #75715e;">' Media mobile del valore assoluto del segnale:</span>
<span style="color: #75715e;">'VMed = VMed + Abs(SmRE(Ic)) - Abs(SmRE(Kc))</span>
<span style="color: #75715e;">'MedMF = VMed / CDbl(NsSpm)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Valore efficace mobile:</span>
<span style="color: #f8f8f2;">SqRE(Ic)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">SmRE(Ic)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SmRE(Ic)</span>
<span style="color: #f8f8f2;">VMed</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">VMed</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">SqRE(Ic)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">SqRE(Kc)</span>
<span style="color: #f8f8f2;">MedMF</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sqr(VMed</span> <span style="color: #f92672;">/</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NsSpm))</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #75715e;">' Gestisco l' inizio del segnale:</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(IMed</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #f8f8f2;">VMed</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Media mobile del valore assoluto del segnale:</span>
<span style="color: #75715e;">'VMed = VMed + Abs(SmRE(Ic))</span>
<span style="color: #75715e;">'MedMF = VMed / CDbl(IMed)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Valore efficace mobile:</span>
<span style="color: #f8f8f2;">SqRE(Ic)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">SmRE(Ic)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SmRE(Ic)</span>
<span style="color: #f8f8f2;">VMed</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">VMed</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">SqRE(Ic)</span>
<span style="color: #f8f8f2;">MedMF</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sqr(VMed</span> <span style="color: #f92672;">/</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(IMed))</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Function</span> <span style="color: #a6e22e;">SPM_R</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">Xn</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span>
<span style="color: #75715e;">'Public Function SPM_R(ByVal Xn As Single) As Single</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Funzione per il calcolo ricorsivo dello spettro mobile</span>
<span style="color: #75715e;">' (sliding spectrum) su NsSpm campioni.</span>
<span style="color: #75715e;">' Devono essere stati definiti, precedentemente, i coefficienti</span>
<span style="color: #75715e;">' Z1_1, Z1_N ed un vettore SmRE(0 To NsSpm) da usare come</span>
<span style="color: #75715e;">' registro a scorrimento dei campioni del segnale.</span>
<span style="color: #75715e;">' In questa routine, per ragioni di velocita', le funzioni di numeri</span>
<span style="color: #75715e;">' complessi sono state sostituite con il loro sviluppo in linea.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Versione per filtro del trigger di AudioCardDSP (24/04/2009).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' SmRE() usato come buffer circolare:</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">((Ic</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">Mod</span> <span style="color: #f8f8f2;">NsSpm1)</span>
<span style="color: #f8f8f2;">Kc</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">((Ic</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">Mod</span> <span style="color: #f8f8f2;">NsSpm1)</span>
<span style="color: #f8f8f2;">SmRE(Ic)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Xn</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' XZ1_N = CMol(CCmp(SmRE(NsSpm), 0#), Z1_N):</span>
<span style="color: #f8f8f2;">Xz1_N.Re</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">SmRE(Kc)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">z1_N.Re</span>
<span style="color: #f8f8f2;">Xz1_N.Im</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">SmRE(Kc)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">z1_N.Im</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' SnI = CDif(CCmp(SmRE(0), 0#), XZ1_N):</span>
<span style="color: #f8f8f2;">SnI.Re</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">SmRE(Ic)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Xz1_N.Re</span>
<span style="color: #f8f8f2;">SnI.Im</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">Xz1_N.Im</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Yz1_1 = CMol(Sn_1, z1_1):</span>
<span style="color: #f8f8f2;">Yz1_1.Re</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sn_1.Re</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">z1_1.Re</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Sn_1.Im</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">z1_1.Im</span>
<span style="color: #f8f8f2;">Yz1_1.Im</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sn_1.Re</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">z1_1.Im</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Sn_1.Im</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">z1_1.Re</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Sn = CSom(SnI, Yz1_1):</span>
<span style="color: #f8f8f2;">Sn.Re</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">SnI.Re</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Yz1_1.Re</span>
<span style="color: #f8f8f2;">Sn.Im</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">SnI.Im</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Yz1_1.Im</span>
<span style="color: #f8f8f2;">Sn_1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sn</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' SPM_R = CAbs(Sn) / NormSpm:</span>
<span style="color: #f8f8f2;">SPM_R</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sqr(Sn.Re</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Sn.Re</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Sn.Im</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Sn.Im)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NormSpm</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Function</span> <span style="color: #a6e22e;">MCorr_FT</span><span style="color: #f8f8f2;">(D1()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">D2()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">R2</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">bUnbiased</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Boolean</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">False</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">bNoCC</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Boolean</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">False</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Espressione della mutua correlazione non circolare:</span>
<span style="color: #75715e;">' MCorr_FT(R) = (L / Ld) * IFFT((1 / L) * Coniugata(FFT(D1(I))) * FFT(D2(I)))</span>
<span style="color: #75715e;">' con: N1 = UBound(D1), N2 = UBound(D2),</span>
<span style="color: #75715e;">' -N1 <= R1 <= 0, 0 <= R2 <= N2, R1 <= R <= R2,</span>
<span style="color: #75715e;">' L = MIN(N1 + 1, N2 + 1), Ld = MIN(N1 + R, N2) - MAX(0, R) + 1</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Ritorna un vettore contenente la funzione di mutua correlazione</span>
<span style="color: #75715e;">' fra i dati in D1() e quelli in D2() calcolata su R1 --> R2 ritardi</span>
<span style="color: #75715e;">' [i.e. MCorr_FT(R1 To R2)].</span>
<span style="color: #75715e;">' I segnali D1() e D2() sono considerati finiti.</span>
<span style="color: #75715e;">' Se bUnbiased = True i valori della mutua correlazione vengono</span>
<span style="color: #75715e;">' corretti con 1 / (N - r).</span>
<span style="color: #75715e;">' Se bNoCC = True dai segnali viene eliminata la componente continua.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Il calcolo viene effettuato con FFT e IFFT.</span>
<span style="color: #75715e;">' Algoritmo tratto da: "Theory and Application of Digital</span>
<span style="color: #75715e;">' Signal Processing" di L. Rabiner e B. Gold. - pg. 403</span>
<span style="color: #75715e;">' e corretto con le equazioni di "Digital Time Series Analysis"</span>
<span style="color: #75715e;">' di R. K. Otnes, L. Enochson. - pg. 247, 248.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Ver. 18/10/2005 modificata per AudioCardDSP.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">M&,</span> <span style="color: #f8f8f2;">M2_1&,</span> <span style="color: #f8f8f2;">N1&,</span> <span style="color: #f8f8f2;">N2&,</span> <span style="color: #f8f8f2;">r&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">LNorm#,</span> <span style="color: #f8f8f2;">dd1#(),</span> <span style="color: #f8f8f2;">dd2#(),</span> <span style="color: #f8f8f2;">NBytes&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">Re1#(),</span> <span style="color: #f8f8f2;">Im1#(),</span> <span style="color: #f8f8f2;">Re2#(),</span> <span style="color: #f8f8f2;">Im2#(),</span> <span style="color: #f8f8f2;">s#(),</span> <span style="color: #f8f8f2;">f#()</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">N1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">UBound(D1)</span>
<span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">UBound(D2)</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">M</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ceil(Log((N1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Log2)</span>
<span style="color: #f8f8f2;">M2_1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">2</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">M)</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I dati devono avere media zero?</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">bNoCC</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">dd1()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">EliminaCC(D1())</span>
<span style="color: #f8f8f2;">dd2()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">EliminaCC(D2())</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #f8f8f2;">dd1()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1()</span>
<span style="color: #f8f8f2;">dd2()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D2()</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">dd1(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">M2_1)</span> <span style="color: #75715e;">' Aggiungo zeri per avere una potenza di 2.</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">dd2(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">M2_1)</span> <span style="color: #75715e;">' " " " " " " " "</span>
<span style="color: #75715e;">' Sposto i valori per comporre</span>
<span style="color: #75715e;">' opportunamente il secondo segnale:</span>
<span style="color: #f8f8f2;">MoveMemory</span> <span style="color: #f8f8f2;">dd2(N1</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">dd2(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(N2</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #f8f8f2;">ZeroMemory</span> <span style="color: #f8f8f2;">dd2(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(N1</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">' For R = N2 To 0 Step -1</span>
<span style="color: #75715e;">' dd2(N1 + R + 1) = dd2(R)</span>
<span style="color: #75715e;">' dd2(R) = 0#</span>
<span style="color: #75715e;">' Next R</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo la FFT dei due segnali:</span>
<span style="color: #f8f8f2;">FFT_D2</span> <span style="color: #f8f8f2;">dd1(),</span> <span style="color: #f8f8f2;">dd2(),</span> <span style="color: #f8f8f2;">Re1(),</span> <span style="color: #f8f8f2;">Im1(),</span> <span style="color: #f8f8f2;">Re2(),</span> <span style="color: #f8f8f2;">Im2(),</span> <span style="color: #f8f8f2;">M2_1</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Moltiplico la seconda trasformata</span>
<span style="color: #75715e;">' per la coniugata della prima:</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">s(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">M2_1),</span> <span style="color: #f8f8f2;">f(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">M2_1)</span> <span style="color: #75715e;">' Uso S() e F() come vettori d' appoggio.</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">r</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">M2_1</span>
<span style="color: #f8f8f2;">s(r)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(Re1(r)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Re2(r)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Im1(r)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Im2(r))</span> <span style="color: #75715e;">' Parte reale.</span>
<span style="color: #f8f8f2;">f(r)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(Re1(r)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Im2(r)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Re2(r)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Im1(r))</span> <span style="color: #75715e;">' Parte immaginaria.</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">r</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo l' antitrasformata, corrispondente</span>
<span style="color: #75715e;">' alla funzione di mutua correlazione:</span>
<span style="color: #f8f8f2;">IFFT</span> <span style="color: #f8f8f2;">s(),</span> <span style="color: #f8f8f2;">f(),</span> <span style="color: #f8f8f2;">Re1(),</span> <span style="color: #f8f8f2;">Im1()</span> <span style="color: #75715e;">' Uso Re1() e Im1() come vettori d' appoggio.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Sistemo i valori nell' ordine dei ritardi:</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Im1(R1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">R2)</span> <span style="color: #75715e;">' Uso Im1() come vettore d' appoggio.</span>
<span style="color: #f8f8f2;">NBytes</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(R2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #75715e;">' I valori > N1 + N2 + 1 sono nulli e/o simmetrici.</span>
<span style="color: #f8f8f2;">CopyMemory</span> <span style="color: #f8f8f2;">Im1(R1),</span> <span style="color: #f8f8f2;">Re1(N1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">NBytes</span>
<span style="color: #75715e;">' For R = R1 To R2</span>
<span style="color: #75715e;">' Im1(R) = Re1(N1 + R + 1)</span>
<span style="color: #75715e;">' Next R</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">bUnbiased</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #75715e;">' Correzione dei valori della mutua</span>
<span style="color: #75715e;">' correlazione con 1 / (N - r):</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">r</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">R2</span>
<span style="color: #75715e;">' LNorm = MIN(N1 + R, N2) - MAX(0, R) + 1:</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(N1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">r</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N2)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">LNorm</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(N1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">r</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #f8f8f2;">LNorm</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(N2</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">0</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">r)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #f8f8f2;">LNorm</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">LNorm</span> <span style="color: #f92672;">-</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(r)</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Im1(r)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Im1(r)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">LNorm</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">r</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #75715e;">' Correzione dei valori della mutua</span>
<span style="color: #75715e;">' correlazione con 1 / N:</span>
<span style="color: #75715e;">'LNorm = CDbl(MIN0(N1 + 1, N2 + 1))</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(N1</span> <span style="color: #f92672;"><=</span> <span style="color: #f8f8f2;">N2)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">LNorm</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(N1</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #f8f8f2;">LNorm</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(N2</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">r</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">R2</span>
<span style="color: #f8f8f2;">Im1(r)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Im1(r)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">LNorm</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">r</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">MCorr_FT</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Im1()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Function</span> <span style="color: #a6e22e;">MAutoCorr_FT</span><span style="color: #f8f8f2;">(D1()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">R2</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">bUnbiased</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Boolean</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">True</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">bNoCC</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Boolean</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">True</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Espressione dell' auto correlazione non circolare:</span>
<span style="color: #75715e;">' MCorr_FT(R) = (L / Ld) * IFFT((1 / L) * Coniugata(FFT(D1(I))) * FFT(D1(I)))</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' con: D1(0 To N1_C - 1),</span>
<span style="color: #75715e;">' MM_C = Ceil(Log(CDbl(2 * N1_C - 1)) / Log2),</span>
<span style="color: #75715e;">' N_C = 2 ^ MM_C, NFre_C = N_C / 2,</span>
<span style="color: #75715e;">' -N1_C < R1 <= 0, 0 <= R2 < N1_C, R1 <= R <= R2,</span>
<span style="color: #75715e;">' L = N1_C, Ld = N1_C - Abs(R)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Ritorna un vettore contenente la funzione di auto correlazione</span>
<span style="color: #75715e;">' dei dati in D1() calcolata su R1 --> R2 ritardi [i.e. MAutoCorr_FT(R1 To R2)].</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I segnali D1() sono considerati finiti.</span>
<span style="color: #75715e;">' Se bUnbiased = True i valori dell' auto correlazione vengono</span>
<span style="color: #75715e;">' corretti con 1 / (N - |r|).</span>
<span style="color: #75715e;">' Se bNoCC = True dai segnali viene eliminata la componente continua.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Il calcolo viene effettuato con SFFTBF_Corr e SFFTBB_Corr e</span>
<span style="color: #75715e;">' deve essere preceduto da una chiamata alla Sub SFFTBI_Corr.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Algoritmo tratto da: "Theory and Application of Digital</span>
<span style="color: #75715e;">' Signal Processing" di L. Rabiner e B. Gold. - pg. 403</span>
<span style="color: #75715e;">' e corretto con le equazioni di "Digital Time Series Analysis"</span>
<span style="color: #75715e;">' di R. K. Otnes, L. Enochson. - pg. 247, 248.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Ver. 18/10/2005 modificata per AudioCardDSP.</span>
<span style="color: #75715e;">' Ver. 22/05/2007 con SFFTBF_Corr e SFFTBB_Corr.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">r&,</span> <span style="color: #f8f8f2;">NBytes&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">dd1#(),</span> <span style="color: #f8f8f2;">Sxx#</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">Corr#(),</span> <span style="color: #f8f8f2;">LNorm#</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I dati devono avere media zero?</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">bNoCC</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">dd1()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">EliminaCC(D1())</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #f8f8f2;">dd1()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1()</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">dd1(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #75715e;">' Aggiungo zeri per avere una potenza di 2.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo la FFT del segnale:</span>
<span style="color: #f8f8f2;">SFFTBF_Corr</span> <span style="color: #f8f8f2;">dd1(),</span> <span style="color: #f8f8f2;">Re1_C(),</span> <span style="color: #f8f8f2;">Im1_C()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' (A) - Calcolo la trasformata del segnale</span>
<span style="color: #75715e;">' ritardato di N1_C campioni:</span>
<span style="color: #75715e;">'For R = 0 To NFre_C</span>
<span style="color: #75715e;">' Re2_C(R) = (Re1_C(R) * WnRe(R) - Im1_C(R) * WnIm(R)) ' Parte reale.</span>
<span style="color: #75715e;">' Im2_C(R) = (WnRe(R) * Im1_C(R) + Re1_C(R) * WnIm(R)) ' Parte immaginaria.</span>
<span style="color: #75715e;">'Next R</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' (B) - Moltiplico la seconda trasformata</span>
<span style="color: #75715e;">' per la coniugata della prima:</span>
<span style="color: #75715e;">'For R = 0 To NFre_C</span>
<span style="color: #75715e;">' S(R) = (Re1_C(R) * Re2_C(R) + Im1_C(R) * Im2_C(R)) ' Parte reale.</span>
<span style="color: #75715e;">' F(R) = (Re1_C(R) * Im2_C(R) - Re2_C(R) * Im1_C(R)) ' Parte immaginaria.</span>
<span style="color: #75715e;">'Next R</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Compatto i calcoli (A) e (B) precedenti per</span>
<span style="color: #75715e;">' aumentarne la velocita' di esecuzione:</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">r</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFre_C</span>
<span style="color: #f8f8f2;">Sxx</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Re1_C(r)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Re1_C(r)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Im1_C(r)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Im1_C(r)</span>
<span style="color: #f8f8f2;">s(r)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sxx</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">WnRe(r)</span> <span style="color: #75715e;">' Parte reale.</span>
<span style="color: #f8f8f2;">f(r)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sxx</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">WnIm(r)</span> <span style="color: #75715e;">' Parte immaginaria.</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">r</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo l' antitrasformata, corrispondente</span>
<span style="color: #75715e;">' alla funzione di mutua correlazione:</span>
<span style="color: #f8f8f2;">SFFTBB_Corr</span> <span style="color: #f8f8f2;">s(),</span> <span style="color: #f8f8f2;">f(),</span> <span style="color: #f8f8f2;">dd1()</span> <span style="color: #75715e;">' Uso dd1() come vettore d' appoggio.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Sistemo i valori nell' ordine dei ritardi:</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Corr(R1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">R2)</span> <span style="color: #75715e;">' Uso Corr() come vettore d' appoggio.</span>
<span style="color: #f8f8f2;">NBytes</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(R2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #75715e;">' I valori > 2 * N1_C - 1 sono nulli e/o simmetrici.</span>
<span style="color: #f8f8f2;">CopyMemory</span> <span style="color: #f8f8f2;">Corr(R1),</span> <span style="color: #f8f8f2;">dd1(N1_C</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">R1),</span> <span style="color: #f8f8f2;">NBytes</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">bUnbiased</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #75715e;">' Correzione dei valori della mutua</span>
<span style="color: #75715e;">' correlazione con 1 / (N - |r|):</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">r</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">R2</span>
<span style="color: #f8f8f2;">LNorm</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(N1_C</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Abs(r))</span>
<span style="color: #f8f8f2;">Corr(r)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Corr(r)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">LNorm</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">r</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #75715e;">' Correzione dei valori della mutua</span>
<span style="color: #75715e;">' correlazione con 1 / N:</span>
<span style="color: #f8f8f2;">LNorm</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(N1_C)</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">r</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">R2</span>
<span style="color: #f8f8f2;">Corr(r)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Corr(r)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">LNorm</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">r</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">MAutoCorr_FT</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Corr()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Function</span> <span style="color: #a6e22e;">MMutuaCorr_FT</span><span style="color: #f8f8f2;">(D1()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">D2()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">R2</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">bUnbiased</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Boolean</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">False</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">bNoCC</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Boolean</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">False</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Espressione della mutua correlazione non circolare:</span>
<span style="color: #75715e;">' MMutuaCorr_FT(R) = (L / Ld) * IFFT((1 / L) * Coniugata(FFT(D1(I))) * FFT(D2(I)))</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' con: D1(0 To N1_C - 1), D2(0 To N2_C - 1),</span>
<span style="color: #75715e;">' MM_C = Ceil(Log(CDbl(N1_C + N2_C - 1)) / Log2),</span>
<span style="color: #75715e;">' N_C = 2 ^ MM_C, NFre_C = N_C / 2,</span>
<span style="color: #75715e;">' -N1_C < R1 <= 0, 0 <= R2 < N2_C, R1 <= R <= R2,</span>
<span style="color: #75715e;">' L = MIN(N1_C, N2_C), Ld = MIN(N1_C + R, N2_C) - MAX(0, R)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Ritorna un vettore contenente la funzione di mutua correlazione</span>
<span style="color: #75715e;">' fra i dati in D1() e quelli in D2() calcolata su R1 --> R2 ritardi</span>
<span style="color: #75715e;">' [i.e. MAutoCorr_FT(R1 To R2)].</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I segnali D1() e D2() sono considerati finiti.</span>
<span style="color: #75715e;">' Se bUnbiased = True i valori dell' auto correlazione vengono</span>
<span style="color: #75715e;">' corretti con 1 / (N - |r|).</span>
<span style="color: #75715e;">' Se bNoCC = True dai segnali viene eliminata la componente continua.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Il calcolo viene effettuato con SFFTBF_Corr e SFFTBB_Corr e</span>
<span style="color: #75715e;">' deve essere preceduto da una chiamata alla Sub SFFTBI_Corr.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Algoritmo tratto da: "Theory and Application of Digital</span>
<span style="color: #75715e;">' Signal Processing" di L. Rabiner e B. Gold. - pg. 403</span>
<span style="color: #75715e;">' e corretto con le equazioni di "Digital Time Series Analysis"</span>
<span style="color: #75715e;">' di R. K. Otnes, L. Enochson. - pg. 247, 248.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Ver. 18/10/2005 modificata per AudioCardDSP.</span>
<span style="color: #75715e;">' Ver. 22/05/2007 con SFFTBF_Corr e SFFTBB_Corr.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">r&,</span> <span style="color: #f8f8f2;">NBytes&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">dd1#(),</span> <span style="color: #f8f8f2;">dd2#()</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">Corr#(),</span> <span style="color: #f8f8f2;">LNorm#</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I dati devono avere media zero?</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">bNoCC</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">dd1()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">EliminaCC(D1())</span>
<span style="color: #f8f8f2;">dd2()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">EliminaCC(D2())</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #f8f8f2;">dd1()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1()</span>
<span style="color: #f8f8f2;">dd2()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D2()</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">dd1(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #75715e;">' Aggiungo zeri per avere una potenza di 2.</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">dd2(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #75715e;">' Aggiungo zeri per avere una potenza di 2.</span>
<span style="color: #75715e;">' Sposto i valori per comporre</span>
<span style="color: #75715e;">' opportunamente il secondo segnale</span>
<span style="color: #75715e;">' ritardato di N1_C campioni:</span>
<span style="color: #f8f8f2;">MoveMemory</span> <span style="color: #f8f8f2;">dd2(N1_C),</span> <span style="color: #f8f8f2;">dd2(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N2_C</span>
<span style="color: #f8f8f2;">ZeroMemory</span> <span style="color: #f8f8f2;">dd2(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N1_C</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo le FFT dei segnali:</span>
<span style="color: #f8f8f2;">SFFTBF_Corr</span> <span style="color: #f8f8f2;">dd1(),</span> <span style="color: #f8f8f2;">Re1_C(),</span> <span style="color: #f8f8f2;">Im1_C()</span>
<span style="color: #f8f8f2;">SFFTBF_Corr</span> <span style="color: #f8f8f2;">dd2(),</span> <span style="color: #f8f8f2;">Re2_C(),</span> <span style="color: #f8f8f2;">Im2_C()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Moltiplico la seconda trasformata</span>
<span style="color: #75715e;">' per la coniugata della prima:</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">r</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFre_C</span>
<span style="color: #f8f8f2;">s(r)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(Re1_C(r)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Re2_C(r)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Im1_C(r)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Im2_C(r))</span> <span style="color: #75715e;">' Parte reale.</span>
<span style="color: #f8f8f2;">f(r)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(Re1_C(r)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Im2_C(r)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Re2_C(r)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Im1_C(r))</span> <span style="color: #75715e;">' Parte immaginaria.</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">r</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo l' antitrasformata, corrispondente</span>
<span style="color: #75715e;">' alla funzione di mutua correlazione:</span>
<span style="color: #f8f8f2;">SFFTBB_Corr</span> <span style="color: #f8f8f2;">s(),</span> <span style="color: #f8f8f2;">f(),</span> <span style="color: #f8f8f2;">dd1()</span> <span style="color: #75715e;">' Uso dd1() come vettore d' appoggio.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Sistemo i valori nell' ordine dei ritardi:</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Corr(R1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">R2)</span> <span style="color: #75715e;">' Uso Corr() come vettore d' appoggio.</span>
<span style="color: #f8f8f2;">NBytes</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(R2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #75715e;">' I valori > N1_C + N2_C - 1 sono nulli e/o simmetrici.</span>
<span style="color: #f8f8f2;">CopyMemory</span> <span style="color: #f8f8f2;">Corr(R1),</span> <span style="color: #f8f8f2;">dd1(N1_C</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">R1),</span> <span style="color: #f8f8f2;">NBytes</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">bUnbiased</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #75715e;">' Correzione dei valori della mutua</span>
<span style="color: #75715e;">' correlazione con 1 / (N - |r|):</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">r</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">R2</span>
<span style="color: #75715e;">' LNorm = MIN0(N1_C + R, N2_C) - MAX0(0, R):</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(N1_C</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">r</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N2_C)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">LNorm</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(N1_C</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">r)</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #f8f8f2;">LNorm</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(N2_C)</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">0</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">r)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #f8f8f2;">LNorm</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">LNorm</span> <span style="color: #f92672;">-</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(r)</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Corr(r)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Corr(r)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">LNorm</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">r</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #75715e;">' Correzione dei valori della mutua</span>
<span style="color: #75715e;">' correlazione con 1 / N:</span>
<span style="color: #75715e;">' LNorm = CDbl(MIN0(N1_C, N2_C)):</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(N1_C</span> <span style="color: #f92672;"><=</span> <span style="color: #f8f8f2;">N2_C)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">LNorm</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(N1_C)</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #f8f8f2;">LNorm</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(N2_C)</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">r</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">R2</span>
<span style="color: #f8f8f2;">Corr(r)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Corr(r)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">LNorm</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">r</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">MMutuaCorr_FT</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Corr()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">FFT_D2</span><span style="color: #f8f8f2;">(D1()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">D2()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f8f8f2;">R1()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">X1()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">R2()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">X2()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Definizioni:</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' FFT = Fast Fourier Transform.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Entra con:</span>
<span style="color: #75715e;">' D1() = Vettore dei dati Reali del primo Segnale(t).</span>
<span style="color: #75715e;">' D2() = Vettore dei dati Reali del secondo Segnale(t).</span>
<span style="color: #75715e;">' NVAL = Numero max. dei dati in D1(), D2() da usare.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Esce con:</span>
<span style="color: #75715e;">' R1() = Vettore dei valori Reali della Trasformata(f) del primo segnale.</span>
<span style="color: #75715e;">' X1() = Vettore dei valori Immaginari della Trasformata(f) del primo segnale.</span>
<span style="color: #75715e;">' R2() = Vettore dei valori Reali della Trasformata(f) del secondo segnale.</span>
<span style="color: #75715e;">' X2() = Vettore dei valori Immaginari della Trasformata(f) del secondo segnale.</span>
<span style="color: #75715e;">' NVAL = Numero dei dati usati dalla Trasformata(f).</span>
<span style="color: #75715e;">' NFRE = Numero dei valori di Frequenza calcolati.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcola, contemporaneamente, le trasformate di due segnali</span>
<span style="color: #75715e;">' reali definiti in D1(0 To NVAL - 1) e D2(0 To NVAL - 1).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I valori delle Trasformate in R1(), X1(), R2(), X2() NON vengono</span>
<span style="color: #75715e;">' normalizzati sulla lunghezza del Segnale 2^M.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I vettori R1(), X1() e R2(), X2() sono dimensionati in questa routine.</span>
<span style="color: #75715e;">' Gli NN dati nei vettori sono organizzati come Vettore(0 To NN - 1).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Tradotta in Basic da: "Theory and Application of Digital</span>
<span style="color: #75715e;">' "Theory and Application of Digital Signal Processing"</span>
<span style="color: #75715e;">' di L. Rabiner e B. Gold. - pg. 367.</span>
<span style="color: #75715e;">' e con le formule di:</span>
<span style="color: #75715e;">' "Digital Time Series Analysis"</span>
<span style="color: #75715e;">' di R. Otnes e L. Enochson - pg. 175.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Ver. 18/10/2005 modificata per AudioCardDSP.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">M&,</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">NMN1&,</span> <span style="color: #f8f8f2;">NFRE&,</span> <span style="color: #f8f8f2;">J&,</span> <span style="color: #f8f8f2;">K&,</span> <span style="color: #f8f8f2;">L&,</span> <span style="color: #f8f8f2;">LE&,</span> <span style="color: #f8f8f2;">LE1&,</span> <span style="color: #f8f8f2;">IP&,</span> <span style="color: #f8f8f2;">JF&,</span> <span style="color: #f8f8f2;">NBytes&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">TSwap#,</span> <span style="color: #f8f8f2;">Ur#,</span> <span style="color: #f8f8f2;">Ui#,</span> <span style="color: #f8f8f2;">wr#,</span> <span style="color: #f8f8f2;">wi#,</span> <span style="color: #f8f8f2;">Tr#,</span> <span style="color: #f8f8f2;">Ti#</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">M</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Int(Log(</span><span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NVAL)</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">0.5</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Log2)</span>
<span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">M</span>
<span style="color: #f8f8f2;">NFRE</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">NMN1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Re#(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">Im#(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">R1(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">R2(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">X1(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">X2(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Compongo i vettori Re(), Im() da trasformare</span>
<span style="color: #75715e;">' con i dati reali in ingresso:</span>
<span style="color: #f8f8f2;">NBytes</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">NVAL</span>
<span style="color: #f8f8f2;">CopyMemory</span> <span style="color: #f8f8f2;">Re(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">D1(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">NBytes</span>
<span style="color: #f8f8f2;">CopyMemory</span> <span style="color: #f8f8f2;">Im(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">D2(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">NBytes</span>
<span style="color: #75715e;">' For I = 0 To NVAL - 1</span>
<span style="color: #75715e;">' Re(I) = D1(I)</span>
<span style="color: #75715e;">' Im(I) = D2(I)</span>
<span style="color: #75715e;">' Next I</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NMN1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(I</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">J)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #75715e;">' DSWAP Re(J), Re(I):</span>
<span style="color: #f8f8f2;">TSwap</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Re(J)</span>
<span style="color: #f8f8f2;">Re(J)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Re(I)</span>
<span style="color: #f8f8f2;">Re(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">TSwap</span>
<span style="color: #75715e;">' DSWAP Im(J), Im(I)</span>
<span style="color: #f8f8f2;">TSwap</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Im(J)</span>
<span style="color: #f8f8f2;">Im(J)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Im(I)</span>
<span style="color: #f8f8f2;">Im(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">TSwap</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NFRE</span>
<span style="color: #66d9ef;">Do</span> <span style="color: #66d9ef;">While</span> <span style="color: #f8f8f2;">(K</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">J)</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #66d9ef;">Loop</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">L</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">M</span>
<span style="color: #f8f8f2;">LE</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">L</span>
<span style="color: #f8f8f2;">LE1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">LE</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">Ur</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">Ui</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">wr</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Cos(PI</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">LE1)</span>
<span style="color: #f8f8f2;">wi</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sin(PI</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">LE1)</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">LE1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">J</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f8f8f2;">LE</span>
<span style="color: #f8f8f2;">IP</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">LE1</span>
<span style="color: #f8f8f2;">Tr</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Re(IP)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ur</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Im(IP)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ui</span>
<span style="color: #f8f8f2;">Ti</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Re(IP)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ui</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Im(IP)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ur</span>
<span style="color: #f8f8f2;">Re(IP)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Re(I)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Tr</span>
<span style="color: #f8f8f2;">Im(IP)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Im(I)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Ti</span>
<span style="color: #f8f8f2;">Re(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Re(I)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Tr</span>
<span style="color: #f8f8f2;">Im(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Im(I)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Ti</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #f8f8f2;">Tr</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ur</span>
<span style="color: #f8f8f2;">Ti</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ui</span>
<span style="color: #f8f8f2;">Ur</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Tr</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">wr</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Ti</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">wi</span>
<span style="color: #f8f8f2;">Ui</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Tr</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">wi</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Ti</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">wr</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">J</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">L</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo delle parti reali ed immaginarie delle trasformate:</span>
<span style="color: #f8f8f2;">R1(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Re(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span>
<span style="color: #f8f8f2;">X1(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">R2(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Im(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span>
<span style="color: #f8f8f2;">X2(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">JF</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">R1(JF)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(Re(JF)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Re(NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">JF))</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">X1(JF)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(Im(JF)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Im(NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">JF))</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">R2(JF)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(Im(JF)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Im(NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">JF))</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">X2(JF)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(Re(NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">JF)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Re(JF))</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">JF</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">IFFT</span><span style="color: #f8f8f2;">(r()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">X()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">Dr()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">dx()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Definizioni:</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' IFFT = Inverse Fast Fourier Transform.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Entra con:</span>
<span style="color: #75715e;">' R() = Vettore dei valori Reali della Trasformata(f).</span>
<span style="color: #75715e;">' X() = Vettore dei valori Immaginari della Trasformata(f).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Esce con:</span>
<span style="color: #75715e;">' Dr() = Vettore dei dati Reali del Segnale(t).</span>
<span style="color: #75715e;">' Dx() = Vettore dei dati Immaginari del Segnale(t).</span>
<span style="color: #75715e;">' NVAL = Numero dei dati usati per l' antitrasformata.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I vettori Dr(), Dx() sono dimensionati in questa routine.</span>
<span style="color: #75715e;">' Gli NN dati nei vettori sono organizzati come Vettore(0 To NN - 1).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Algoritmo tratto da: "Theory and Application of Digital</span>
<span style="color: #75715e;">' Signal Processing" di L. Rabiner e B. Gold. - pg. 371.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">NFRE&,</span> <span style="color: #f8f8f2;">M&,</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">NMN1&,</span> <span style="color: #f8f8f2;">J&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">K&,</span> <span style="color: #f8f8f2;">L&,</span> <span style="color: #f8f8f2;">LE&,</span> <span style="color: #f8f8f2;">LE1&,</span> <span style="color: #f8f8f2;">IP&,</span> <span style="color: #f8f8f2;">JF&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">Ur#,</span> <span style="color: #f8f8f2;">Ui#,</span> <span style="color: #f8f8f2;">wr#,</span> <span style="color: #f8f8f2;">wi#,</span> <span style="color: #f8f8f2;">Tr#,</span> <span style="color: #f8f8f2;">Ti#</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">UBound(r)</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">M</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Int(Log(</span><span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NVAL)</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">0.5</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Log2)</span>
<span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">M</span>
<span style="color: #f8f8f2;">NFRE</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">NMN1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Dr(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">dx(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">d(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Se non si vogliono sfruttare le proprieta'</span>
<span style="color: #75715e;">' "transform-in-place" di questa implementazione:</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">Dr(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">r(I)</span> <span style="color: #f92672;">/</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NVAL)</span>
<span style="color: #f8f8f2;">dx(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">X(I)</span> <span style="color: #f92672;">/</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NVAL)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NMN1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(I</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">J)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">DSWAP</span> <span style="color: #f8f8f2;">Dr(J),</span> <span style="color: #f8f8f2;">Dr(I)</span>
<span style="color: #f8f8f2;">DSWAP</span> <span style="color: #f8f8f2;">dx(J),</span> <span style="color: #f8f8f2;">dx(I)</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NFRE</span>
<span style="color: #66d9ef;">Do</span> <span style="color: #66d9ef;">While</span> <span style="color: #f8f8f2;">(K</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">J)</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #66d9ef;">Loop</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">L</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">M</span>
<span style="color: #f8f8f2;">LE</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">L</span>
<span style="color: #f8f8f2;">LE1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">LE</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">Ur</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">Ui</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">wr</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Cos(PI</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">LE1)</span>
<span style="color: #f8f8f2;">wi</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sin(PI</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">LE1)</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">LE1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">J</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f8f8f2;">LE</span>
<span style="color: #f8f8f2;">IP</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">LE1</span>
<span style="color: #f8f8f2;">Tr</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Dr(IP)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ur</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">dx(IP)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ui</span>
<span style="color: #f8f8f2;">Ti</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Dr(IP)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ui</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">dx(IP)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ur</span>
<span style="color: #f8f8f2;">Dr(IP)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Dr(I)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Tr</span>
<span style="color: #f8f8f2;">dx(IP)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">dx(I)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Ti</span>
<span style="color: #f8f8f2;">Dr(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Dr(I)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Tr</span>
<span style="color: #f8f8f2;">dx(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">dx(I)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Ti</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #f8f8f2;">Tr</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ur</span>
<span style="color: #f8f8f2;">Ti</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ui</span>
<span style="color: #f8f8f2;">Ur</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Tr</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">wr</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Ti</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">wi</span>
<span style="color: #f8f8f2;">Ui</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Tr</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">wi</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Ti</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">wr</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">J</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">L</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Function</span> <span style="color: #a6e22e;">MCorr</span><span style="color: #f8f8f2;">(D1()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">D2()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">R2</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">bUnbiased</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Boolean</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">False</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">bNoCC</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Boolean</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">False</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Espressione della mutua correlazione non circolare:</span>
<span style="color: #75715e;">' I2</span>
<span style="color: #75715e;">' MCorr(R) = (1 / (I2 - I1 + 1)) * Som(D1(I) * D2(I + R)) con: N1 = UBound(D1)</span>
<span style="color: #75715e;">' I=I1 " N2 = UBound(D2)</span>
<span style="color: #75715e;">' " -N1 <= R1 < R2</span>
<span style="color: #75715e;">' " R1 < R2 <= N2</span>
<span style="color: #75715e;">' " R1 <= R <= R2</span>
<span style="color: #75715e;">' " I1 = MAX(0, -R)</span>
<span style="color: #75715e;">' " I2 = MIN(N1, N2 - R)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Ritorna un vettore contenente la funzione di mutua correlazione</span>
<span style="color: #75715e;">' fra i dati in D1() e quelli in D2() calcolata su R1 --> R2 ritardi</span>
<span style="color: #75715e;">' [i.e. MCorr(R1 To R2)].</span>
<span style="color: #75715e;">' Il segnale D2() e' considerato finito e costituito da UBound(D2) + 1</span>
<span style="color: #75715e;">' campioni.</span>
<span style="color: #75715e;">' Se bUnbiased = True i valori della mutua correlazione vengono</span>
<span style="color: #75715e;">' corretti con 1 / (N - r).</span>
<span style="color: #75715e;">' Se bNoCC = True dai segnali viene eliminata la componente continua.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Il calcolo viene effettuato per convoluzione diretta</span>
<span style="color: #75715e;">' e corretto con le equazioni di "Digital Time Series Analysis"</span>
<span style="color: #75715e;">' di R. K. Otnes, L. Enochson. - pg. 247.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Ver. 16/10/2005 modificata per AudioCardDSP.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">I1&,</span> <span style="color: #f8f8f2;">I2&,</span> <span style="color: #f8f8f2;">N1&,</span> <span style="color: #f8f8f2;">N2&,</span> <span style="color: #f8f8f2;">r&</span> <span style="color: #75715e;">', R1&, R2&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">LNorm#,</span> <span style="color: #f8f8f2;">dd1#(),</span> <span style="color: #f8f8f2;">dd2#()</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">N1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">UBound(D1)</span>
<span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">UBound(D2)</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">RR#(R1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">R2)</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">MCorr(R1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">R2)</span>
<span style="color: #f8f8f2;">LNorm</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(MIN0(N1</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">))</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I dati devono avere media zero?</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">bNoCC</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">dd1()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">EliminaCC(D1())</span>
<span style="color: #f8f8f2;">dd2()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">EliminaCC(D2())</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #f8f8f2;">dd1()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1()</span>
<span style="color: #f8f8f2;">dd2()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D2()</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo la funzione di mutua correlazione:</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">r</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">R2</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">MAX0(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">r)</span>
<span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">MIN0(N1,</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">r)</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I2</span>
<span style="color: #f8f8f2;">RR(r)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">RR(r)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">dd1(I)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">dd2(I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">r)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">bUnbiased</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">RR(r)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">RR(r)</span> <span style="color: #f92672;">/</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(I2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #f8f8f2;">RR(r)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">RR(r)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">LNorm</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">r</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">MCorr</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">RR()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Function</span> <span style="color: #a6e22e;">IIR</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">VIn</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Single</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Single</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Funzione di filtrazione IIR dei segnali.</span>
<span style="color: #75715e;">' Devono essere state definite, precedentemente, le matrici</span>
<span style="color: #75715e;">' Ac(0 To NK, 1 To NCel) e Bc(0 To NK, 1 To NCel) contenenti</span>
<span style="color: #75715e;">' i coefficienti del filtro ed una matrice W(0 To NK, 1 To NCel)</span>
<span style="color: #75715e;">' da usare come registro a scorrimento dei campioni da filtrare.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Codice tradotto ed adattato dal FORTRAN di:</span>
<span style="color: #75715e;">' "Digital Filters and their Applications"</span>
<span style="color: #75715e;">' di V. Cappellini, A. G. Constantinides, P. Emiliani.</span>
<span style="color: #75715e;">' pg. 373.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Routine modificata per strumenti di misura.</span>
<span style="color: #75715e;">' -------------------------------------------</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">C&,</span> <span style="color: #f8f8f2;">K&,</span> <span style="color: #f8f8f2;">Y!</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Y</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">VIn</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">C</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel</span>
<span style="color: #f8f8f2;">w(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">C)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Y</span>
<span style="color: #f8f8f2;">Y</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">!</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NK</span> <span style="color: #66d9ef;">To</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">w(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">C)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">w(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">C)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Bc(K,</span> <span style="color: #f8f8f2;">C)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">w(K,</span> <span style="color: #f8f8f2;">C)</span>
<span style="color: #f8f8f2;">Y</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Y</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Ac(K,</span> <span style="color: #f8f8f2;">C)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">w(K,</span> <span style="color: #f8f8f2;">C)</span>
<span style="color: #f8f8f2;">w(K,</span> <span style="color: #f8f8f2;">C)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">w(K</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">C)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #f8f8f2;">Y</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Y</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Ac(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">C)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">w(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">C)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">C</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">IIR</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Y</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Function</span> <span style="color: #a6e22e;">FIR</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">VIn</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Single</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Single</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Funzione di filtrazione FIR dei segnali.</span>
<span style="color: #75715e;">' Devono essere stati definiti, precedentemente, un vettore</span>
<span style="color: #75715e;">' Hc(0 To NCoeff - 1) contenente gli NCoeff coefficienti del</span>
<span style="color: #75715e;">' filtro ed un vettore SRE(-1 To NCoeff - 1) da usare come</span>
<span style="color: #75715e;">' registro a scorrimento dei campioni da filtrare.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Codice tradotto ed adattato dal FORTRAN di:</span>
<span style="color: #75715e;">' "Digital Filters and their Applications"</span>
<span style="color: #75715e;">' di V. Cappellini, A. G. Constantinides, P. Emiliani.</span>
<span style="color: #75715e;">' pg. 371.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Routine modificata per strumenti di misura.</span>
<span style="color: #75715e;">' -------------------------------------------</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">K&,</span> <span style="color: #f8f8f2;">VOut!</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">SRE(</span><span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">VIn</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">UBound(SRE)</span> <span style="color: #66d9ef;">To</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">SRE(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">SRE(K</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #f8f8f2;">VOut</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">VOut</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">SRE(K)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Hc(K)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">FIR</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">VOut</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">SFFTBB</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">NFRE</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f8f8f2;">Re()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">Im()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">d()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' SFFTBB( X, N, MM, S1, C1, S3, C3, ITAB )</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' A real-valued, in place, split-radix IFFT program</span>
<span style="color: #75715e;">' Hermitian symmetric input and real output in array X</span>
<span style="color: #75715e;">' Length is N = 2 ** MM</span>
<span style="color: #75715e;">' Decimation-in-frequency, cos/sin in second loop with table look-up</span>
<span style="color: #75715e;">' Input order:</span>
<span style="color: #75715e;">' [ Re(0), Re(1), ..., Re(N/2), Im(N/2-1), ..., Im(1) ]</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' S1 - array of sin() table (length >= N/8-1)</span>
<span style="color: #75715e;">' C1 - array of cos() table (length >= N/8-1)</span>
<span style="color: #75715e;">' S3 - array of sin() table (length >= N/8-1)</span>
<span style="color: #75715e;">' C3 - array of cos() table (length >= N/8-1)</span>
<span style="color: #75715e;">' ITAB - integer bit reversal table (length >= sqrt(2n) )</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' The initialization routine SFFTBI must be called prior to calling</span>
<span style="color: #75715e;">' this routine. SFFTBI need not be called again unless N changes.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Original code (IRVFFT) written by H.V. Sorensen,</span>
<span style="color: #75715e;">' Rice University, Oct. 1985</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Modifications made by Steve Kifowit, 26 June 1997</span>
<span style="color: #75715e;">' -- table look-up of sines and cosines</span>
<span style="color: #75715e;">' -- incorporation of bit reversal table</span>
<span style="color: #75715e;">' -- quick return</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Tradotta dal FORTRAN e modificata da F. Languasco 15/10/2005.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Entra con:</span>
<span style="color: #75715e;">' N = Numero max. di dati in D() da calcolare.</span>
<span style="color: #75715e;">' NFRE = Numero dei valori di Frequenza nei vettori Re() e Im().</span>
<span style="color: #75715e;">' Re() = Vettore dei valori Reali della Trasformata(f).</span>
<span style="color: #75715e;">' Im() = Vettore dei valori Immaginari della Trasformata(f).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Esce con:</span>
<span style="color: #75715e;">' D() = Vettore dei valori Reali del Segnale(t), ridimensionato</span>
<span style="color: #75715e;">' in questa routine.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Gli NFRE + 1 dati nei vettori Re() e Im() sono organizzati come</span>
<span style="color: #75715e;">' Vettore(0 To NFRE); gli N dati nel vettore D() sono organizzati</span>
<span style="color: #75715e;">' come D(0 To N - 1).</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">J&,</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">K&,</span> <span style="color: #f8f8f2;">Ic&,</span> <span style="color: #f8f8f2;">ID&,</span> <span style="color: #f8f8f2;">I0&,</span> <span style="color: #f8f8f2;">I1&,</span> <span style="color: #f8f8f2;">I2&,</span> <span style="color: #f8f8f2;">I3&,</span> <span style="color: #f8f8f2;">I4&,</span> <span style="color: #f8f8f2;">I5&,</span> <span style="color: #f8f8f2;">I6&,</span> <span style="color: #f8f8f2;">I7&,</span> <span style="color: #f8f8f2;">I8&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">N1&,</span> <span style="color: #f8f8f2;">N2&,</span> <span style="color: #f8f8f2;">N4&,</span> <span style="color: #f8f8f2;">N8&,</span> <span style="color: #f8f8f2;">NN&,</span> <span style="color: #f8f8f2;">It&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">XT#,</span> <span style="color: #f8f8f2;">R1#,</span> <span style="color: #f8f8f2;">t1#,</span> <span style="color: #f8f8f2;">T2#,</span> <span style="color: #f8f8f2;">T3#,</span> <span style="color: #f8f8f2;">T4#,</span> <span style="color: #f8f8f2;">T5#</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">CC1#,</span> <span style="color: #f8f8f2;">SS1#,</span> <span style="color: #f8f8f2;">CC3#,</span> <span style="color: #f8f8f2;">SS3#</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">d#(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(N</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">Exit</span> <span style="color: #66d9ef;">Sub</span>
<span style="background-color: #1e0010; color: #960050;">'</span>
<span style="color: #75715e;">' Sistemo i valori dei vettori Re(), Im() in D1():</span>
<span style="color: #75715e;">' For I = 0 To NFre</span>
<span style="color: #75715e;">' D1(I + 1) = Re(I)</span>
<span style="color: #75715e;">' Next I</span>
<span style="color: #f8f8f2;">CopyMemory</span> <span style="color: #f8f8f2;">D1(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">Re(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(NFRE</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFRE</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">D1(N</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Im(I)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N</span>
<span style="color: #f8f8f2;">NN</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">MM</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N2</span>
<span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">N4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">4</span>
<span style="color: #f8f8f2;">N8</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N4</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #ae81ff;">17</span> <span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ic</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1(I3)</span>
<span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1(I3)</span>
<span style="color: #f8f8f2;">D1(I2)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">D1(I2)</span>
<span style="color: #f8f8f2;">D1(I3)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">D1(I4)</span>
<span style="color: #f8f8f2;">D1(I4)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">D1(I4)</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(N4</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">15</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(D1(I2)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1(I1))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Sqr2</span>
<span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(D1(I4)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1(I3))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Sqr2</span>
<span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1(I2)</span>
<span style="color: #f8f8f2;">D1(I2)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I4)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1(I3)</span>
<span style="color: #f8f8f2;">D1(I3)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(</span><span style="color: #f92672;">-</span><span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">t1)</span>
<span style="color: #f8f8f2;">D1(I4)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(</span><span style="color: #f92672;">-</span><span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">t1)</span>
<span style="color: #ae81ff;">15</span> <span style="color: #75715e;">' CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">N2</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Ic</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">17</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">It</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(J</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">NN</span>
<span style="color: #f8f8f2;">CC1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">C1(It)</span>
<span style="color: #f8f8f2;">SS1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">S1(It)</span>
<span style="color: #f8f8f2;">CC3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">C3(It)</span>
<span style="color: #f8f8f2;">SS3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">S3(It)</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N2</span>
<span style="color: #ae81ff;">40</span> <span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ic</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">J</span>
<span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I5</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">I6</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I5</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I7</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I6</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I8</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I7</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1(I6)</span>
<span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1(I6)</span>
<span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I5)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1(I2)</span>
<span style="color: #f8f8f2;">D1(I5)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I2)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1(I5)</span>
<span style="color: #f8f8f2;">T3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I8)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1(I3)</span>
<span style="color: #f8f8f2;">D1(I6)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I8)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1(I3)</span>
<span style="color: #f8f8f2;">T4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I4)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1(I7)</span>
<span style="color: #f8f8f2;">D1(I2)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I4)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1(I7)</span>
<span style="color: #f8f8f2;">T5</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T4</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T4</span>
<span style="color: #f8f8f2;">T4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T3</span>
<span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T3</span>
<span style="color: #f8f8f2;">D1(I3)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T5</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS1</span>
<span style="color: #f8f8f2;">D1(I7)</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">T4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T5</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS1</span>
<span style="color: #f8f8f2;">D1(I4)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC3</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS3</span>
<span style="color: #f8f8f2;">D1(I8)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS3</span>
<span style="color: #ae81ff;">30</span> <span style="color: #75715e;">' CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">N2</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Ic</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">40</span>
<span style="color: #ae81ff;">20</span> <span style="color: #75715e;">' CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">J</span>
<span style="color: #f8f8f2;">NN</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">NN</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span>
<span style="color: #ae81ff;">70</span> <span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ic</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I0)</span>
<span style="color: #f8f8f2;">D1(I0)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1(I1)</span>
<span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1(I1)</span>
<span style="color: #ae81ff;">60</span> <span style="color: #75715e;">' CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I0</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Ic</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">70</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">N1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">ITAB(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N1</span>
<span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ITAB(K)</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I0</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">It</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">ITAB(K)</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">XT</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I)</span>
<span style="color: #f8f8f2;">D1(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(J)</span>
<span style="color: #f8f8f2;">D1(J)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">XT</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N1</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">ITAB(It)</span>
<span style="color: #ae81ff;">101</span> <span style="color: #75715e;">' CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">It</span>
<span style="color: #ae81ff;">100</span> <span style="color: #75715e;">' CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span>
<span style="color: #f8f8f2;">D1(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">N</span>
<span style="color: #ae81ff;">99</span> <span style="color: #75715e;">' CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Sposto i dati calcolati nel vettore D():</span>
<span style="color: #f8f8f2;">CopyMemory</span> <span style="color: #f8f8f2;">d(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">D1(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' ... End of subroutine SFFTBB ...</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">SFFTBB_Corr</span><span style="color: #f8f8f2;">(Re_C()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">Im_C()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">d()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' SFFTBB( X, N_C, MM_C, S1_C, C1_C, S3_C, C3_C, ITAB_C )</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' A real-valued, in place, split-radix IFFT program</span>
<span style="color: #75715e;">' Hermitian symmetric input and real output in array X</span>
<span style="color: #75715e;">' Length is N_C = 2 ** MM_C</span>
<span style="color: #75715e;">' Decimation-in-frequency, cos/sin in second loop with table look-up</span>
<span style="color: #75715e;">' Input order:</span>
<span style="color: #75715e;">' [ Re_C(0), Re_C(1), ..., Re_C(N_C/2), Im_C(N_C/2-1), ..., Im_C(1) ]</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' S1_C - array of sin() table (length >= N_C/8-1)</span>
<span style="color: #75715e;">' C1_C - array of cos() table (length >= N_C/8-1)</span>
<span style="color: #75715e;">' S3_C - array of sin() table (length >= N_C/8-1)</span>
<span style="color: #75715e;">' C3_C - array of cos() table (length >= N_C/8-1)</span>
<span style="color: #75715e;">' ITAB_C - integer bit reversal table (length >= sqrt(2n) )</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' The initialization routine SFFTBI_Corr must be called prior to calling</span>
<span style="color: #75715e;">' this routine. SFFTBI_Corr need not be called again unless N1_C or</span>
<span style="color: #75715e;">' N2_C change.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Original code (IRVFFT) written by H.V. Sorensen,</span>
<span style="color: #75715e;">' Rice University, Oct. 1985</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Modifications made by Steve Kifowit, 26 June 1997</span>
<span style="color: #75715e;">' -- table look-up of sines and cosines</span>
<span style="color: #75715e;">' -- incorporation of bit reversal table</span>
<span style="color: #75715e;">' -- quick return</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Tradotta dal FORTRAN e modificata da F. Languasco 15/10/2005.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Entra con:</span>
<span style="color: #75715e;">' N_C = Numero max. di dati in D() da calcolare.</span>
<span style="color: #75715e;">' NFre_C = Numero dei valori di Frequenza nei vettori Re_C() e Im_C().</span>
<span style="color: #75715e;">' Re_C() = Vettore dei valori Reali della Trasformata(f).</span>
<span style="color: #75715e;">' Im_C() = Vettore dei valori Immaginari della Trasformata(f).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Esce con:</span>
<span style="color: #75715e;">' D() = Vettore dei valori Reali del Segnale(t), ridimensionato</span>
<span style="color: #75715e;">' in questa routine.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Gli NFre_C + 1 dati nei vettori Re_C() e Im_C() sono organizzati come</span>
<span style="color: #75715e;">' Vettore(0 To NFre_C); gli N_C dati nel vettore D() sono organizzati</span>
<span style="color: #75715e;">' come D(0 To N_C - 1).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Ver: 22/05/2007 per MAutoCorr_FT e MMutuaCorr_FT.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">J&,</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">K&,</span> <span style="color: #f8f8f2;">Ic&,</span> <span style="color: #f8f8f2;">ID&,</span> <span style="color: #f8f8f2;">I0&,</span> <span style="color: #f8f8f2;">I1&,</span> <span style="color: #f8f8f2;">I2&,</span> <span style="color: #f8f8f2;">I3&,</span> <span style="color: #f8f8f2;">I4&,</span> <span style="color: #f8f8f2;">I5&,</span> <span style="color: #f8f8f2;">I6&,</span> <span style="color: #f8f8f2;">I7&,</span> <span style="color: #f8f8f2;">I8&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">N1&,</span> <span style="color: #f8f8f2;">N2&,</span> <span style="color: #f8f8f2;">N4&,</span> <span style="color: #f8f8f2;">N8&,</span> <span style="color: #f8f8f2;">NN&,</span> <span style="color: #f8f8f2;">It&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">XT#,</span> <span style="color: #f8f8f2;">R1#,</span> <span style="color: #f8f8f2;">t1#,</span> <span style="color: #f8f8f2;">T2#,</span> <span style="color: #f8f8f2;">T3#,</span> <span style="color: #f8f8f2;">T4#,</span> <span style="color: #f8f8f2;">T5#</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">CC1#,</span> <span style="color: #f8f8f2;">SS1#,</span> <span style="color: #f8f8f2;">CC3#,</span> <span style="color: #f8f8f2;">SS3#</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">d#(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(N_C</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">Exit</span> <span style="color: #66d9ef;">Sub</span>
<span style="background-color: #1e0010; color: #960050;">'</span>
<span style="color: #75715e;">' Sistemo i valori dei vettori Re_C(), Im_C() in D1_C():</span>
<span style="color: #f8f8f2;">CopyMemory</span> <span style="color: #f8f8f2;">D1_C(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">Re_C(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(NFre_C</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFre_C</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">D1_C(N_C</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Im_C(I)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N_C</span>
<span style="color: #f8f8f2;">NN</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">MM_C</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N2</span>
<span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">N4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">4</span>
<span style="color: #f8f8f2;">N8</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N4</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #ae81ff;">17</span> <span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ic</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1_C(I3)</span>
<span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1_C(I3)</span>
<span style="color: #f8f8f2;">D1_C(I2)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">D1_C(I2)</span>
<span style="color: #f8f8f2;">D1_C(I3)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">D1_C(I4)</span>
<span style="color: #f8f8f2;">D1_C(I4)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">D1_C(I4)</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(N4</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">15</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(D1_C(I2)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1_C(I1))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Sqr2</span>
<span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(D1_C(I4)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1_C(I3))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Sqr2</span>
<span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1_C(I2)</span>
<span style="color: #f8f8f2;">D1_C(I2)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I4)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1_C(I3)</span>
<span style="color: #f8f8f2;">D1_C(I3)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(</span><span style="color: #f92672;">-</span><span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">t1)</span>
<span style="color: #f8f8f2;">D1_C(I4)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(</span><span style="color: #f92672;">-</span><span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">t1)</span>
<span style="color: #ae81ff;">15</span> <span style="color: #75715e;">' CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">N2</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Ic</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">17</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">It</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(J</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">NN</span>
<span style="color: #f8f8f2;">CC1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">C1_C(It)</span>
<span style="color: #f8f8f2;">SS1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">S1_C(It)</span>
<span style="color: #f8f8f2;">CC3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">C3_C(It)</span>
<span style="color: #f8f8f2;">SS3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">S3_C(It)</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N2</span>
<span style="color: #ae81ff;">40</span> <span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ic</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">J</span>
<span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I5</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">I6</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I5</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I7</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I6</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I8</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I7</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1_C(I6)</span>
<span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1_C(I6)</span>
<span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I5)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1_C(I2)</span>
<span style="color: #f8f8f2;">D1_C(I5)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I2)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1_C(I5)</span>
<span style="color: #f8f8f2;">T3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I8)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1_C(I3)</span>
<span style="color: #f8f8f2;">D1_C(I6)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I8)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1_C(I3)</span>
<span style="color: #f8f8f2;">T4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I4)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1_C(I7)</span>
<span style="color: #f8f8f2;">D1_C(I2)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I4)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1_C(I7)</span>
<span style="color: #f8f8f2;">T5</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T4</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T4</span>
<span style="color: #f8f8f2;">T4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T3</span>
<span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T3</span>
<span style="color: #f8f8f2;">D1_C(I3)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T5</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS1</span>
<span style="color: #f8f8f2;">D1_C(I7)</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">T4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T5</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS1</span>
<span style="color: #f8f8f2;">D1_C(I4)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC3</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS3</span>
<span style="color: #f8f8f2;">D1_C(I8)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS3</span>
<span style="color: #ae81ff;">30</span> <span style="color: #75715e;">' CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">N2</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Ic</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">40</span>
<span style="color: #ae81ff;">20</span> <span style="color: #75715e;">' CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">J</span>
<span style="color: #f8f8f2;">NN</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">NN</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span>
<span style="color: #ae81ff;">70</span> <span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ic</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I0)</span>
<span style="color: #f8f8f2;">D1_C(I0)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1_C(I1)</span>
<span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1_C(I1)</span>
<span style="color: #ae81ff;">60</span> <span style="color: #75715e;">' CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I0</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Ic</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N_C)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">70</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">N1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">ITAB_C(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N1</span>
<span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ITAB_C(K)</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I0</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">It</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">ITAB_C(K)</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">XT</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I)</span>
<span style="color: #f8f8f2;">D1_C(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(J)</span>
<span style="color: #f8f8f2;">D1_C(J)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">XT</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N1</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">ITAB_C(It)</span>
<span style="color: #ae81ff;">101</span> <span style="color: #75715e;">' CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">It</span>
<span style="color: #ae81ff;">100</span> <span style="color: #75715e;">' CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C</span>
<span style="color: #f8f8f2;">D1_C(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">N_C</span>
<span style="color: #ae81ff;">99</span> <span style="color: #75715e;">' CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Sposto i dati calcolati nel vettore D():</span>
<span style="color: #f8f8f2;">CopyMemory</span> <span style="color: #f8f8f2;">d(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">D1_C(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N_C</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' ... End of subroutine SFFTBB ...</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Function</span> <span style="color: #a6e22e;">SintesiFIR_WM</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">Tipo$,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">NFilt</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">F1</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">F2</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">WNome$,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">Par</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Boolean</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Sintesi del filtro con Window Method.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Routine modificata per strumenti di misura.</span>
<span style="color: #75715e;">' -------------------------------------------</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Parametri in ingresso.</span>
<span style="color: #75715e;">' Tipo$: Tipo di filtro:</span>
<span style="color: #75715e;">' "Low Pass"</span>
<span style="color: #75715e;">' "High Pass"</span>
<span style="color: #75715e;">' "Band Pass"</span>
<span style="color: #75715e;">' "Band Stop"</span>
<span style="color: #75715e;">' "Differentiator"</span>
<span style="color: #75715e;">' "Hilbert Trans."</span>
<span style="color: #75715e;">' NFilt: Numero di Coefficienti del filtro.</span>
<span style="color: #75715e;">' F1: Prima Frequenza di Taglio (0 <= F1 < Fs/2).</span>
<span style="color: #75715e;">' F2: Seconda Frequenza di Taglio (F1 < F2 <= Fs/2).</span>
<span style="color: #75715e;">' WNome$: Nome del tipo di Window desiderato (vedi Function WinTipi()).</span>
<span style="color: #75715e;">' Par: Parametro per certi tipi di Windows.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I coefficienti del filtro vengono calcolati</span>
<span style="color: #75715e;">' nel vettore Hc(0 To NFilt - 1).</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">K&,</span> <span style="color: #f8f8f2;">KK&,</span> <span style="color: #f8f8f2;">NOdd&,</span> <span style="color: #f8f8f2;">NFilt1&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">AA#,</span> <span style="color: #f8f8f2;">Ak#,</span> <span style="color: #f8f8f2;">Af1#,</span> <span style="color: #f8f8f2;">Af2#,</span> <span style="color: #f8f8f2;">Den#</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Hc(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFilt</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">SRE(</span><span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFilt</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">On</span> <span style="color: #66d9ef;">Error</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #f8f8f2;">SintesiFIR_WM_ERR</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">NOdd</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NFilt</span> <span style="color: #f92672;">Mod</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">NFilt1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Int(NFilt</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span>
<span style="color: #f8f8f2;">AA</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.5</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NOdd))</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">WF()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">WinProf(WNome$,</span> <span style="color: #f8f8f2;">NFilt,</span> <span style="color: #f8f8f2;">Par)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Impulse response evaluation</span>
<span style="color: #75715e;">' ---------------------------</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">NOdd</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #66d9ef;">Select</span> <span style="color: #66d9ef;">Case</span> <span style="color: #f8f8f2;">Tipo$</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Low Pass"</span>
<span style="color: #f8f8f2;">Hc(NFilt1)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">F1</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"High Pass"</span>
<span style="color: #f8f8f2;">Hc(NFilt1)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">F1</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Band Pass"</span>
<span style="color: #f8f8f2;">Hc(NFilt1)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(F2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">F1)</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Band Stop"</span>
<span style="color: #f8f8f2;">Hc(NFilt1)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(F2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">F1)</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Differentiator"</span>
<span style="color: #f8f8f2;">Hc(NFilt1)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Hilbert Trans."</span>
<span style="color: #f8f8f2;">Hc(NFilt1)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Select</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFilt1</span>
<span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NFilt1</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #f8f8f2;">Ak</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(I)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">AA</span>
<span style="color: #f8f8f2;">Af1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ak</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">F1</span>
<span style="color: #f8f8f2;">Af2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ak</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">F2</span>
<span style="color: #f8f8f2;">Den</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ak</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Select</span> <span style="color: #66d9ef;">Case</span> <span style="color: #f8f8f2;">Tipo$</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Low Pass"</span>
<span style="color: #f8f8f2;">Hc(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sin(Af1)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Den</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"High Pass"</span>
<span style="color: #f8f8f2;">Hc(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(Sin(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ak)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Sin(Af1))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Den</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Band Pass"</span>
<span style="color: #f8f8f2;">Hc(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(Sin(Af2)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Sin(Af1))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Den</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Band Stop"</span>
<span style="color: #f8f8f2;">Hc(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(Sin(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ak)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Sin(Af2)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Sin(Af1))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Den</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Differentiator"</span>
<span style="color: #f8f8f2;">Hc(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">(Sin(Af1)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Af1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(Af1))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(Den</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Den)</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Hilbert Trans."</span>
<span style="color: #f8f8f2;">Hc(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">(Cos(Af1)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Cos(Af2))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Den</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Select</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Windowing:</span>
<span style="color: #f8f8f2;">Hc(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Hc(K)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">WF(K)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFilt1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">KK</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NFilt</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #f8f8f2;">Hc(KK)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Switch(Tipo$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Differentiator"</span><span style="color: #f8f8f2;">,</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">Hc(K),</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f8f8f2;">Tipo$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Hilbert Trans."</span><span style="color: #f8f8f2;">,</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">Hc(K),</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">True</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">Hc(K))</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">SintesiFIR_WM_ERR:</span>
<span style="color: #f8f8f2;">SintesiFIR_WM</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(Err.Number</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Err.Number</span> <span style="color: #f92672;"><></span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">M$</span>
<span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">FiltroErrFIR$</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span>
<span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">&</span> <span style="color: #e6db74;">"Errore "</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">Str$(Err.Number)</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span>
<span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">Err.Description</span>
<span style="color: #f8f8f2;">MsgBox</span> <span style="color: #f8f8f2;">M$,</span> <span style="color: #f8f8f2;">vbCritical,</span> <span style="color: #e6db74;">" modDSP: SintesiFIR_WM"</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Function</span> <span style="color: #a6e22e;">SintesiIIR_BT</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">Trans$,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">Proty$,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">FCt</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">FAt</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">Att</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">Rip</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">F1</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">F2</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">q</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">AttTot</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">Alfa</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Boolean</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Sintesi del filtro richiesto con il metodo</span>
<span style="color: #75715e;">' di Trasformazione Bilineare.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Routine modificata per strumenti di misura.</span>
<span style="color: #75715e;">' -------------------------------------------</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Parametri in ingresso.</span>
<span style="color: #75715e;">' Trans$: Tipo di Trasformazione richiesta:</span>
<span style="color: #75715e;">' "No Transformation" JBT = 0</span>
<span style="color: #75715e;">' "Low Pass -> Low Pass" JBT = 1</span>
<span style="color: #75715e;">' "Low Pass -> High Pass" JBT = 2</span>
<span style="color: #75715e;">' "Low Pass -> Band Pass" JBT = 3</span>
<span style="color: #75715e;">' "Low Pass -> Band Stop" JBT = 4</span>
<span style="color: #75715e;">' Filtri elementari:</span>
<span style="color: #75715e;">' "RC Type Low Pass Filter" JBT = 5</span>
<span style="color: #75715e;">' "RC Type High Pass Filter" JBT = 6</span>
<span style="color: #75715e;">' "Resonator" JBT = 7</span>
<span style="color: #75715e;">' "Notch Filter" JBT = 8</span>
<span style="color: #75715e;">' "U(t) = a·I(t) + (1-a)·U(t-1)" JBT = 9</span>
<span style="color: #75715e;">' Proty$: Tipo di prototipo Passa Basso:</span>
<span style="color: #75715e;">' "Butterworth"</span>
<span style="color: #75715e;">' "Chebyshev"</span>
<span style="color: #75715e;">' FCt: Frequenza di taglio (con atten. di -3 dB)</span>
<span style="color: #75715e;">' o di risonanza (solo per JBT = 7 e JBT = 8).</span>
<span style="color: #75715e;">' FAt: Per JBT < 5 e' la frequenza alla quale</span>
<span style="color: #75715e;">' l' attenuazione deve essere di almeno Att# dB.</span>
<span style="color: #75715e;">' Att: Attenuazione desiderata in [dB] alla frequenza FAt#.</span>
<span style="color: #75715e;">' Rip: Ondulazione in Banda Passante espressa come</span>
<span style="color: #75715e;">' percentuale del guadagno (solo per Chebyshev).</span>
<span style="color: #75715e;">' F1: Prima frequenza di taglio dopo la trasformazione.</span>
<span style="color: #75715e;">' F2: Seconda frequenza di taglio dopo la trasformazione.</span>
<span style="color: #75715e;">' Q: Solo per JBT = 7 e JBT = 8, e' il Q del risonatore.</span>
<span style="color: #75715e;">' Alfa: Alfa dato per filtro JBT = 9; per specificare, invece,</span>
<span style="color: #75715e;">' la FCt passare Alfa = -1.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Parametri in uscita</span>
<span style="color: #75715e;">' AttTot: Attenuazione ottenuta in [dB] alla frequenza FAt#.</span>
<span style="color: #75715e;">' FCt: Frequenza di taglio ottenuta per filtro JBT = 9 con Alfa dato.</span>
<span style="color: #75715e;">' Alfa: Alfa ottenuto per filtro JBT = 9 con FCt dato.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I coefficienti del filtro vengono calcolati nelle</span>
<span style="color: #75715e;">' matrici Ac(0 To NK, 1 To NCel) e Bc(0 To NK, 1 To NCel)</span>
<span style="color: #75715e;">' con NK = ordine del filtro e NCel = numero di sezioni.</span>
<span style="color: #75715e;">' In questa versione viene anche dimensionata la matrice</span>
<span style="color: #75715e;">' W() dei registri delle sezioni del filtro.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">N&,</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">K&,</span> <span style="color: #f8f8f2;">NC&,</span> <span style="color: #f8f8f2;">M$</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">Om#,</span> <span style="color: #f8f8f2;">Cm#,</span> <span style="color: #f8f8f2;">a#,</span> <span style="color: #f8f8f2;">A0#,</span> <span style="color: #f8f8f2;">A1#,</span> <span style="color: #f8f8f2;">A2#,</span> <span style="color: #f8f8f2;">B0#,</span> <span style="color: #f8f8f2;">B1#,</span> <span style="color: #f8f8f2;">B2#</span> <span style="color: #75715e;">' Variabili per filtri elementari.</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">f#,</span> <span style="color: #f8f8f2;">FF#,</span> <span style="color: #f8f8f2;">FCTA#,</span> <span style="color: #f8f8f2;">FATA#,</span> <span style="color: #f8f8f2;">Eps#,</span> <span style="color: #f8f8f2;">ATL#,</span> <span style="color: #f8f8f2;">res#</span> <span style="color: #75715e;">' Variabili per</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">AB#,</span> <span style="color: #f8f8f2;">AT#,</span> <span style="color: #f8f8f2;">Bt#,</span> <span style="color: #f8f8f2;">TETAP#,</span> <span style="color: #f8f8f2;">P1#,</span> <span style="color: #f8f8f2;">P2#,</span> <span style="color: #f8f8f2;">P3#</span> <span style="color: #75715e;">' filtri di tipo</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">CAPPA#,</span> <span style="color: #f8f8f2;">COSTA#,</span> <span style="color: #f8f8f2;">TOT#,</span> <span style="color: #f8f8f2;">CC#,</span> <span style="color: #f8f8f2;">AL#,</span> <span style="color: #f8f8f2;">Rn#</span> <span style="color: #75715e;">' Butterworth e Chebyshev.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">On</span> <span style="color: #66d9ef;">Error</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #f8f8f2;">SintesiIIR_BT_ERR</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'-- Filtri elementari ------------------------------------------------------------------</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Trans$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"RC Type Low Pass Filter"</span><span style="color: #f8f8f2;">)</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">Or</span> <span style="color: #f8f8f2;">(Trans$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"RC Type High Pass Filter"</span><span style="color: #f8f8f2;">)</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">Or</span> <span style="color: #f8f8f2;">(Trans$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"U(t) = a·I(t) + (1-a)·U(t-1)"</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #75715e;">' Calcolo di tipi di filtro elementari del 1° ordine.</span>
<span style="color: #75715e;">' Vedi Sub zNote:</span>
<span style="color: #f8f8f2;">Om</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">FCt</span> <span style="color: #75715e;">' Pulsazione di taglio [rad/s].</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Select</span> <span style="color: #66d9ef;">Case</span> <span style="color: #f8f8f2;">Trans$</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"RC Type Low Pass Filter"</span>
<span style="color: #f8f8f2;">Cm</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Om</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Tan(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">FCt)</span> <span style="color: #75715e;">' Costante di mappatura.</span>
<span style="color: #f8f8f2;">a</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Cm</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Om</span>
<span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">a</span>
<span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">a</span>
<span style="color: #f8f8f2;">B0</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">B1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Cm</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Om)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">a</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"RC Type High Pass Filter"</span>
<span style="color: #f8f8f2;">Cm</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Om</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Tan(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">FCt)</span> <span style="color: #75715e;">' Costante di mappatura.</span>
<span style="color: #f8f8f2;">a</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Cm</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Om</span>
<span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(Cm</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Om)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">a</span>
<span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">(Cm</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Om)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">a</span>
<span style="color: #f8f8f2;">B0</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">B1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Cm</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Om)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">a</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"U(t) = a·I(t) + (1-a)·U(t-1)"</span>
<span style="color: #75715e;">' a := Alfa</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Alfa</span> <span style="color: #f92672;"><</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #75715e;">' E' data FCt; calcola Alfa per avere la FCt voluta:</span>
<span style="color: #f8f8f2;">Alfa</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Cos(Om)</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Sqr(Cos(Om)</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">4</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(Om)</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">3</span><span style="color: #f8f8f2;">#)</span>
<span style="color: #66d9ef;">ElseIf</span> <span style="color: #f8f8f2;">(Alfa</span> <span style="color: #f92672;"><</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(Sqr2</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#))</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #75715e;">' E' data Alfa; calcola la FCt (se < 0.5) corrispondente:</span>
<span style="color: #f8f8f2;">Om</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Acos(((Alfa</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Alfa</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Alfa</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#))</span>
<span style="color: #f8f8f2;">FCt</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Om</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">PI2</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Alfa</span>
<span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">B0</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">B1</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Alfa)</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Select</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">NCel</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">NK</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Ac(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NK,</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel)</span> <span style="color: #75715e;">' Coefficienti del filtro</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Bc(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NK,</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel)</span> <span style="color: #75715e;">' calcolati in Doppia Precisione.</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">w(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NK,</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel)</span>
<span style="color: #f8f8f2;">Ac(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A0</span>
<span style="color: #f8f8f2;">Ac(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A1</span>
<span style="color: #f8f8f2;">Bc(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">B0</span>
<span style="color: #f8f8f2;">Bc(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">B1</span>
<span style="color: #f8f8f2;">AttTot</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">GoTo</span> <span style="color: #f8f8f2;">SintesiIIR_BT_End</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">ElseIf</span> <span style="color: #f8f8f2;">(Trans$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Resonator"</span><span style="color: #f8f8f2;">)</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">Or</span> <span style="color: #f8f8f2;">(Trans$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Notch Filter"</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #75715e;">' Calcolo di tipi di filtro elementari del 2° ordine.</span>
<span style="color: #75715e;">' Vedi Sub zNote:</span>
<span style="color: #f8f8f2;">Om</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">FCt</span> <span style="color: #75715e;">' Pulsazione di risonanza [rad/s].</span>
<span style="color: #f8f8f2;">Cm</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Om</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Tan(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">FCt)</span> <span style="color: #75715e;">' Costante di mappatura.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcola i poli:</span>
<span style="color: #f8f8f2;">a</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Cm</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(q</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Om)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">(Cm</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Om</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span>
<span style="color: #f8f8f2;">B0</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">B1</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Cm</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Om</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">a</span>
<span style="color: #f8f8f2;">B2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Cm</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(q</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Om)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">(Cm</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Om</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">a</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Select</span> <span style="color: #66d9ef;">Case</span> <span style="color: #f8f8f2;">Trans$</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Resonator"</span>
<span style="color: #75715e;">' Mette due zeri reali a ± 1:</span>
<span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Cm</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">a</span>
<span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">A2</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">Cm</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">a</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Notch Filter"</span>
<span style="color: #75715e;">' Mette una coppia di zeri complessi coniugati:</span>
<span style="color: #f8f8f2;">Rn</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sqr(B2)</span>
<span style="color: #75715e;">' TETAP = Acos(-B1 / (2# * Rn))</span>
<span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">B1</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Rn</span> <span style="color: #75715e;">' -2 * Cos(TETAP)</span>
<span style="color: #f8f8f2;">A2</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #75715e;">' Cos(TETAP) ^ 2 + Sin(TETAP) ^ 2</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Select</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">NCel</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">NK</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Ac(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NK,</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel)</span> <span style="color: #75715e;">' Coefficienti del filtro</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Bc(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NK,</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel)</span> <span style="color: #75715e;">' calcolati in Doppia Precisione.</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">w(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NK,</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel)</span>
<span style="color: #f8f8f2;">Ac(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A0</span>
<span style="color: #f8f8f2;">Ac(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A1</span>
<span style="color: #f8f8f2;">Ac(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A2</span>
<span style="color: #f8f8f2;">Bc(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">B0</span>
<span style="color: #f8f8f2;">Bc(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">B1</span>
<span style="color: #f8f8f2;">Bc(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">B2</span>
<span style="color: #f8f8f2;">AttTot</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">GoTo</span> <span style="color: #f8f8f2;">SintesiIIR_BT_End</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'-- Filtri Butterworth e Chebyshev -----------------------------------------------------</span>
<span style="color: #f8f8f2;">FCTA</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Tan(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">FCt)</span>
<span style="color: #f8f8f2;">FATA</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Tan(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">FAt)</span>
<span style="color: #f8f8f2;">FF</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">FATA</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">FCTA</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Proty$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Chebyshev"</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #f8f8f2;">Eps</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sqr(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Rip</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">100</span><span style="color: #f8f8f2;">#)</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#)</span>
<span style="color: #f8f8f2;">ATL</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">10</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">(Att</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">10</span><span style="color: #f8f8f2;">#)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' COMPUTATION OF THE ORDER OF THE FILTER.</span>
<span style="color: #75715e;">' ---------------------------------------</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #66d9ef;">Do</span>
<span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">Select</span> <span style="color: #66d9ef;">Case</span> <span style="color: #f8f8f2;">Proty$</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Butterworth"</span>
<span style="color: #f8f8f2;">res#</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">FF</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N))</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Chebyshev"</span>
<span style="color: #f8f8f2;">CEB(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">CEB(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">FF</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">f</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">FF</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">FF</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span>
<span style="color: #f8f8f2;">CEB(I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">f</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CEB(I)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">CEB#(I</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #f8f8f2;">res</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">(Eps</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CEB(N</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">))</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Select</span>
<span style="color: #66d9ef;">Loop</span> <span style="color: #66d9ef;">While</span> <span style="color: #f8f8f2;">res</span> <span style="color: #f92672;">>=</span> <span style="color: #f8f8f2;">ATL</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">((N</span> <span style="color: #f92672;">Mod</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">Select</span> <span style="color: #66d9ef;">Case</span> <span style="color: #f8f8f2;">Proty$</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Butterworth"</span>
<span style="color: #f8f8f2;">res</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">FF</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N))</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Chebyshev"</span>
<span style="color: #f8f8f2;">CEB(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">CEB(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">FF</span>
<span style="color: #f8f8f2;">f</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">FF</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">FF</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span>
<span style="color: #f8f8f2;">CEB(I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">f</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CEB(I)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">CEB(I</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #f8f8f2;">res</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">(Eps</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CEB(N</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">))</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Select</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">NCMax</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"**** ERRORE ****"</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span>
<span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span> <span style="color: #f92672;">&</span> <span style="color: #e6db74;">"Per ottenere il filtro richiesto"</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span>
<span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">&</span> <span style="color: #e6db74;">"si devono usare "</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">Str$(N</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">&</span> <span style="color: #e6db74;">" Sezioni."</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span>
<span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">&</span> <span style="color: #e6db74;">"Il numero Massimo e' "</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">Str$(NCMax)</span> <span style="color: #f92672;">&</span> <span style="color: #e6db74;">"."</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span>
<span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span> <span style="color: #f92672;">&</span> <span style="color: #e6db74;">"Provare a variare i dati del filtro."</span>
<span style="color: #f8f8f2;">MsgBox</span> <span style="color: #f8f8f2;">M$,</span> <span style="color: #f8f8f2;">vbCritical,</span> <span style="color: #e6db74;">" modDSP: Sintesi IIR"</span>
<span style="color: #f8f8f2;">SintesiIIR_BT</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">False</span>
<span style="color: #f8f8f2;">DoEvents</span>
<span style="color: #66d9ef;">Exit</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #a6e22e;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">AttTot</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">10</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Log(res)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Log10</span>
<span style="color: #f8f8f2;">NCel</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">NK</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Switch(Trans$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"No Transformation"</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f8f8f2;">Trans$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Low Pass -> Low Pass"</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f8f8f2;">Trans$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Low Pass -> High Pass"</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f8f8f2;">Trans$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Low Pass -> Band Pass"</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">4</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f8f8f2;">Trans$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Low Pass -> Band Stop"</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">4</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Ac(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NK,</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel)</span> <span style="color: #75715e;">' Coefficienti del filtro.</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Bc(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NK,</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel)</span> <span style="color: #75715e;">' Calcolati in Doppia Precisione.</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">POLRE(</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel)</span> <span style="color: #75715e;">' Vettori in uso durante la Sintesi.</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">POLIM(</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel)</span> <span style="color: #75715e;">' " " " "</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">w(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NK,</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' POLE POSITION EVALUATION.</span>
<span style="color: #75715e;">' -------------------------</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">AT</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">FCTA</span>
<span style="color: #f8f8f2;">Bt</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">FCTA</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Proty$</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Chebyshev"</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">AB</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">((</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Sqr(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Eps</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Eps)</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">N)</span>
<span style="color: #f8f8f2;">AT</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(AB</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">AB)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">AT</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">Bt</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(AB</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">AB)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Bt</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">NC</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel</span>
<span style="color: #f8f8f2;">TETAP</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">PI#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">NC</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N)</span>
<span style="color: #f8f8f2;">POLRE(NC)</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">AT</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(TETAP)</span>
<span style="color: #f8f8f2;">POLIM(NC)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Bt</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Sin(TETAP)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">NC</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">NC</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel</span>
<span style="color: #f8f8f2;">P1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">POLIM(NC)</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">P2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">POLRE(NC))</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">P3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">POLRE(NC)</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">POLRE(NC)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">P3</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">P1)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(P2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">P1)</span>
<span style="color: #f8f8f2;">POLIM(NC)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">POLIM(NC))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(P2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">P1)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">NC</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' EVALUATION OF THE SECOND ORDER SECTION COEFFICIENTS.</span>
<span style="color: #75715e;">' ----------------------------------------------------</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">NC</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel</span>
<span style="color: #f8f8f2;">Bc(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">Bc(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">POLRE(NC)</span>
<span style="color: #f8f8f2;">Bc(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">POLRE(NC)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">POLRE(NC)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">POLIM(NC)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">POLIM(NC)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">NC</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Select</span> <span style="color: #66d9ef;">Case</span> <span style="color: #f8f8f2;">Proty$</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Butterworth"</span>
<span style="color: #f8f8f2;">COSTA</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Chebyshev"</span>
<span style="color: #f8f8f2;">COSTA</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Rip</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">100</span><span style="color: #f8f8f2;">#)</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NCel)</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Select</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">NC</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel</span>
<span style="color: #f8f8f2;">TOT</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(Bc(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Bc(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Bc(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">NC))</span>
<span style="color: #f8f8f2;">CC</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">TOT</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">COSTA</span>
<span style="color: #f8f8f2;">Ac(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">CC</span>
<span style="color: #f8f8f2;">Ac(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">CC</span>
<span style="color: #f8f8f2;">Ac(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">CC</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">NC</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' FREQUENCY TRANSFORMATION.</span>
<span style="color: #75715e;">' -------------------------</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Select</span> <span style="color: #66d9ef;">Case</span> <span style="color: #f8f8f2;">Trans$</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"No Transformation"</span>
<span style="color: #66d9ef;">GoTo</span> <span style="color: #f8f8f2;">SintesiIIR_BT_End</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Low Pass -> Low Pass"</span>
<span style="color: #f8f8f2;">AL</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sin(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(FCt</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">F1))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Sin(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(FCt</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">F1))</span>
<span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">AL</span>
<span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">A2</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">B0</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A1</span>
<span style="color: #f8f8f2;">B1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A0</span>
<span style="color: #f8f8f2;">B2</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Low Pass -> High Pass"</span>
<span style="color: #f8f8f2;">AL</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">Cos(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(FCt</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">F1))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Cos(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(FCt</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">F1))</span>
<span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">AL</span>
<span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">A2</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">B0</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">A1</span>
<span style="color: #f8f8f2;">B1</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">A0</span>
<span style="color: #f8f8f2;">B2</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Low Pass -> Band Pass"</span>
<span style="color: #f8f8f2;">AL</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Cos(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(F2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">F1))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Cos(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(F2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">F1))</span>
<span style="color: #f8f8f2;">CAPPA</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Tan(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">FCt)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Tan(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(F2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">F1))</span>
<span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">(CAPPA</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(CAPPA</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#)</span>
<span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">AL</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CAPPA#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(CAPPA</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#)</span>
<span style="color: #f8f8f2;">A2</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">B0</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">A2</span>
<span style="color: #f8f8f2;">B1</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">A1</span>
<span style="color: #f8f8f2;">B2</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">A0</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Low Pass -> Band Stop"</span>
<span style="color: #f8f8f2;">AL</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Cos(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(F2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">F1))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Cos(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(F2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">F1))</span>
<span style="color: #f8f8f2;">CAPPA</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Tan(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">FCt)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Tan(PI</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(F2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">F1))</span>
<span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">CAPPA)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">CAPPA)</span>
<span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">AL</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">CAPPA)</span>
<span style="color: #f8f8f2;">A2</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">B0</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A2</span>
<span style="color: #f8f8f2;">B1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A1</span>
<span style="color: #f8f8f2;">B2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A0</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Select</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">AN(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">B0</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B0</span>
<span style="color: #f8f8f2;">AN(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B0</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B1</span>
<span style="color: #f8f8f2;">AN(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">B1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B1</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B0</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B2</span>
<span style="color: #f8f8f2;">AN(</span><span style="color: #ae81ff;">3</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B2</span>
<span style="color: #f8f8f2;">AN(</span><span style="color: #ae81ff;">4</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">B2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B2</span>
<span style="color: #f8f8f2;">AN(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B0</span>
<span style="color: #f8f8f2;">AN(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B0</span>
<span style="color: #f8f8f2;">AN(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">A2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B0</span>
<span style="color: #f8f8f2;">AN(</span><span style="color: #ae81ff;">3</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">A2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B1</span>
<span style="color: #f8f8f2;">AN(</span><span style="color: #ae81ff;">4</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">B2</span>
<span style="color: #f8f8f2;">AN(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">A0</span>
<span style="color: #f8f8f2;">AN(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">A1</span>
<span style="color: #f8f8f2;">AN(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">A2</span>
<span style="color: #f8f8f2;">AN(</span><span style="color: #ae81ff;">3</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">A2</span>
<span style="color: #f8f8f2;">AN(</span><span style="color: #ae81ff;">4</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">A2</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">NC</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">FINA(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ac(K,</span> <span style="color: #f8f8f2;">NC)</span>
<span style="color: #f8f8f2;">FINB(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Bc(K,</span> <span style="color: #f8f8f2;">NC)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NK</span>
<span style="color: #f8f8f2;">Ac(K,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">Bc(K,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">Ac(K,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">AN(K,</span> <span style="color: #f8f8f2;">I)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">FINA(I)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Ac(K,</span> <span style="color: #f8f8f2;">NC)</span>
<span style="color: #f8f8f2;">Bc(K,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">AN(K,</span> <span style="color: #f8f8f2;">I)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">FINB(I)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Bc(K,</span> <span style="color: #f8f8f2;">NC)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">NC</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">NC</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NCel</span>
<span style="color: #f8f8f2;">Rn</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Bc(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">NC)</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NK</span>
<span style="color: #f8f8f2;">Ac(K,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ac(K,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Rn</span>
<span style="color: #f8f8f2;">Bc(K,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Bc(K,</span> <span style="color: #f8f8f2;">NC)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Rn</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">NC</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">SintesiIIR_BT_End:</span>
<span style="color: #f8f8f2;">SintesiIIR_BT_ERR:</span>
<span style="color: #f8f8f2;">SintesiIIR_BT</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(Err.Number</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Err.Number</span> <span style="color: #f92672;"><></span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">FiltroErrIIR$</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span>
<span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">&</span> <span style="color: #e6db74;">"Errore "</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">Str$(Err.Number)</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">vbNewLine</span>
<span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">M$</span> <span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">Err.Description</span>
<span style="color: #f8f8f2;">MsgBox</span> <span style="color: #f8f8f2;">M$,</span> <span style="color: #f8f8f2;">vbCritical,</span> <span style="color: #e6db74;">" modDSP: SintesiIIR_BT"</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">zNote</span><span style="color: #f8f8f2;">()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Metodi di calcolo dei filtri elementari.</span>
<span style="color: #75715e;">' - Algoritmi di trasformazione da "Digital Signal Processing"</span>
<span style="color: #75715e;">' di W. D. Stanley - pg. 172, 173, 174.</span>
<span style="color: #75715e;">' - La funzione di trasferimento del risuonatore reale parallelo</span>
<span style="color: #75715e;">' e' tratta da "Teoria delle Reti Elettriche", Appunti dai</span>
<span style="color: #75715e;">' corsi del Politecnico di Torino - pg. (1.3)1 e seg.</span>
<span style="color: #75715e;">' - L' idea della sostituzione degli zeri per il "Notch Filter"</span>
<span style="color: #75715e;">' proviene da: http://www-users.cs.york.ac.uk/~fisher/mkfilter/res.html</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'---------------------------------------------------------------------------------------</span>
<span style="color: #75715e;">' "RC Type Low Pass Filter":</span>
<span style="color: #75715e;">' La funzione di trasferimento e':</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' U(p) 1 con:</span>
<span style="color: #75715e;">' ---- = ----------- Fc = 1/(2*PI*RC) frequenza di taglio a -3 dB [Hz].</span>
<span style="color: #75715e;">' I(p) 1 + RC*p C, R capacita' e resistenza</span>
<span style="color: #75715e;">' del circuito.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Le formule di trasformazione (1) da:</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' A0 + A1*p 1</span>
<span style="color: #75715e;">' G(p) = --------- --> -------------------</span>
<span style="color: #75715e;">' B0 + B1*p 1 + (1/(2*PI*Fc))*p</span>
<span style="color: #75715e;">' a:</span>
<span style="color: #75715e;">' -1</span>
<span style="color: #75715e;">' a0 + a1*z</span>
<span style="color: #75715e;">' H(z) = -----------</span>
<span style="color: #75715e;">' -1</span>
<span style="color: #75715e;">' 1 + b1*z</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' sono: con:</span>
<span style="color: #75715e;">' Cm = 2*PI*FCt/Tan(2*PI*FCt/2) FCt = Fc/Fs --> 0 <= FCt <= 0.5</span>
<span style="color: #75715e;">' A = B0 + B1*Cm A0 = 1</span>
<span style="color: #75715e;">' a0 = (A0 + A1*Cm)/A A1 = 0</span>
<span style="color: #75715e;">' a1 = (A0 - A1*Cm)/A B0 = 1</span>
<span style="color: #75715e;">' b1 = (B0 - B1*Cm)/A B1 = 1/(2*PI*FCt)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'---------------------------------------------------------------------------------------</span>
<span style="color: #75715e;">' "RC Type High Pass Filter":</span>
<span style="color: #75715e;">' La funzione di trasferimento e':</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' U(p) RCp con:</span>
<span style="color: #75715e;">' ---- = ----------- Fc = 1/(2*PI*RC) frequenza di taglio a -3 dB [Hz].</span>
<span style="color: #75715e;">' I(p) 1 + RC*p C, R capacita' e resistenza</span>
<span style="color: #75715e;">' del circuito.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' si usano le formule di trasformazione (1) con:</span>
<span style="color: #75715e;">' FCt = Fc/Fs --> 0 <= FCt <= 0.5</span>
<span style="color: #75715e;">' A0 = 0</span>
<span style="color: #75715e;">' A1 = 1/(2*PI*FCt)</span>
<span style="color: #75715e;">' B0 = 1</span>
<span style="color: #75715e;">' B1 = 1/(2*PI*FCt)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'---------------------------------------------------------------------------------------</span>
<span style="color: #75715e;">' "Resonator":</span>
<span style="color: #75715e;">' La funzione di trasferimento e':</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' U(p) P con:</span>
<span style="color: #75715e;">' ---- = --------------------------------- Oc = 1/Sqr(L*C) pulsazione di risonanza [rad/s].</span>
<span style="color: #75715e;">' I(P) 1 + (1/(Q*Oc))*P + (1/(Oc^2))*P^2 Fc = Oc/(2*PI) frequenza di risonanza [Hz].</span>
<span style="color: #75715e;">' L, C, Rp induttanza, capacita' e</span>
<span style="color: #75715e;">' resistenza in parallelo</span>
<span style="color: #75715e;">' del circuito risonante.</span>
<span style="color: #75715e;">' Q = Oc*Rp*C coefficiente di risonanza.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Le formule di trasformazione (2) da:</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' A0 + A1*p + A2*p^2 p</span>
<span style="color: #75715e;">' G(p) = ------------------ --> ---------------------------------</span>
<span style="color: #75715e;">' B0 + B1*p + B2*p^2 1 + (1/(Q*Oc))*P + (1/(Oc^2))*P^2</span>
<span style="color: #75715e;">' a:</span>
<span style="color: #75715e;">' -1 -2</span>
<span style="color: #75715e;">' a0 + a1*z + a2*z</span>
<span style="color: #75715e;">' H(z) = ------------------</span>
<span style="color: #75715e;">' -1 -2</span>
<span style="color: #75715e;">' 1 + b1*z + b2*z</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' sono: con:</span>
<span style="color: #75715e;">' Cm = 2*PI*FCt/Tan(2*PI*FCt/2) FCt = Fc/Fs --> 0 <= FCt <= 0.5</span>
<span style="color: #75715e;">' A = B0 + B1*Cm + B2*Cm^2 A0 = 0</span>
<span style="color: #75715e;">' a0 = (A0 + A1*Cm + A2*Cm^2)/A A1 = 1</span>
<span style="color: #75715e;">' a1 = (2*A0 - 2*A2*Cm^2)/A A2 = 0</span>
<span style="color: #75715e;">' a2 = (A0 - A1*Cm + A2*Cm^2)/A B0 = 1</span>
<span style="color: #75715e;">' b1 = (2*B0 - 2*B2*Cm^2)/A B1 = 1/(2*PI*FCt*Q)</span>
<span style="color: #75715e;">' b2 = (B0 - B1*Cm + B2*Cm^2)/A B2 = 1/(2*PI*FCt)^2</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'---------------------------------------------------------------------------------------</span>
<span style="color: #75715e;">' "Notch Filter":</span>
<span style="color: #75715e;">' L' algoritmo precedente costruisce una funzione di trasferimento H(z) avente</span>
<span style="color: #75715e;">' una coppia di zeri reali a ± 1; questo consente di avere guadagno zero alle</span>
<span style="color: #75715e;">' basse ed alle alte frequenze.</span>
<span style="color: #75715e;">' Il "Notch Filter" viene ricavato dal "Resonator" sostituendo questa coppia di</span>
<span style="color: #75715e;">' zeri reali con due zeri complessi coniugati, giacenti sul cerchio unitario e</span>
<span style="color: #75715e;">' con argomento uguale a quello dei poli (anch' essi complessi coniugati).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Se Zp = r*Exp(± i*Theta) sono i poli di H(z), gli zeri devono essere:</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Zz = Exp(± i*Theta)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Viene usata la relazione:</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' -1 -1</span>
<span style="color: #75715e;">' (1 - r*Exp(+i*Theta)*z )*(1 - r*Exp(-i*Theta)*z ) =</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' -1 2 -2 -1 -2</span>
<span style="color: #75715e;">' = 1 - 2*r*Cos(Theta)*z + r * z = 1 + b1*z + b2*z (i = Sqr(-1))</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' da cui:</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' r = Sqr(b2)</span>
<span style="color: #75715e;">' Theta = Acos(-b1/(2*Sqr(b2))</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' e quindi:</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' -1 -2 -1 -2</span>
<span style="color: #75715e;">' a0 + a1*z + a2*z = 1 + (b1/(2*Sqr(b2))*z + z</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'---------------------------------------------------------------------------------------</span>
<span style="color: #75715e;">' "U(t) = a·I(t) + (1-a)·U(t-1)"</span>
<span style="color: #75715e;">' La funzione di trasferimento e':</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' a</span>
<span style="color: #75715e;">' H(z) = ----------------</span>
<span style="color: #75715e;">' -1</span>
<span style="color: #75715e;">' 1 - (1 - a)*z</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Usando, invertite, le formule di trasformazione (1) si ha:</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' a*Cm - a*p</span>
<span style="color: #75715e;">' G(p) = --------------- con: Cm = Oc/Tan(Oc/2)</span>
<span style="color: #75715e;">' a*Cm + (2 - a)*p Oc = 2*PI*Fc</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' La pulsazione di taglio Oc si ha per:</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' |a*Cm - a*i*Oc| 1</span>
<span style="color: #75715e;">' ----------------------- = ------ con: p = i*Oc</span>
<span style="color: #75715e;">' |a*Cm + (2 - a)*i*Oc| Sqr(2) i = Sqr(-1)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' da cui si ricava il valore di a necessario per</span>
<span style="color: #75715e;">' ottenere la frequenza di taglio FCt voluta:</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' a = Cos(Oc) - 1 + Sqr(Cos(Oc)^2 - 4*Cos(Oc) + 3) sempre con: Oc = 2*PI*FCt</span>
<span style="color: #75715e;">' FCt = Fc/Fs</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Se invece viene dato a, si ottiene una FCt corrispondente:</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' FCt = Acos(((a^2) + 2*a - 2)/(2*a - 2))/(2*PI) solo per: a < 2*(Sqr(2) - 1)</span>
<span style="color: #75715e;">' e: FCt < 0.5</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">DFT</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">NVAL&,</span> <span style="color: #f8f8f2;">d()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">r()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">X()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f8f8f2;">s()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">f()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">NFRE&)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Definizioni:</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' DFT = Discrete Fourier Transform.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Entra con:</span>
<span style="color: #75715e;">' NVAL = Numero max. dei dati in D() da usare.</span>
<span style="color: #75715e;">' D() = Vettore dei dati Reali del Segnale(t).</span>
<span style="color: #75715e;">' NFRE = Numero dei valori di Frequenza calcolati.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Esce con:</span>
<span style="color: #75715e;">' R() = Vettore dei valori Reali della Trasformata(f).</span>
<span style="color: #75715e;">' X() = Vettore dei valori Immaginari della Trasformata(f).</span>
<span style="color: #75715e;">' S() = Vettore dello Spettro di Amp. della Trasformata(f).</span>
<span style="color: #75715e;">' F() = Vettore delle Fasi della Trasformata(f) [rad].</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I valori della trasformata in R(), X() NON vengono</span>
<span style="color: #75715e;">' normalizzati sulla lunghezza del Segnale NVAL.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Gli NVAL dati nel vettore D() sono organizzati come D(0 To NVAL - 1).</span>
<span style="color: #75715e;">' Gli NFRE dati nei vettori R(), X(), S() e F() sono organizzati come Vettore(0 To NFRE).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Viene calcolata in R(0 To NFRE), X(0 To NFRE) solo la prima</span>
<span style="color: #75715e;">' meta' dello spettro per i valori di frequenza NFRE = NVAL/2</span>
<span style="color: #75715e;">' piu' la Componente Continua in R(0).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Algoritmi tratti da: "Digital Time Series Analysis" di R. Otnes</span>
<span style="color: #75715e;">' e L. Enochson - pg. 138. Nessun tentativo e' stato fatto per</span>
<span style="color: #75715e;">' migliorare la velocita' di esecuzione (tipo look-up table e/o</span>
<span style="color: #75715e;">' valutazione ricorsiva delle funzioni trigonometriche).</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">JF&,</span> <span style="color: #f8f8f2;">JD&,</span> <span style="color: #f8f8f2;">PI2_V#,</span> <span style="color: #f8f8f2;">Omega#,</span> <span style="color: #f8f8f2;">OmT#,</span> <span style="color: #f8f8f2;">NFRE_D#</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'NFRE = Int(NVAL / 2)</span>
<span style="color: #f8f8f2;">NFRE_D</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NVAL)</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">PI2_V</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">/</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NVAL)</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">JF</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFRE</span>
<span style="color: #f8f8f2;">Omega</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">PI2_V</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(JF)</span>
<span style="color: #f8f8f2;">r(JF)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">X(JF)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">JD</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">OmT</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Omega</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(JD)</span>
<span style="color: #f8f8f2;">r(JF)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">r(JF)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">d(JD)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(OmT)</span>
<span style="color: #f8f8f2;">X(JF)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">X(JF)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">d(JD)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Sin(OmT)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">JD</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">JF</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo dello Spettro di Ampiezza e delle Fasi:</span>
<span style="color: #f8f8f2;">s(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Abs(r(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">))</span> <span style="color: #f92672;">/</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NVAL)</span>
<span style="color: #f8f8f2;">f(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">IIf(r(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;"><</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#,</span> <span style="color: #f8f8f2;">PI,</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#)</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">JF</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFRE</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">s(JF)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sqr(r(JF)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">r(JF)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">X(JF)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">X(JF))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NFRE_D</span>
<span style="color: #f8f8f2;">f(JF)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">DATAN2(</span><span style="color: #f92672;">-</span><span style="color: #f8f8f2;">X(JF),</span> <span style="color: #f8f8f2;">r(JF))</span> <span style="color: #75715e;">' Scala da -PI a +PI.</span>
<span style="color: #75715e;">'F(JF) = Atan2(-X(JF), R(JF)) ' Scala da 0 a +2PI.</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">JF</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(NVAL</span> <span style="color: #f92672;">Mod</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">s(NFRE)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Abs(r(NFRE))</span> <span style="color: #f92672;">/</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NVAL)</span>
<span style="color: #f8f8f2;">f(NFRE)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">IIf(r(NFRE)</span> <span style="color: #f92672;"><</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#,</span> <span style="color: #f8f8f2;">PI,</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#)</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #f8f8f2;">s(NFRE)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sqr(r(NFRE)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">r(NFRE)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">X(NFRE)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">X(NFRE))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NFRE_D</span>
<span style="color: #f8f8f2;">f(NFRE)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">DATAN2(</span><span style="color: #f92672;">-</span><span style="color: #f8f8f2;">X(NFRE),</span> <span style="color: #f8f8f2;">r(NFRE))</span> <span style="color: #75715e;">' Scala da -PI a +PI.</span>
<span style="color: #75715e;">'F(NFre) = Atan2(-X(NFre), R(NFre)) ' Scala da 0 a +2PI.</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">FFT</span><span style="color: #f8f8f2;">(d()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">r()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">X()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f8f8f2;">s()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">f()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">NFRE</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Definizioni:</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' FFT = Fast Fourier Transform.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Entra con:</span>
<span style="color: #75715e;">' D() = Vettore dei dati Reali del Segnale(t).</span>
<span style="color: #75715e;">' NVAL = Numero max. dei dati in D() da usare.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Esce con:</span>
<span style="color: #75715e;">' R() = Vettore dei valori Reali della Trasformata(f).</span>
<span style="color: #75715e;">' X() = Vettore dei valori Immaginari della Trasformata(f).</span>
<span style="color: #75715e;">' S() = Vettore dello Spettro di Amp. della Trasformata(f).</span>
<span style="color: #75715e;">' F() = Vettore delle Fasi della Trasformata(f) [Radianti].</span>
<span style="color: #75715e;">' NVAL = Numero dei dati usati dalla Trasformata(f).</span>
<span style="color: #75715e;">' NFRE = Numero dei valori di Frequenza calcolati.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I valori della Trasformata in R(), X() NON vengono</span>
<span style="color: #75715e;">' normalizzati sulla lunghezza del Segnale 2^M.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I vettori R(), X(), S() e F() sono dimensionati in questa routine.</span>
<span style="color: #75715e;">' Gli NN dati nei vettori sono organizzati come Vettore(0 To NN - 1).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Tradotta in Basic da: "Theory and Application of Digital</span>
<span style="color: #75715e;">' Signal Processing" di L. Rabiner e B. Gold. - pg. 367.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Ver. 18/10/2005 modificata per AudioCardDSP.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">M&,</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">NMN1&,</span> <span style="color: #f8f8f2;">J&,</span> <span style="color: #f8f8f2;">K&,</span> <span style="color: #f8f8f2;">L&,</span> <span style="color: #f8f8f2;">LE&,</span> <span style="color: #f8f8f2;">LE1&,</span> <span style="color: #f8f8f2;">IP&,</span> <span style="color: #f8f8f2;">JF&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">TSwap#,</span> <span style="color: #f8f8f2;">Ur#,</span> <span style="color: #f8f8f2;">Ui#,</span> <span style="color: #f8f8f2;">wr#,</span> <span style="color: #f8f8f2;">wi#,</span> <span style="color: #f8f8f2;">Tr#,</span> <span style="color: #f8f8f2;">Ti#</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">M</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Int(Log(</span><span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NVAL)</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">0.5</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Log2)</span>
<span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">M</span>
<span style="color: #f8f8f2;">NFRE</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">NMN1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">r(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">X(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">s(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFRE),</span> <span style="color: #f8f8f2;">f(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFRE)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Solo per segnali di ingresso reali e se non si vogliono</span>
<span style="color: #75715e;">' sfruttare le proprieta' "transform-in-place" di questa</span>
<span style="color: #75715e;">' implementazione:</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">r(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">d(I)</span>
<span style="color: #f8f8f2;">X(I)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span> <span style="color: #75715e;">' Per segnali di ingresso complessi</span>
<span style="color: #75715e;">' mettere la componente immaginaria.</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NMN1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(I</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">J)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #75715e;">' dSwap R(J), R(I):</span>
<span style="color: #f8f8f2;">TSwap</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">r(J)</span>
<span style="color: #f8f8f2;">r(J)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">r(I)</span>
<span style="color: #f8f8f2;">r(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">TSwap</span>
<span style="color: #75715e;">'dSwap X(J), X(I) ' Solo per segnali complessi.</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NFRE</span>
<span style="color: #66d9ef;">Do</span> <span style="color: #66d9ef;">While</span> <span style="color: #f8f8f2;">(K</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">J)</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #66d9ef;">Loop</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">L</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">M</span>
<span style="color: #f8f8f2;">LE</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">L</span>
<span style="color: #f8f8f2;">LE1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">LE</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">Ur</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">Ui</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">wr</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Cos(PI</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">LE1)</span>
<span style="color: #f8f8f2;">wi</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sin(PI</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">LE1)</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">LE1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">J</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NVAL</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f8f8f2;">LE</span>
<span style="color: #f8f8f2;">IP</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">LE1</span>
<span style="color: #f8f8f2;">Tr</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">r(IP)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ur</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">X(IP)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ui</span>
<span style="color: #f8f8f2;">Ti</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">r(IP)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ui</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">X(IP)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ur</span>
<span style="color: #f8f8f2;">r(IP)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">r(I)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Tr</span>
<span style="color: #f8f8f2;">X(IP)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">X(I)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Ti</span>
<span style="color: #f8f8f2;">r(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">r(I)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Tr</span>
<span style="color: #f8f8f2;">X(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">X(I)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Ti</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #f8f8f2;">Tr</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ur</span>
<span style="color: #f8f8f2;">Ti</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ui</span>
<span style="color: #f8f8f2;">Ur</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Tr</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">wr</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Ti</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">wi</span>
<span style="color: #f8f8f2;">Ui</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Tr</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">wi</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">Ti</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">wr</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">J</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">L</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo dello Spettro di Ampiezza e delle Fasi:</span>
<span style="color: #f8f8f2;">s(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Abs(r(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NVAL</span>
<span style="color: #f8f8f2;">f(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">IIf(r(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;"><</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#,</span> <span style="color: #f8f8f2;">PI,</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#)</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">JF</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFRE</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">s(JF)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sqr(r(JF)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">r(JF)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">X(JF)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">X(JF))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NFRE</span>
<span style="color: #f8f8f2;">f(JF)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">DATAN2(</span><span style="color: #f92672;">-</span><span style="color: #f8f8f2;">X(JF),</span> <span style="color: #f8f8f2;">r(JF))</span> <span style="color: #75715e;">' Scala da -PI a +PI.</span>
<span style="color: #75715e;">'F(JF) = Atan2(-X(JF), R(JF)) ' Scala da 0 a +2PI.</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">JF</span>
<span style="color: #f8f8f2;">s(NFRE)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Abs(r(NFRE))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NVAL</span>
<span style="color: #f8f8f2;">f(NFRE)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">IIf(r(NFRE)</span> <span style="color: #f92672;"><</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#,</span> <span style="color: #f8f8f2;">PI,</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Function</span> <span style="color: #a6e22e;">WinProf</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">WNome$,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">NWind&,</span> <span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">Par</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcola e ritorna un vettore con i coefficienti della Window richiesta.</span>
<span style="color: #75715e;">' WNome$: nome della Window richiesta.</span>
<span style="color: #75715e;">' NWind: N° di coefficienti richiesto.</span>
<span style="color: #75715e;">' Par: parametro richiesto per certi tipi di Window.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">K&,</span> <span style="color: #f8f8f2;">KK&,</span> <span style="color: #f8f8f2;">NOdd&,</span> <span style="color: #f8f8f2;">NWind1&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">BB#,</span> <span style="color: #f8f8f2;">AA#,</span> <span style="color: #f8f8f2;">Ak#,</span> <span style="color: #f8f8f2;">Arg#,</span> <span style="color: #f8f8f2;">ArgL#,</span> <span style="color: #f8f8f2;">ArgW#,</span> <span style="color: #f8f8f2;">NWind_1#</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">WF_I#(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">NOdd</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NWind</span> <span style="color: #f92672;">Mod</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Int(NWind</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(NOdd</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #f8f8f2;">WF_I(NWind1)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">NWind_1</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NWind</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">AA</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.5</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NOdd))</span>
<span style="color: #f8f8f2;">BB</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NWind1)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">AA</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo la prima meta' del vettore:</span>
<span style="color: #66d9ef;">Select</span> <span style="color: #66d9ef;">Case</span> <span style="color: #f8f8f2;">WNome$</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Bartlett"</span>
<span style="color: #75715e;">' Zero valued end-points:</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">((NWind_1</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Abs(K</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">(NWind_1</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#)))</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Bartlett-Hann"</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.62</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">0.48</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(Abs((K</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">0.5</span><span style="color: #f8f8f2;">))</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">-</span> <span style="color: #ae81ff;">0.38</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Blackman"</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.42</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">-</span> <span style="color: #ae81ff;">0.5</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">+</span> <span style="color: #ae81ff;">0.08</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Blackman-Harris"</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.35875</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">-</span> <span style="color: #ae81ff;">0.48829</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">+</span> <span style="color: #ae81ff;">0.14128</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">-</span> <span style="color: #ae81ff;">0.01168</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(</span><span style="color: #ae81ff;">3</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Blackman-Nuttal"</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.3635819</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">-</span> <span style="color: #ae81ff;">0.4891775</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">+</span> <span style="color: #ae81ff;">0.1365995</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">-</span> <span style="color: #ae81ff;">0.0106411</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(</span><span style="color: #ae81ff;">3</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Flat top"</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.21557895</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">-</span> <span style="color: #ae81ff;">0.41663158</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">+</span> <span style="color: #ae81ff;">0.2772631</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">-</span> <span style="color: #ae81ff;">0.083578947</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(</span><span style="color: #ae81ff;">3</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">+</span> <span style="color: #ae81ff;">0.006947368</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(</span><span style="color: #ae81ff;">4</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Gauss"</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Exp(</span><span style="color: #f92672;">-</span><span style="color: #ae81ff;">0.5</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">((K</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">NWind_1</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(Par</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">NWind_1</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">))</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Hamming generalizzata"</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Par</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Par)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Hamming"</span>
<span style="color: #75715e;">' E' l' "Hamming generalizzata" con Par = 0.54:</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.54</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">0.46</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Hanning"</span>
<span style="color: #75715e;">' E' l' "Hamming generalizzata" con Par = 0.5:</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.5</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">0.5</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Kaiser"</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">Ak</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Par</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Sqr(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">((</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#)</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I0_Kaiser(Ak)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">I0_Kaiser(Par)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Lanczos"</span>
<span style="color: #f8f8f2;">ArgL</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">PI</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">BB</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">Ak</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">K)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">AA</span>
<span style="color: #f8f8f2;">Arg</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">ArgL</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ak</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Abs(Sin(Arg)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Arg)</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">Par</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Nuttal"</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.355768</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">-</span> <span style="color: #ae81ff;">0.487396</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">+</span> <span style="color: #ae81ff;">0.144232</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #f92672;">-</span> <span style="color: #ae81ff;">0.012604</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Cos(</span><span style="color: #ae81ff;">3</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(K)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind_1)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Rettangolare"</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Triangolare"</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'WF_I(K) = CDbl(K) / CDbl(NWind1)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Non-zero end-points:</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">NWind)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">((NWind</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">Abs(K</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">(NWind_1</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#)))</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Weber"</span>
<span style="color: #f8f8f2;">ArgW</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1.5</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Par</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">BB</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">Ak</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">K)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">AA</span>
<span style="color: #f8f8f2;">Arg</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">ArgW</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Ak</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Arg</span> <span style="color: #f92672;"><=</span> <span style="color: #ae81ff;">0.75</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">A0</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">A1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Arg</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">A2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Arg</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">A3</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Arg</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">3</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">B0</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">B1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Arg</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">B2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Arg</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">B3</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Arg</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">3</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Case</span> <span style="color: #e6db74;">"Welch"</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WF_I(K)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">((K</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">NWind_1</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#)</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">(NWind_1</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#))</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Select</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Completo il vettore</span>
<span style="color: #75715e;">' con la seconda meta':</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NWind1</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">KK</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NWind</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #f8f8f2;">WF_I(KK)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">WF_I(K)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">WinProf</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">WF_I()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #66d9ef;">Private</span> <span style="color: #66d9ef;">Function</span> <span style="color: #a6e22e;">I0_Kaiser</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">X</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcola e ritorna la funzione di Bessel modificata del primo</span>
<span style="color: #75715e;">' tipo e di ordine zero per 0 <= X <= 20. N e' il numero</span>
<span style="color: #75715e;">' di iterazioni impiegate per la convergenza.</span>
<span style="color: #75715e;">' Da: Theory and Application of Digital Signal Processing.</span>
<span style="color: #75715e;">' L. R. Rabiner, B. Gold - pg. 103</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">Y#,</span> <span style="color: #f8f8f2;">e#,</span> <span style="color: #f8f8f2;">de#,</span> <span style="color: #f8f8f2;">SDE#</span>
<span style="color: #66d9ef;">Const</span> <span style="color: #f8f8f2;">t#</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.00000001</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Y</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">X</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">e</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">de</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #ae81ff;">25</span>
<span style="color: #f8f8f2;">de</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">de</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">Y</span> <span style="color: #f92672;">/</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(N)</span>
<span style="color: #f8f8f2;">SDE</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">de</span> <span style="color: #f92672;">^</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">e</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">e</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">SDE</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">(e</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">t</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">SDE))</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">I0_Kaiser</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">e</span>
<span style="color: #66d9ef;">Exit</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #a6e22e;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">N</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Function</span> <span style="color: #a6e22e;">WinTipi</span><span style="color: #f8f8f2;">()</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Window_Type()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Imposta i parametri dei tipi di</span>
<span style="color: #75715e;">' "Window" disponibili:</span>
<span style="color: #75715e;">' Profilo da File: WinTipi(0) -> non usato, in questa applicazione.</span>
<span style="color: #75715e;">' Bartlett: WinTipi(1)</span>
<span style="color: #75715e;">' Bartlett-Hann: WinTipi(2)</span>
<span style="color: #75715e;">' Blackman: WinTipi(3)</span>
<span style="color: #75715e;">' Blackman-Harris: WinTipi(4)</span>
<span style="color: #75715e;">' Blackman-Nuttal: WinTipi(5)</span>
<span style="color: #75715e;">' Flat top: WinTipi(6)</span>
<span style="color: #75715e;">' Gauss: WinTipi(7)</span>
<span style="color: #75715e;">' Hamming generalizzata: WinTipi(8)</span>
<span style="color: #75715e;">' Hamming: WinTipi(9)</span>
<span style="color: #75715e;">' Hanning: WinTipi(10)</span>
<span style="color: #75715e;">' Kaiser: WinTipi(11)</span>
<span style="color: #75715e;">' Lanczos: WinTipi(12)</span>
<span style="color: #75715e;">' Nuttal: WinTipi(13)</span>
<span style="color: #75715e;">' Rettangolare: WinTipi(14)</span>
<span style="color: #75715e;">' Triangolare: WinTipi(15)</span>
<span style="color: #75715e;">' Weber: WinTipi(16)</span>
<span style="color: #75715e;">' Welch: WinTipi(17)</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">WTipi()</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Window_Type</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"--> Nome del File"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Bartlett"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Bartlett-Hann"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Blackman"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Blackman-Harris"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Blackman-Nuttal"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Flat top"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Gauss"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.05</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.5</span>
<span style="color: #f8f8f2;">WTipi(I).PCor</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.2</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Hamming generalizzata"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.5</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">WTipi(I).PCor</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.5</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Hamming"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Hanning"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Kaiser"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.5</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">20</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">WTipi(I).PCor</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">10</span><span style="color: #f8f8f2;">#</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Lanczos"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.5</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">3.5</span>
<span style="color: #f8f8f2;">WTipi(I).PCor</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1.4</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Nuttal"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Rettangolare"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Triangolare"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Weber"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.5</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #f8f8f2;">WTipi(I).PCor</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">#</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Preserve</span> <span style="color: #f8f8f2;">WTipi(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WTipi(I).Nome</span> <span style="color: #f92672;">=</span> <span style="color: #e6db74;">"Welch"</span>
<span style="color: #f8f8f2;">WTipi(I).PMin</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0.5</span>
<span style="color: #f8f8f2;">WTipi(I).PMax</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">WTipi(I).PCor</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">WinTipi</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">WTipi()</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Function</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">SFFTBF</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">d()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">Re()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">Im()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">NFRE</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' SFFTBF(D, N, MM, S1, C1, S3, C3, ITAB)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' A real-valued, in place, split-radix FFT program</span>
<span style="color: #75715e;">' Real input and output in data array D</span>
<span style="color: #75715e;">' Length is N = 2 ** MM</span>
<span style="color: #75715e;">' Decimation-in-time, cos/sin in second loop with table look-up</span>
<span style="color: #75715e;">' Output in order:</span>
<span style="color: #75715e;">' [ Re(0), Re(1), ..., Re(N/2), Im(N/2-1), ..., Im(1) ]</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' S1 - array of sin() table (length >= N/8-1)</span>
<span style="color: #75715e;">' C1 - array of cos() table (length >= N/8-1)</span>
<span style="color: #75715e;">' S3 - array of sin() table (length >= N/8-1)</span>
<span style="color: #75715e;">' C3 - array of cos() table (length >= N/8-1)</span>
<span style="color: #75715e;">' ITAB - integer bit reversal table (length >= sqrt(2n) )</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' The initialization routine SFFTBI must be called prior to calling</span>
<span style="color: #75715e;">' this routine. SFFTBI need not be called again unless N changes.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Original code (RVFFT) written by H.V. Sorensen,</span>
<span style="color: #75715e;">' Rice University, Oct. 1985</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Modifications made by Steve Kifowit, 26 June 1997</span>
<span style="color: #75715e;">' -- table look-up of sines and cosines</span>
<span style="color: #75715e;">' -- incorporation of bit reversal table</span>
<span style="color: #75715e;">' -- quick return</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Tradotta dal FORTRAN e modificata da F. Languasco 25/08/2005.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Entra con:</span>
<span style="color: #75715e;">' N = Numero max. di dati in D() da usare.</span>
<span style="color: #75715e;">' D() = Vettore dei valori Reali del Segnale(t).</span>
<span style="color: #75715e;">' NFRE = Numero dei valori di Frequenza da calcolare.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Esce con:</span>
<span style="color: #75715e;">' Re() = Vettore dei valori Reali della Trasformata(f).</span>
<span style="color: #75715e;">' Im() = Vettore dei valori Immaginari della Trasformata(f).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I valori della trasformata in Re(), Im() NON vengono</span>
<span style="color: #75715e;">' normalizzati sulla lunghezza del Segnale 2^MM.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Gli N dati nel vettore D() sono organizzati come D(0 To N - 1);</span>
<span style="color: #75715e;">' gli NFre_C + 1 dati nei vettori Re() e Im() sono organizzati come</span>
<span style="color: #75715e;">' Vettore(0 To NFre).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Ver: 27/10/2006.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">J&,</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">K&,</span> <span style="color: #f8f8f2;">Ic&,</span> <span style="color: #f8f8f2;">ID&,</span> <span style="color: #f8f8f2;">I0&,</span> <span style="color: #f8f8f2;">I1&,</span> <span style="color: #f8f8f2;">I2&,</span> <span style="color: #f8f8f2;">I3&,</span> <span style="color: #f8f8f2;">I4&,</span> <span style="color: #f8f8f2;">I5&,</span> <span style="color: #f8f8f2;">I6&,</span> <span style="color: #f8f8f2;">I7&,</span> <span style="color: #f8f8f2;">I8&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">N1&,</span> <span style="color: #f8f8f2;">N2&,</span> <span style="color: #f8f8f2;">N4&,</span> <span style="color: #f8f8f2;">N8&,</span> <span style="color: #f8f8f2;">NN&,</span> <span style="color: #f8f8f2;">It&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">XT#,</span> <span style="color: #f8f8f2;">R1#,</span> <span style="color: #f8f8f2;">t1#,</span> <span style="color: #f8f8f2;">T2#,</span> <span style="color: #f8f8f2;">T3#,</span> <span style="color: #f8f8f2;">T4#,</span> <span style="color: #f8f8f2;">T5#,</span> <span style="color: #f8f8f2;">T6#</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">CC1#,</span> <span style="color: #f8f8f2;">SS1#,</span> <span style="color: #f8f8f2;">CC3#,</span> <span style="color: #f8f8f2;">SS3#,</span> <span style="color: #f8f8f2;">NFreq#</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(N</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">Exit</span> <span style="color: #66d9ef;">Sub</span>
<span style="background-color: #1e0010; color: #960050;">'</span>
<span style="color: #75715e;">' Sposto i dati di ingresso nel vettore D1() per non distruggerli</span>
<span style="color: #75715e;">' e per avere un vettore a base 1 come richiesto da questa routine:</span>
<span style="color: #f8f8f2;">CopyMemory</span> <span style="color: #f8f8f2;">D1(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">d(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">N1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">ITAB(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N1</span>
<span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ITAB(K)</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I0</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">It</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">ITAB(K)</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">XT</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I)</span>
<span style="color: #f8f8f2;">D1(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(J)</span>
<span style="color: #f8f8f2;">D1(J)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">XT</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N1</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">ITAB(It)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">It</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span>
<span style="color: #ae81ff;">70</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ic</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I0)</span>
<span style="color: #f8f8f2;">D1(I0)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1(I1)</span>
<span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1(I1)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I0</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Ic</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">70</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">NN</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">MM</span>
<span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">*</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">N4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">4</span>
<span style="color: #f8f8f2;">N8</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">8</span>
<span style="color: #f8f8f2;">NN</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NN</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">*</span> <span style="color: #ae81ff;">2</span>
<span style="color: #ae81ff;">40</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ic</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I4)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1(I3)</span>
<span style="color: #f8f8f2;">D1(I4)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I4)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1(I3)</span>
<span style="color: #f8f8f2;">D1(I3)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">t1</span>
<span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">t1</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(N4</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">38</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(D1(I3)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1(I4))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Sqr2</span>
<span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(D1(I3)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1(I4))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Sqr2</span>
<span style="color: #f8f8f2;">D1(I4)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I2)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">t1</span>
<span style="color: #f8f8f2;">D1(I3)</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">D1(I2)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">t1</span>
<span style="color: #f8f8f2;">D1(I2)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T2</span>
<span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T2</span>
<span style="color: #ae81ff;">38</span> <span style="color: #75715e;">'CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">N2</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Ic</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">40</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">It</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(J</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">NN</span>
<span style="color: #f8f8f2;">CC1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">C1(It)</span>
<span style="color: #f8f8f2;">SS1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">S1(It)</span>
<span style="color: #f8f8f2;">CC3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">C3(It)</span>
<span style="color: #f8f8f2;">SS3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">S3(It)</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N2</span>
<span style="color: #ae81ff;">36</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ic</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">J</span>
<span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I5</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">I6</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I5</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I7</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I6</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I8</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I7</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I3)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1(I7)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS1</span>
<span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I7)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC1</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1(I3)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS1</span>
<span style="color: #f8f8f2;">T3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I4)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1(I8)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS3</span>
<span style="color: #f8f8f2;">T4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I8)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC3</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1(I4)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS3</span>
<span style="color: #f8f8f2;">T5</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T3</span>
<span style="color: #f8f8f2;">T6</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T4</span>
<span style="color: #f8f8f2;">T3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T3</span>
<span style="color: #f8f8f2;">T4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T4</span>
<span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I6)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T6</span>
<span style="color: #f8f8f2;">D1(I3)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T6</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1(I6)</span>
<span style="color: #f8f8f2;">D1(I8)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T2</span>
<span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I2)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T3</span>
<span style="color: #f8f8f2;">D1(I7)</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">D1(I2)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T3</span>
<span style="color: #f8f8f2;">D1(I4)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T2</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T5</span>
<span style="color: #f8f8f2;">D1(I6)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T5</span>
<span style="color: #f8f8f2;">D1(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I5)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T4</span>
<span style="color: #f8f8f2;">D1(I5)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(I5)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T4</span>
<span style="color: #f8f8f2;">D1(I2)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">N2</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Ic</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">36</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">J</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Sistemo i valori calcolati in D1()</span>
<span style="color: #75715e;">' nei vettori Re(), Im():</span>
<span style="color: #75715e;">'For I = 0 To NFre</span>
<span style="color: #75715e;">' Re(I) = D1(I + 1)</span>
<span style="color: #75715e;">'Next I</span>
<span style="color: #f8f8f2;">CopyMemory</span> <span style="color: #f8f8f2;">Re(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">D1(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(NFRE</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFRE</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">Im(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1(N</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' ... End of subroutine SFFTBF ...</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">SFFTBF_Corr</span><span style="color: #f8f8f2;">(d()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">Re_C()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">Im_C()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' SFFTBF(D, N_C, MM_C, S1_C, C1_C, S3_C, C3_C, ITAB_C)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' A real-valued, in place, split-radix FFT program</span>
<span style="color: #75715e;">' Real input and output in data array D</span>
<span style="color: #75715e;">' Length is N_C = 2 ** MM_C</span>
<span style="color: #75715e;">' Decimation-in-time, cos/sin in second loop with table look-up</span>
<span style="color: #75715e;">' Output in order:</span>
<span style="color: #75715e;">' [ Re_C(0), Re_C(1), ..., Re_C(N_C/2), Im_C(N_C/2-1), ..., Im_C(1) ]</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' S1_C - array of sin() table (length >= N_C/8-1)</span>
<span style="color: #75715e;">' C1_C - array of cos() table (length >= N_C/8-1)</span>
<span style="color: #75715e;">' S3_C - array of sin() table (length >= N_C/8-1)</span>
<span style="color: #75715e;">' C3_C - array of cos() table (length >= N_C/8-1)</span>
<span style="color: #75715e;">' ITAB_C - integer bit reversal table (length >= sqrt(2n) )</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' The initialization routine SFFTBI_Corr must be called prior to calling</span>
<span style="color: #75715e;">' this routine. SFFTBI_Corr need not be called again unless N1_C or</span>
<span style="color: #75715e;">' N2_C change.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Original code (RVFFT) written by H.V. Sorensen,</span>
<span style="color: #75715e;">' Rice University, Oct. 1985</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Modifications made by Steve Kifowit, 26 June 1997</span>
<span style="color: #75715e;">' -- table look-up of sines and cosines</span>
<span style="color: #75715e;">' -- incorporation of bit reversal table</span>
<span style="color: #75715e;">' -- quick return</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Tradotta dal FORTRAN e modificata da F. Languasco 25/08/2005.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Entra con:</span>
<span style="color: #75715e;">' N_C = Numero max. di dati in D() da usare.</span>
<span style="color: #75715e;">' D() = Vettore dei valori Reali del Segnale(t).</span>
<span style="color: #75715e;">' NFre_C = Numero dei valori di Frequenza da calcolare.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Esce con:</span>
<span style="color: #75715e;">' Re_C() = Vettore dei valori Reali della Trasformata(f).</span>
<span style="color: #75715e;">' Im_C() = Vettore dei valori Immaginari della Trasformata(f).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I valori della trasformata in Re_C(), Im_C() NON vengono</span>
<span style="color: #75715e;">' normalizzati sulla lunghezza del Segnale 2^MM_C.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Gli N_C dati nel vettore D() sono organizzati come D(0 To N_C - 1);</span>
<span style="color: #75715e;">' gli NFre_C + 1 dati nei vettori Re_C() e Im_C() sono organizzati come</span>
<span style="color: #75715e;">' Vettore(0 To NFre_C).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Ver: 22/05/2007 per MAutoCorr_FT e MMutuaCorr_FT.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">J&,</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">K&,</span> <span style="color: #f8f8f2;">Ic&,</span> <span style="color: #f8f8f2;">ID&,</span> <span style="color: #f8f8f2;">I0&,</span> <span style="color: #f8f8f2;">I1&,</span> <span style="color: #f8f8f2;">I2&,</span> <span style="color: #f8f8f2;">I3&,</span> <span style="color: #f8f8f2;">I4&,</span> <span style="color: #f8f8f2;">I5&,</span> <span style="color: #f8f8f2;">I6&,</span> <span style="color: #f8f8f2;">I7&,</span> <span style="color: #f8f8f2;">I8&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">N1&,</span> <span style="color: #f8f8f2;">N2&,</span> <span style="color: #f8f8f2;">N4&,</span> <span style="color: #f8f8f2;">N8&,</span> <span style="color: #f8f8f2;">NN&,</span> <span style="color: #f8f8f2;">It&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">XT#,</span> <span style="color: #f8f8f2;">R1#,</span> <span style="color: #f8f8f2;">t1#,</span> <span style="color: #f8f8f2;">T2#,</span> <span style="color: #f8f8f2;">T3#,</span> <span style="color: #f8f8f2;">T4#,</span> <span style="color: #f8f8f2;">T5#,</span> <span style="color: #f8f8f2;">T6#</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">CC1#,</span> <span style="color: #f8f8f2;">SS1#,</span> <span style="color: #f8f8f2;">CC3#,</span> <span style="color: #f8f8f2;">SS3#,</span> <span style="color: #f8f8f2;">NFreq#</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(N_C</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">Exit</span> <span style="color: #66d9ef;">Sub</span>
<span style="background-color: #1e0010; color: #960050;">'</span>
<span style="color: #75715e;">' Sposto i dati di ingresso nel vettore D1_C() per non distruggerli</span>
<span style="color: #75715e;">' e per avere un vettore a base 1 come richiesto da questa routine:</span>
<span style="color: #f8f8f2;">CopyMemory</span> <span style="color: #f8f8f2;">D1_C(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">d(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N_C</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">N1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">ITAB_C(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N1</span>
<span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N1</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ITAB_C(K)</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I0</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">It</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">ITAB_C(K)</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">XT</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I)</span>
<span style="color: #f8f8f2;">D1_C(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(J)</span>
<span style="color: #f8f8f2;">D1_C(J)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">XT</span>
<span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N1</span>
<span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">ITAB_C(It)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">It</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span>
<span style="color: #ae81ff;">70</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ic</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I0</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I0)</span>
<span style="color: #f8f8f2;">D1_C(I0)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1_C(I1)</span>
<span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">R1</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1_C(I1)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I0</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Ic</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N_C)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">70</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">NN</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">MM_C</span>
<span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">*</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">N4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">4</span>
<span style="color: #f8f8f2;">N8</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">8</span>
<span style="color: #f8f8f2;">NN</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NN</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">*</span> <span style="color: #ae81ff;">2</span>
<span style="color: #ae81ff;">40</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ic</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I4)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1_C(I3)</span>
<span style="color: #f8f8f2;">D1_C(I4)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I4)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1_C(I3)</span>
<span style="color: #f8f8f2;">D1_C(I3)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">t1</span>
<span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">t1</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(N4</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">38</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(D1_C(I3)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1_C(I4))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Sqr2</span>
<span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(D1_C(I3)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1_C(I4))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Sqr2</span>
<span style="color: #f8f8f2;">D1_C(I4)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I2)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">t1</span>
<span style="color: #f8f8f2;">D1_C(I3)</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">D1_C(I2)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">t1</span>
<span style="color: #f8f8f2;">D1_C(I2)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T2</span>
<span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T2</span>
<span style="color: #ae81ff;">38</span> <span style="color: #75715e;">'CONTINUE</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">N2</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Ic</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N_C)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">40</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N8</span>
<span style="color: #f8f8f2;">It</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(J</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">NN</span>
<span style="color: #f8f8f2;">CC1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">C1_C(It)</span>
<span style="color: #f8f8f2;">SS1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">S1_C(It)</span>
<span style="color: #f8f8f2;">CC3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">C3_C(It)</span>
<span style="color: #f8f8f2;">SS3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">S3_C(It)</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N2</span>
<span style="color: #ae81ff;">36</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ic</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">Step</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">J</span>
<span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I5</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">J</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">2</span>
<span style="color: #f8f8f2;">I6</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I5</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I7</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I6</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">I8</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">I7</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N4</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I3)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1_C(I7)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS1</span>
<span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I7)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC1</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1_C(I3)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS1</span>
<span style="color: #f8f8f2;">T3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I4)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC3</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">D1_C(I8)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS3</span>
<span style="color: #f8f8f2;">T4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I8)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">CC3</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1_C(I4)</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">SS3</span>
<span style="color: #f8f8f2;">T5</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T3</span>
<span style="color: #f8f8f2;">T6</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T4</span>
<span style="color: #f8f8f2;">T3</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T3</span>
<span style="color: #f8f8f2;">T4</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T4</span>
<span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I6)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T6</span>
<span style="color: #f8f8f2;">D1_C(I3)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T6</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">D1_C(I6)</span>
<span style="color: #f8f8f2;">D1_C(I8)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T2</span>
<span style="color: #f8f8f2;">T2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I2)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T3</span>
<span style="color: #f8f8f2;">D1_C(I7)</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">D1_C(I2)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T3</span>
<span style="color: #f8f8f2;">D1_C(I4)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">T2</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T5</span>
<span style="color: #f8f8f2;">D1_C(I6)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T5</span>
<span style="color: #f8f8f2;">D1_C(I1)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span>
<span style="color: #f8f8f2;">t1</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I5)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">T4</span>
<span style="color: #f8f8f2;">D1_C(I5)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(I5)</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">T4</span>
<span style="color: #f8f8f2;">D1_C(I2)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">t1</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Ic</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">N2</span>
<span style="color: #f8f8f2;">ID</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ID</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(Ic</span> <span style="color: #f92672;"><</span> <span style="color: #f8f8f2;">N_C)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">GoTo</span> <span style="color: #ae81ff;">36</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">J</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Sistemo i valori calcolati in D1_C()</span>
<span style="color: #75715e;">' nei vettori Re_C(), Im_C():</span>
<span style="color: #75715e;">' For I = 0 To NFre_C - 1</span>
<span style="color: #75715e;">' Re_C(I) = D1_C(I + 1)</span>
<span style="color: #75715e;">' Next I</span>
<span style="color: #f8f8f2;">CopyMemory</span> <span style="color: #f8f8f2;">Re_C(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">D1_C(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">(NFre_C</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFre_C</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">Im_C(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">D1_C(N_C</span> <span style="color: #f92672;">-</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' ... End of subroutine SFFTBF ...</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">SFFTBI</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' SFFTBI( N, MM, S1, C1, S3, C3, ITAB )</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Table initialization routine for SFFTBF and SFFTBB</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Usage: CALL SFFTBI( N, MM, S1, C1, S3, C3, ITAB )</span>
<span style="color: #75715e;">' Parameters:</span>
<span style="color: #75715e;">' N - integer length of transform (must be a power of two)</span>
<span style="color: #75715e;">' MM - integer such that N = 2**MM</span>
<span style="color: #75715e;">' S1 - array of sin() table (length >= n/8-1)</span>
<span style="color: #75715e;">' C1 - array of cos() table (length >= n/8-1)</span>
<span style="color: #75715e;">' S3 - array of sin() table (length >= n/8-1)</span>
<span style="color: #75715e;">' C3 - array of cos() table (length >= n/8-1)</span>
<span style="color: #75715e;">' ITAB - integer bit reversal table (length >= sqrt(2n))</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Uses standard FORTRAN programs - sin, cos</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Steve Kifowit, 26 June 1997</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Tradotta dal FORTRAN e modificata da F. Languasco 25/08/2005.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I valori calcolati nei vettori S1(), C1(), S3(), C3() e ITAB() ed MM</span>
<span style="color: #75715e;">' non vengono ritornati da questa routine ma memorizzati localmente</span>
<span style="color: #75715e;">' per essere, successivamente, usati da SFFTBF.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">K&,</span> <span style="color: #f8f8f2;">IMax&,</span> <span style="color: #f8f8f2;">M2&,</span> <span style="color: #f8f8f2;">MS&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">ANG#,</span> <span style="color: #f8f8f2;">t#,</span> <span style="color: #f8f8f2;">u#</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">S1(</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">C1(</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">S3(</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">C3(</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">ITAB(</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">Sqr(</span><span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N))</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">D1(</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N)</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">MM</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CLng</span><span style="color: #f8f8f2;">(Log(</span><span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(N))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Log2)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' ... Compute bit reversal table ...</span>
<span style="color: #f8f8f2;">M2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Int(MM</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span>
<span style="color: #f8f8f2;">MS</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">M2</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">M2</span> <span style="color: #f92672;"><></span> <span style="color: #f8f8f2;">MM)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #f8f8f2;">M2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">M2</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">ITAB(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #f8f8f2;">ITAB(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">IMax</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">M2</span>
<span style="color: #f8f8f2;">IMax</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">IMax</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">IMax</span>
<span style="color: #f8f8f2;">ITAB(I)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ITAB(I)</span>
<span style="color: #f8f8f2;">ITAB(I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">IMax)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">ITAB(I)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #f8f8f2;">ITAB(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">MS</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' ... Quick return ...</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(N</span> <span style="color: #f92672;"><=</span> <span style="color: #ae81ff;">8</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">Exit</span> <span style="color: #66d9ef;">Sub</span>
<span style="background-color: #1e0010; color: #960050;">'</span>
<span style="color: #75715e;">' ... Compute trig tables ...</span>
<span style="color: #f8f8f2;">ANG</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">/</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(N)</span>
<span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #f8f8f2;">t</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">ANG</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(I)</span>
<span style="color: #f8f8f2;">C1(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Cos(t)</span>
<span style="color: #f8f8f2;">S1(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sin(t)</span>
<span style="color: #f8f8f2;">u</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">3</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">t</span>
<span style="color: #f8f8f2;">C3(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Cos(u)</span>
<span style="color: #f8f8f2;">S3(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sin(u)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' ... End of subroutine SFFTBI ...</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">SFFTBI_Corr</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">N1</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">Optional</span> <span style="color: #66d9ef;">ByVal</span> <span style="color: #f8f8f2;">N2</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' SFFTBI( N, MM_C, S1_C, C1_C, S3_C, C3_C, ITAB_C )</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Table initialization routine for SFFTBF_Corr and SFFTBB_Corr</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Usage: CALL SFFTBI( N, MM_C, S1_C, C1_C, S3_C, C3_C, ITAB_C )</span>
<span style="color: #75715e;">' Parameters:</span>
<span style="color: #75715e;">' N1 - integer length of 1° data vector.</span>
<span style="color: #75715e;">' N2 - integer length of 2° data vector.</span>
<span style="color: #75715e;">' N_C - integer length of transform (is a power of two).</span>
<span style="color: #75715e;">' MM_C - integer such that N_C = 2**MM_C.</span>
<span style="color: #75715e;">' S1_C - array of sin() table (length >= n/8-1).</span>
<span style="color: #75715e;">' C1_C - array of cos() table (length >= n/8-1).</span>
<span style="color: #75715e;">' S3_C - array of sin() table (length >= n/8-1).</span>
<span style="color: #75715e;">' C3_C - array of cos() table (length >= n/8-1).</span>
<span style="color: #75715e;">' ITAB_C - integer bit reversal table (length >= sqrt(2n)).</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Uses standard FORTRAN programs - sin, cos</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Steve Kifowit, 26 June 1997</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Tradotta dal FORTRAN e modificata da F. Languasco 25/08/2005.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' I valori calcolati nei vettori S1_C(), C1_C(), S3_C(), C3_C(), ITAB_C()</span>
<span style="color: #75715e;">' e nelle variabili N_C, MM_C non vengono ritornati da questa routine ma</span>
<span style="color: #75715e;">' memorizzati localmente per essere, successivamente, usati da SFFTBF_Corr</span>
<span style="color: #75715e;">' e SFFTBB_Corr.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Versione per AudioCardDSP (22/05/2007) da usare con MAutoCorr_FT</span>
<span style="color: #75715e;">' e MMutuaCorr_FT.</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">I&,</span> <span style="color: #f8f8f2;">K&,</span> <span style="color: #f8f8f2;">IMax&,</span> <span style="color: #f8f8f2;">M2&,</span> <span style="color: #f8f8f2;">MS&</span>
<span style="color: #66d9ef;">Dim</span> <span style="color: #f8f8f2;">OmSh#,</span> <span style="color: #f8f8f2;">ANG#,</span> <span style="color: #f8f8f2;">t#,</span> <span style="color: #f8f8f2;">u#</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">N1_C</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N1</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(N2</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span>
<span style="color: #f8f8f2;">N2_C</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N1</span>
<span style="color: #66d9ef;">Else</span>
<span style="color: #f8f8f2;">N2_C</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N2</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">If</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">MM_C</span> <span style="color: #f92672;">=</span> <span style="color: #66d9ef;">CLng</span><span style="color: #f8f8f2;">(Ceil(Log(</span><span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(N1_C</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">N2_C</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">))</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">Log2))</span>
<span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">MM_C</span>
<span style="color: #f8f8f2;">NFre_C</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">S1_C(</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">C1_C(</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">S3_C(</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">),</span> <span style="color: #f8f8f2;">C3_C(</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">ITAB_C(</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">Sqr(</span><span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N_C))</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">D1_C(</span><span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">N_C)</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Re1_C(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFre_C),</span> <span style="color: #f8f8f2;">Im1_C(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFre_C)</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">Re2_C(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFre_C),</span> <span style="color: #f8f8f2;">Im2_C(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFre_C)</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">s(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFre_C),</span> <span style="color: #f8f8f2;">f(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFre_C)</span>
<span style="color: #66d9ef;">ReDim</span> <span style="color: #f8f8f2;">WnRe(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFre_C),</span> <span style="color: #f8f8f2;">WnIm(</span><span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFre_C)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Calcolo le tavole dei seni/coseni per</span>
<span style="color: #75715e;">' la trasformata del segnale ritardato</span>
<span style="color: #75715e;">' di N1_C campioni (solo per AutoCorr_FT):</span>
<span style="color: #f8f8f2;">OmSh</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">N1_C</span> <span style="color: #f92672;">/</span> <span style="color: #f8f8f2;">N_C</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">NFre_C</span>
<span style="color: #f8f8f2;">WnRe(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Cos(OmSh</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #f8f8f2;">WnIm(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f92672;">-</span><span style="color: #f8f8f2;">Sin(OmSh</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">I)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' ... Compute bit reversal table ...</span>
<span style="color: #f8f8f2;">M2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Int(MM_C</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span>
<span style="color: #f8f8f2;">MS</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">^</span> <span style="color: #f8f8f2;">M2</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(</span><span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">M2</span> <span style="color: #f92672;"><></span> <span style="color: #f8f8f2;">MM_C)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #f8f8f2;">M2</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">M2</span> <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">ITAB_C(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span>
<span style="color: #f8f8f2;">ITAB_C(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span>
<span style="color: #f8f8f2;">IMax</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">M2</span>
<span style="color: #f8f8f2;">IMax</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">IMax</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">IMax</span>
<span style="color: #f8f8f2;">ITAB_C(I)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">2</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">ITAB_C(I)</span>
<span style="color: #f8f8f2;">ITAB_C(I</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">IMax)</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">ITAB_C(I)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #f8f8f2;">ITAB_C(</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">MS</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' ... Quick return ...</span>
<span style="color: #66d9ef;">If</span> <span style="color: #f8f8f2;">(N_C</span> <span style="color: #f92672;"><=</span> <span style="color: #ae81ff;">8</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">Then</span> <span style="color: #66d9ef;">Exit</span> <span style="color: #66d9ef;">Sub</span>
<span style="background-color: #1e0010; color: #960050;">'</span>
<span style="color: #75715e;">' ... Compute trig tables ...</span>
<span style="color: #f8f8f2;">ANG</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">PI2</span> <span style="color: #f92672;">/</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(N_C)</span>
<span style="color: #f8f8f2;">K</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">N_C</span> <span style="color: #f92672;">/</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">-</span> <span style="color: #ae81ff;">1</span>
<span style="color: #66d9ef;">For</span> <span style="color: #f8f8f2;">I</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1</span> <span style="color: #66d9ef;">To</span> <span style="color: #f8f8f2;">K</span>
<span style="color: #f8f8f2;">t</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">ANG</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">CDbl</span><span style="color: #f8f8f2;">(I)</span>
<span style="color: #f8f8f2;">C1_C(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Cos(t)</span>
<span style="color: #f8f8f2;">S1_C(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sin(t)</span>
<span style="color: #f8f8f2;">u</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">3</span><span style="color: #f8f8f2;">#</span> <span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">t</span>
<span style="color: #f8f8f2;">C3_C(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Cos(u)</span>
<span style="color: #f8f8f2;">S3_C(I)</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sin(u)</span>
<span style="color: #66d9ef;">Next</span> <span style="color: #f8f8f2;">I</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' ... End of subroutine SFFTBI ...</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">LeggiCoefficienti_IIR</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">NK_U</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">NCel_U</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Long</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">W_U()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Single</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">Ac_U()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Single</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">Bc_U()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Single</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Con questa routine e' possibile ritornare, per uso locale, i</span>
<span style="color: #75715e;">' coefficienti di un filtro IIR calcolati precedentemente dalla</span>
<span style="color: #75715e;">' Function SintesiIIR_BT():</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Routine usata in AudioCardDSP (27/04/2009)</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">NK_U</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NK</span> <span style="color: #75715e;">' Ordine</span>
<span style="color: #f8f8f2;">NCel_U</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NCel</span> <span style="color: #75715e;">' e numero di sezioni del filtro.</span>
<span style="color: #f8f8f2;">W_U()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">w()</span> <span style="color: #75715e;">' Registri delle sezioni del filtro.</span>
<span style="color: #f8f8f2;">Ac_U()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Ac()</span> <span style="color: #75715e;">' Coefficienti del filtro.</span>
<span style="color: #f8f8f2;">Bc_U()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Bc()</span> <span style="color: #75715e;">' " " "</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
<span style="color: #66d9ef;">Public</span> <span style="color: #66d9ef;">Sub</span> <span style="color: #a6e22e;">LeggiCoefficienti_SPM_R</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">Sn_1_U</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Complex,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">SmRE_U()</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">_</span>
<span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">z1_1_U</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Complex,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">z1_N_U</span> <span style="color: #f92672;">As</span> <span style="color: #f8f8f2;">Complex,</span> <span style="color: #66d9ef;">ByRef</span> <span style="color: #f8f8f2;">NormSpm_U</span> <span style="color: #f92672;">As</span> <span style="color: #66d9ef;">Double</span><span style="color: #f8f8f2;">)</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Con questa routine e' possibile ritornare, per uso locale, i</span>
<span style="color: #75715e;">' coefficienti di un filtro SPM_R calcolati precedentemente dalla</span>
<span style="color: #75715e;">' Sub SPM_MF_R_Init():</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">' Routine usata in AudioCardDSP (27/04/2009)</span>
<span style="color: #75715e;">'</span>
<span style="color: #f8f8f2;">Sn_1_U</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Sn_1</span> <span style="color: #75715e;">' Sn * Z^-1</span>
<span style="color: #f8f8f2;">SmRE_U()</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">SmRE()</span> <span style="color: #75715e;">' Registro a scorrimento dei campioni del segnale.</span>
<span style="color: #f8f8f2;">z1_1_U</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">z1_1</span> <span style="color: #75715e;">' z1(0)^-1</span>
<span style="color: #f8f8f2;">z1_N_U</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">z1_N</span> <span style="color: #75715e;">' z1(0)^-N</span>
<span style="color: #f8f8f2;">NormSpm_U</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">NormSpm</span> <span style="color: #75715e;">' Fattore di normalizzazione sul N° di campioni.</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #75715e;">'</span>
<span style="color: #66d9ef;">End</span> <span style="color: #66d9ef;">Sub</span>
</pre>
</div>
</div>
<div id="footer" style="background-color: white; border-top-color: rgb(0, 0, 0); border-top-style: dotted; border-top-width: 1px; color: #333333; font-family: Verdana, Helvetica, Arial, sans-serif; margin: auto 1em;">
</div>
Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-3013488609572889155.post-60833587476228740772021-06-30T17:58:00.000-07:002021-06-30T17:58:00.199-07:00Russian 3D Jet simulator in Visual Basic 6.0<div style="text-align: justify;">
Links on VBForums start to disappear in time as they are replaced with more and more complex implementations in VB6. What I do here is to preserve what Mikle uploaded on Yandex. If you wish to build a professional 3D game in VB6, with Mikle's implementations the sky's the limit !</div>
<br />
<a href="https://drive.google.com/file/d/11IsDjB341CoMoNh-EWDA37uRSLleihOj/view?usp=sharing">Download from ME</a><br />
<br />
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<iframe allowfullscreen="true" allowtransparency="true" frameborder="0" height="303" scrolling="no" src="https://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2FMicrosoftVB%2Fvideos%2F643291613078387%2F&show_text=0&width=560" style="border: none; overflow: hidden;" width="560"></iframe>
</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/1L_ssfcIAS4" width="560"></iframe>
</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/8PZWSkZ8PRM" width="560"></iframe>
</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/XQUTWR5S9c0" width="560"></iframe>
</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/eefPSJCW8vw" width="560"></iframe>
</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-67330266499980069452021-06-09T14:55:00.000-07:002021-06-09T14:55:00.197-07:00Gigabyte file read/write: Binary I/O on very large disk files<br />
<a href="https://drive.google.com/file/d/1jT_A-6aDZ1RV2nT_cX2CfVXGi9eq6qAJ/view?usp=sharing">Download from ME</a><br />
<br />
<pre style="background: rgb(0, 24, 0); color: #55cc66;"><span style="color: #508050; font-weight: bold;">Option Explicit</span>
<span style="color: #b96969;">'</span>
<span style="color: #b96969;">'HugeBinaryFile</span>
<span style="color: #b96969;">'==============</span>
<span style="color: #b96969;">'</span>
<span style="color: #b96969;">'A class for doing simple binary I/O on very large disk files</span>
<span style="color: #b96969;">'(well over the usual 2GB limit). It only does I/O using Byte</span>
<span style="color: #b96969;">'arrays, and makes use of Currency values that are scaled to</span>
<span style="color: #b96969;">'whole numbers in places:</span>
<span style="color: #b96969;">'</span>
<span style="color: #b96969;">' For a file of one byte the FileLen property returns 1.0000 as</span>
<span style="color: #b96969;">' its value.</span>
<span style="color: #b96969;">'</span>
<span style="color: #b96969;">'Operation is similar in many ways to native VB Get#/Put# I/O, for</span>
<span style="color: #b96969;">'example the EOF property must be checked after a ReadBytes() call.</span>
<span style="color: #b96969;">'You must also Dim/Redim buffers to desired sizes before calling</span>
<span style="color: #b96969;">'ReadBytes() or WriteBytes().</span>
<span style="color: #b96969;">'</span>
<span style="color: #b96969;">'Short (signed Long) relative seeks and long (unsigned Currency)</span>
<span style="color: #b96969;">'absolute seeks from 0 may be done.</span>
<span style="color: #b96969;">'</span>
<span style="color: #b96969;">'AutoFlush may be set True to force buffer flushes on every write.</span>
<span style="color: #b96969;">'The Flush() method may be called explicitly if necessary.</span>
<span style="color: #b96969;">'</span>
<span style="color: #508050; font-weight: bold;">Public</span> Enum HBF_Errors
HBF_UNKNOWN_ERROR <span style="color: #808030;">=</span> <span style="color: #778c77;">45600</span>
HBF_FILE_ALREADY_OPEN
HBF_OPEN_FAILURE
HBF_SEEK_FAILURE
HBF_FILELEN_FAILURE
HBF_READ_FAILURE
HBF_WRITE_FAILURE
HBF_FILE_ALREADY_CLOSED
<span style="color: #508050; font-weight: bold;">End</span> Enum
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Const</span> HBF_SOURCE <span style="color: #808030;">=</span> <span style="color: #cc5555;">"HugeBinaryFile"</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Const</span> GENERIC_WRITE <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span> <span style="color: #808030;">=</span> <span style="color: #778c77;">&H40000000</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Const</span> GENERIC_READ <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span> <span style="color: #808030;">=</span> <span style="color: #778c77;">&H80000000</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Const</span> FILE_ATTRIBUTE_NORMAL <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span> <span style="color: #808030;">=</span> <span style="color: #778c77;">&H80</span><span style="color: #808030;">&</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Const</span> CREATE_ALWAYS <span style="color: #808030;">=</span> <span style="color: #778c77;">2</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Const</span> OPEN_ALWAYS <span style="color: #808030;">=</span> <span style="color: #778c77;">4</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Const</span> INVALID_HANDLE_VALUE <span style="color: #808030;">=</span> <span style="color: #808030;">-</span><span style="color: #778c77;">1</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Const</span> INVALID_SET_FILE_POINTER <span style="color: #808030;">=</span> <span style="color: #808030;">-</span><span style="color: #778c77;">1</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Const</span> INVALID_FILE_SIZE <span style="color: #808030;">=</span> <span style="color: #808030;">-</span><span style="color: #778c77;">1</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Const</span> FILE_BEGIN <span style="color: #808030;">=</span> <span style="color: #778c77;">0</span><span style="color: #808030;">,</span> FILE_CURRENT <span style="color: #808030;">=</span> <span style="color: #778c77;">1</span><span style="color: #808030;">,</span> FILE_END <span style="color: #808030;">=</span> <span style="color: #778c77;">2</span>
<span style="color: #508050; font-weight: bold;">Private</span> Type MungeCurr
Value <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Currency</span>
<span style="color: #508050; font-weight: bold;">End</span> Type
<span style="color: #508050; font-weight: bold;">Private</span> Type Munge2Long
LowVal <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
HighVal <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
<span style="color: #508050; font-weight: bold;">End</span> Type
<span style="color: #508050; font-weight: bold;">Private</span> Declare <span style="color: #508050; font-weight: bold;">Function</span> FormatMessage Lib <span style="color: #cc5555;">"kernel32"</span> Alias <span style="color: #cc5555;">"FormatMessageA"</span> <span style="color: #808030;">(</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> dwFlags <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
lpSource <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> dwMessageId <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> dwLanguageId <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> lpBuffer <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> nSize <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
Arguments <span style="color: #508050; font-weight: bold;">As</span> Any<span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
<span style="color: #508050; font-weight: bold;">Private</span> Declare <span style="color: #508050; font-weight: bold;">Function</span> ReadFile Lib <span style="color: #cc5555;">"kernel32"</span> <span style="color: #808030;">(</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> hFile <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
lpBuffer <span style="color: #508050; font-weight: bold;">As</span> Any<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> nNumberOfBytesToRead <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
lpNumberOfBytesRead <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> lpOverlapped <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
<span style="color: #508050; font-weight: bold;">Private</span> Declare <span style="color: #508050; font-weight: bold;">Function</span> CloseHandle Lib <span style="color: #cc5555;">"kernel32"</span> <span style="color: #808030;">(</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> hObject <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
<span style="color: #508050; font-weight: bold;">Private</span> Declare <span style="color: #508050; font-weight: bold;">Function</span> GetFileSize Lib <span style="color: #cc5555;">"kernel32"</span> <span style="color: #808030;">(</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> hFile <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
lpFileSizeHigh <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
<span style="color: #508050; font-weight: bold;">Private</span> Declare <span style="color: #508050; font-weight: bold;">Function</span> WriteFile Lib <span style="color: #cc5555;">"kernel32"</span> <span style="color: #808030;">(</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> hFile <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
lpBuffer <span style="color: #508050; font-weight: bold;">As</span> Any<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> nNumberOfBytesToWrite <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
lpNumberOfBytesWritten <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> lpOverlapped <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
<span style="color: #508050; font-weight: bold;">Private</span> Declare <span style="color: #508050; font-weight: bold;">Function</span> CreateFile Lib <span style="color: #cc5555;">"kernel32"</span> Alias <span style="color: #cc5555;">"CreateFileA"</span> <span style="color: #808030;">(</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> lpFileName <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> dwDesiredAccess <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> dwShareMode <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> lpSecurityAttributes <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> dwCreationDisposition <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> dwFlagsAndAttributes <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> hTemplateFile <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
<span style="color: #508050; font-weight: bold;">Private</span> Declare <span style="color: #508050; font-weight: bold;">Function</span> SetFilePointer Lib <span style="color: #cc5555;">"kernel32"</span> <span style="color: #808030;">(</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> hFile <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> lDistanceToMove <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
lpDistanceToMoveHigh <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> dwMoveMethod <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
<span style="color: #508050; font-weight: bold;">Private</span> Declare <span style="color: #508050; font-weight: bold;">Function</span> FlushFileBuffers Lib <span style="color: #cc5555;">"kernel32"</span> <span style="color: #808030;">(</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> hFile <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
<span style="color: #508050; font-weight: bold;">Private</span> hFile <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
<span style="color: #508050; font-weight: bold;">Private</span> sFName <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span>
<span style="color: #508050; font-weight: bold;">Private</span> fAutoFlush <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Boolean</span>
<span style="color: #508050; font-weight: bold;">Private</span> fEOF <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Boolean</span>
<span style="color: #508050; font-weight: bold;">Private</span> C <span style="color: #508050; font-weight: bold;">As</span> MungeCurr
<span style="color: #508050; font-weight: bold;">Private</span> L <span style="color: #508050; font-weight: bold;">As</span> Munge2Long
<span style="color: #508050; font-weight: bold;">Public</span> <span style="color: #508050; font-weight: bold;">Property</span> <span style="color: #508050; font-weight: bold;">Get</span> AutoFlush<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Boolean</span>
RaiseErrorIfClosed
AutoFlush <span style="color: #808030;">=</span> fAutoFlush
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Property</span>
<span style="color: #508050; font-weight: bold;">Public</span> <span style="color: #508050; font-weight: bold;">Property</span> <span style="color: #508050; font-weight: bold;">Let</span> AutoFlush<span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">ByVal</span> NewVal <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Boolean</span><span style="color: #808030;">)</span>
RaiseErrorIfClosed
fAutoFlush <span style="color: #808030;">=</span> NewVal
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Property</span>
<span style="color: #508050; font-weight: bold;">Public</span> <span style="color: #508050; font-weight: bold;">Property</span> <span style="color: #508050; font-weight: bold;">Get</span> FileHandle<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
RaiseErrorIfClosed
FileHandle <span style="color: #808030;">=</span> hFile
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Property</span>
<span style="color: #508050; font-weight: bold;">Public</span> <span style="color: #508050; font-weight: bold;">Property</span> <span style="color: #508050; font-weight: bold;">Get</span> <span style="color: #508050; font-weight: bold;">FileLen</span><span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Currency</span>
RaiseErrorIfClosed
L<span style="color: #778c77;">.</span>LowVal <span style="color: #808030;">=</span> GetFileSize<span style="color: #808030;">(</span>hFile<span style="color: #808030;">,</span> L<span style="color: #778c77;">.</span>HighVal<span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">If</span> L<span style="color: #778c77;">.</span>LowVal <span style="color: #808030;">=</span> INVALID_FILE_SIZE <span style="color: #508050; font-weight: bold;">Then</span>
<span style="color: #508050; font-weight: bold;">If</span> <span style="color: #508050; font-weight: bold;">Err</span><span style="color: #778c77;">.</span>LastDllError <span style="color: #508050; font-weight: bold;">Then</span> RaiseError HBF_FILELEN_FAILURE
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
<span style="color: #508050; font-weight: bold;">LSet</span> C <span style="color: #808030;">=</span> L
<span style="color: #508050; font-weight: bold;">FileLen</span> <span style="color: #808030;">=</span> C<span style="color: #778c77;">.</span>Value <span style="color: #808030;">*</span> <span style="color: #778c77;">10000</span>@
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Property</span>
<span style="color: #508050; font-weight: bold;">Public</span> <span style="color: #508050; font-weight: bold;">Property</span> <span style="color: #508050; font-weight: bold;">Get</span> FileName<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span>
RaiseErrorIfClosed
FileName <span style="color: #808030;">=</span> sFName
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Property</span>
<span style="color: #508050; font-weight: bold;">Public</span> <span style="color: #508050; font-weight: bold;">Property</span> <span style="color: #508050; font-weight: bold;">Get</span> <span style="color: #508050; font-weight: bold;">EOF</span><span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Boolean</span>
RaiseErrorIfClosed
<span style="color: #508050; font-weight: bold;">EOF</span> <span style="color: #808030;">=</span> fEOF
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Property</span>
<span style="color: #508050; font-weight: bold;">Public</span> <span style="color: #508050; font-weight: bold;">Property</span> <span style="color: #508050; font-weight: bold;">Get</span> IsOpen<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Boolean</span>
IsOpen <span style="color: #808030;">=</span> hFile <span style="color: #808030;"><</span><span style="color: #808030;">></span> INVALID_HANDLE_VALUE
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Property</span>
<span style="color: #508050; font-weight: bold;">Public</span> <span style="color: #508050; font-weight: bold;">Sub</span> CloseFile<span style="color: #808030;">(</span><span style="color: #808030;">)</span>
RaiseErrorIfClosed
CloseHandle hFile
sFName <span style="color: #808030;">=</span> <span style="color: #cc5555;">""</span>
fAutoFlush <span style="color: #808030;">=</span> <span style="color: #0f4d75;">False</span>
fEOF <span style="color: #808030;">=</span> <span style="color: #0f4d75;">False</span>
hFile <span style="color: #808030;">=</span> INVALID_HANDLE_VALUE
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Sub</span>
<span style="color: #508050; font-weight: bold;">Public</span> <span style="color: #508050; font-weight: bold;">Sub</span> Flush<span style="color: #808030;">(</span><span style="color: #808030;">)</span>
RaiseErrorIfClosed
FlushFileBuffers hFile
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Sub</span>
<span style="color: #508050; font-weight: bold;">Public</span> <span style="color: #508050; font-weight: bold;">Sub</span> OpenFile<span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">ByVal</span> OpenFileName <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">If</span> hFile <span style="color: #808030;"><</span><span style="color: #808030;">></span> INVALID_HANDLE_VALUE <span style="color: #508050; font-weight: bold;">Then</span>
RaiseError HBF_FILE_ALREADY_OPEN
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
hFile <span style="color: #808030;">=</span> CreateFile<span style="color: #808030;">(</span>OpenFileName<span style="color: #808030;">,</span> GENERIC_WRITE Or GENERIC_READ<span style="color: #808030;">,</span> <span style="color: #778c77;">0</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #778c77;">0</span><span style="color: #808030;">,</span> OPEN_ALWAYS<span style="color: #808030;">,</span> FILE_ATTRIBUTE_NORMAL<span style="color: #808030;">,</span> <span style="color: #778c77;">0</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">If</span> hFile <span style="color: #808030;">=</span> INVALID_HANDLE_VALUE <span style="color: #508050; font-weight: bold;">Then</span>
RaiseError HBF_OPEN_FAILURE
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
sFName <span style="color: #808030;">=</span> OpenFileName
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Sub</span>
<span style="color: #508050; font-weight: bold;">Public</span> <span style="color: #508050; font-weight: bold;">Function</span> ReadBytes<span style="color: #808030;">(</span>ByRef Buffer<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Byte</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
RaiseErrorIfClosed
<span style="color: #508050; font-weight: bold;">If</span> ReadFile<span style="color: #808030;">(</span>hFile<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
Buffer<span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">LBound</span><span style="color: #808030;">(</span>Buffer<span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">UBound</span><span style="color: #808030;">(</span>Buffer<span style="color: #808030;">)</span> <span style="color: #808030;">-</span> <span style="color: #508050; font-weight: bold;">LBound</span><span style="color: #808030;">(</span>Buffer<span style="color: #808030;">)</span> <span style="color: #808030;">+</span> <span style="color: #778c77;">1</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
ReadBytes<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #778c77;">0</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">Then</span>
<span style="color: #508050; font-weight: bold;">If</span> ReadBytes <span style="color: #808030;">=</span> <span style="color: #778c77;">0</span> <span style="color: #508050; font-weight: bold;">Then</span>
fEOF <span style="color: #808030;">=</span> <span style="color: #0f4d75;">True</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
<span style="color: #508050; font-weight: bold;">Else</span>
RaiseError HBF_READ_FAILURE
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Function</span>
<span style="color: #508050; font-weight: bold;">Public</span> <span style="color: #508050; font-weight: bold;">Sub</span> SeekAbsolute<span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">ByVal</span> Position <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Currency</span><span style="color: #808030;">)</span>
RaiseErrorIfClosed
C<span style="color: #778c77;">.</span>Value <span style="color: #808030;">=</span> Position <span style="color: #808030;">/</span> <span style="color: #778c77;">10000</span>@
<span style="color: #508050; font-weight: bold;">LSet</span> L <span style="color: #808030;">=</span> C
<span style="color: #508050; font-weight: bold;">If</span> SetFilePointer<span style="color: #808030;">(</span>hFile<span style="color: #808030;">,</span> L<span style="color: #778c77;">.</span>LowVal<span style="color: #808030;">,</span> L<span style="color: #778c77;">.</span>HighVal<span style="color: #808030;">,</span> FILE_BEGIN<span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #808030;">=</span> INVALID_SET_FILE_POINTER <span style="color: #508050; font-weight: bold;">Then</span>
<span style="color: #508050; font-weight: bold;">If</span> <span style="color: #508050; font-weight: bold;">Err</span><span style="color: #778c77;">.</span>LastDllError <span style="color: #508050; font-weight: bold;">Then</span> RaiseError HBF_SEEK_FAILURE
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Sub</span>
<span style="color: #508050; font-weight: bold;">Public</span> <span style="color: #508050; font-weight: bold;">Sub</span> SeekEnd<span style="color: #808030;">(</span><span style="color: #808030;">)</span>
RaiseErrorIfClosed
<span style="color: #508050; font-weight: bold;">If</span> SetFilePointer<span style="color: #808030;">(</span>hFile<span style="color: #808030;">,</span> <span style="color: #778c77;">0</span><span style="color: #808030;">&</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">ByVal</span> <span style="color: #778c77;">0</span><span style="color: #808030;">&</span><span style="color: #808030;">,</span> FILE_END<span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #808030;">=</span> INVALID_SET_FILE_POINTER <span style="color: #508050; font-weight: bold;">Then</span>
RaiseError HBF_SEEK_FAILURE
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Sub</span>
<span style="color: #508050; font-weight: bold;">Public</span> <span style="color: #508050; font-weight: bold;">Sub</span> SeekRelative<span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">ByVal</span> Offset <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">)</span>
<span style="color: #b96969;">'Offset is signed.</span>
RaiseErrorIfClosed
<span style="color: #508050; font-weight: bold;">If</span> SetFilePointer<span style="color: #808030;">(</span>hFile<span style="color: #808030;">,</span> Offset<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">ByVal</span> <span style="color: #778c77;">0</span><span style="color: #808030;">&</span><span style="color: #808030;">,</span> FILE_CURRENT<span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #808030;">=</span> INVALID_SET_FILE_POINTER <span style="color: #508050; font-weight: bold;">Then</span>
RaiseError HBF_SEEK_FAILURE
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Sub</span>
<span style="color: #508050; font-weight: bold;">Public</span> <span style="color: #508050; font-weight: bold;">Function</span> WriteBytes<span style="color: #808030;">(</span>Buffer<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Byte</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
RaiseErrorIfClosed
<span style="color: #508050; font-weight: bold;">If</span> WriteFile<span style="color: #808030;">(</span>hFile<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
Buffer<span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">LBound</span><span style="color: #808030;">(</span>Buffer<span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">UBound</span><span style="color: #808030;">(</span>Buffer<span style="color: #808030;">)</span> <span style="color: #808030;">-</span> <span style="color: #508050; font-weight: bold;">LBound</span><span style="color: #808030;">(</span>Buffer<span style="color: #808030;">)</span> <span style="color: #808030;">+</span> <span style="color: #778c77;">1</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
WriteBytes<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #778c77;">0</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">Then</span>
<span style="color: #508050; font-weight: bold;">If</span> fAutoFlush <span style="color: #508050; font-weight: bold;">Then</span> Flush
<span style="color: #508050; font-weight: bold;">Else</span>
RaiseError HBF_WRITE_FAILURE
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Function</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Sub</span> Class_Initialize<span style="color: #808030;">(</span><span style="color: #808030;">)</span>
hFile <span style="color: #808030;">=</span> INVALID_HANDLE_VALUE
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Sub</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Sub</span> Class_Terminate<span style="color: #808030;">(</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">If</span> hFile <span style="color: #808030;"><</span><span style="color: #808030;">></span> INVALID_HANDLE_VALUE <span style="color: #508050; font-weight: bold;">Then</span> CloseHandle hFile
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Sub</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Sub</span> RaiseError<span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">ByVal</span> ErrorCode <span style="color: #508050; font-weight: bold;">As</span> HBF_Errors<span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">Dim</span> Win32Err <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span> Win32Text <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span>
Win32Err <span style="color: #808030;">=</span> <span style="color: #508050; font-weight: bold;">Err</span><span style="color: #778c77;">.</span>LastDllError
<span style="color: #508050; font-weight: bold;">If</span> Win32Err <span style="color: #508050; font-weight: bold;">Then</span>
Win32Text <span style="color: #808030;">=</span> vbNewLine <span style="color: #808030;">&</span> <span style="color: #cc5555;">"Error "</span> <span style="color: #808030;">&</span> Win32Err <span style="color: #808030;">&</span> vbNewLine <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #808030;">&</span> DecodeAPIErrors<span style="color: #808030;">(</span>Win32Err<span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
<span style="color: #508050; font-weight: bold;">If</span> IsOpen <span style="color: #508050; font-weight: bold;">Then</span> CloseFile
<span style="color: #508050; font-weight: bold;">Select</span> <span style="color: #508050; font-weight: bold;">Case</span> ErrorCode
<span style="color: #508050; font-weight: bold;">Case</span> HBF_FILE_ALREADY_OPEN
<span style="color: #508050; font-weight: bold;">Err</span><span style="color: #778c77;">.</span><span style="color: #508050; font-weight: bold;">Raise</span> HBF_FILE_ALREADY_OPEN<span style="color: #808030;">,</span> HBF_SOURCE<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #cc5555;">"File already open."</span>
<span style="color: #508050; font-weight: bold;">Case</span> HBF_OPEN_FAILURE
<span style="color: #508050; font-weight: bold;">Err</span><span style="color: #778c77;">.</span><span style="color: #508050; font-weight: bold;">Raise</span> HBF_OPEN_FAILURE<span style="color: #808030;">,</span> HBF_SOURCE<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #cc5555;">"Error opening file."</span> <span style="color: #808030;">&</span> Win32Text
<span style="color: #508050; font-weight: bold;">Case</span> HBF_SEEK_FAILURE
<span style="color: #508050; font-weight: bold;">Err</span><span style="color: #778c77;">.</span><span style="color: #508050; font-weight: bold;">Raise</span> HBF_SEEK_FAILURE<span style="color: #808030;">,</span> HBF_SOURCE<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #cc5555;">"Seek Error."</span> <span style="color: #808030;">&</span> Win32Text
<span style="color: #508050; font-weight: bold;">Case</span> HBF_FILELEN_FAILURE
<span style="color: #508050; font-weight: bold;">Err</span><span style="color: #778c77;">.</span><span style="color: #508050; font-weight: bold;">Raise</span> HBF_FILELEN_FAILURE<span style="color: #808030;">,</span> HBF_SOURCE<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #cc5555;">"GetFileSize Error."</span> <span style="color: #808030;">&</span> Win32Text
<span style="color: #508050; font-weight: bold;">Case</span> HBF_READ_FAILURE
<span style="color: #508050; font-weight: bold;">Err</span><span style="color: #778c77;">.</span><span style="color: #508050; font-weight: bold;">Raise</span> HBF_READ_FAILURE<span style="color: #808030;">,</span> HBF_SOURCE<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #cc5555;">"Read failure."</span> <span style="color: #808030;">&</span> Win32Text
<span style="color: #508050; font-weight: bold;">Case</span> HBF_WRITE_FAILURE
<span style="color: #508050; font-weight: bold;">Err</span><span style="color: #778c77;">.</span><span style="color: #508050; font-weight: bold;">Raise</span> HBF_WRITE_FAILURE<span style="color: #808030;">,</span> HBF_SOURCE<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #cc5555;">"Write failure."</span> <span style="color: #808030;">&</span> Win32Text
<span style="color: #508050; font-weight: bold;">Case</span> HBF_FILE_ALREADY_CLOSED
<span style="color: #508050; font-weight: bold;">Err</span><span style="color: #778c77;">.</span><span style="color: #508050; font-weight: bold;">Raise</span> HBF_FILE_ALREADY_CLOSED<span style="color: #808030;">,</span> HBF_SOURCE<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #cc5555;">"File must be open for this operation."</span>
<span style="color: #508050; font-weight: bold;">Case</span> <span style="color: #508050; font-weight: bold;">Else</span>
<span style="color: #508050; font-weight: bold;">Err</span><span style="color: #778c77;">.</span><span style="color: #508050; font-weight: bold;">Raise</span> HBF_UNKNOWN_ERROR<span style="color: #808030;">,</span> HBF_SOURCE<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #cc5555;">"Unknown error."</span> <span style="color: #808030;">&</span> Win32Text
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Select</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Sub</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Sub</span> RaiseErrorIfClosed<span style="color: #808030;">(</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">If</span> hFile <span style="color: #808030;">=</span> INVALID_HANDLE_VALUE <span style="color: #508050; font-weight: bold;">Then</span> RaiseError HBF_FILE_ALREADY_CLOSED
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Sub</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Function</span> DecodeAPIErrors<span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">ByVal</span> ErrorCode <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span>
<span style="color: #508050; font-weight: bold;">Const</span> FORMAT_MESSAGE_FROM_SYSTEM <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span> <span style="color: #808030;">=</span> <span style="color: #778c77;">&H1000</span><span style="color: #808030;">&</span>
<span style="color: #508050; font-weight: bold;">Dim</span> strMsg <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span><span style="color: #808030;">,</span> lngMsgLen <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
strMsg <span style="color: #808030;">=</span> <span style="color: #508050; font-weight: bold;">Space</span>$<span style="color: #808030;">(</span><span style="color: #778c77;">256</span><span style="color: #808030;">)</span>
lngMsgLen <span style="color: #808030;">=</span> FormatMessage<span style="color: #808030;">(</span>FORMAT_MESSAGE_FROM_SYSTEM<span style="color: #808030;">,</span> <span style="color: #778c77;">0</span><span style="color: #808030;">&</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">_</span>
ErrorCode<span style="color: #808030;">,</span> <span style="color: #778c77;">0</span><span style="color: #808030;">&</span><span style="color: #808030;">,</span> strMsg<span style="color: #808030;">,</span> <span style="color: #778c77;">256</span><span style="color: #808030;">&</span><span style="color: #808030;">,</span> <span style="color: #778c77;">0</span><span style="color: #808030;">&</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">If</span> lngMsgLen <span style="color: #808030;">></span> <span style="color: #778c77;">0</span> <span style="color: #508050; font-weight: bold;">Then</span>
DecodeAPIErrors <span style="color: #808030;">=</span> <span style="color: #508050; font-weight: bold;">Left</span><span style="color: #808030;">(</span>strMsg<span style="color: #808030;">,</span> lngMsgLen<span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">Else</span>
DecodeAPIErrors <span style="color: #808030;">=</span> <span style="color: #cc5555;">"Unknown Error."</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Function</span></pre>
<br />
<br />
<pre style="background: rgb(0, 24, 0); color: #55cc66;"><span style="color: #508050; font-weight: bold;">Option Explicit</span>
<span style="color: #b96969;">'</span>
<span style="color: #b96969;">'Timer-driven demo of HugeBinaryFile class.</span>
<span style="color: #b96969;">'</span>
<span style="color: #508050; font-weight: bold;">Private</span> hbfFile <span style="color: #508050; font-weight: bold;">As</span> HugeBinaryFile
<span style="color: #508050; font-weight: bold;">Private</span> blnWriting <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Boolean</span>
<span style="color: #508050; font-weight: bold;">Private</span> bytBuf<span style="color: #808030;">(</span><span style="color: #778c77;">1</span> <span style="color: #508050; font-weight: bold;">To</span> <span style="color: #778c77;">1000000</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Byte</span>
<span style="color: #508050; font-weight: bold;">Private</span> lngBlocks <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Const</span> MAX_BLOCKS <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span> <span style="color: #808030;">=</span> <span style="color: #778c77;">5000</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Sub</span> cmdRead_Click<span style="color: #808030;">(</span><span style="color: #808030;">)</span>
cmdWrite<span style="color: #778c77;">.</span>Enabled <span style="color: #808030;">=</span> <span style="color: #0f4d75;">False</span>
cmdRead<span style="color: #778c77;">.</span>Enabled <span style="color: #808030;">=</span> <span style="color: #0f4d75;">False</span>
lngBlocks <span style="color: #808030;">=</span> <span style="color: #778c77;">0</span>
lblRead<span style="color: #778c77;">.</span>Caption <span style="color: #808030;">=</span> <span style="color: #cc5555;">""</span>
blnWriting <span style="color: #808030;">=</span> <span style="color: #0f4d75;">False</span>
<span style="color: #508050; font-weight: bold;">Set</span> hbfFile <span style="color: #808030;">=</span> <span style="color: #508050; font-weight: bold;">New</span> HugeBinaryFile
hbfFile<span style="color: #778c77;">.</span>OpenFile <span style="color: #cc5555;">"test.dat"</span>
lblStatus <span style="color: #808030;">=</span> <span style="color: #cc5555;">" Reading "</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #808030;">&</span> <span style="color: #508050; font-weight: bold;">Format</span>$<span style="color: #808030;">(</span>hbfFile<span style="color: #778c77;">.</span><span style="color: #508050; font-weight: bold;">FileLen</span><span style="color: #808030;">,</span> <span style="color: #cc5555;">"##,###,###,###,##0"</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #808030;">&</span> <span style="color: #cc5555;">" bytes"</span>
Timer1<span style="color: #778c77;">.</span>Enabled <span style="color: #808030;">=</span> <span style="color: #0f4d75;">True</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Sub</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Sub</span> cmdWrite_Click<span style="color: #808030;">(</span><span style="color: #808030;">)</span>
cmdWrite<span style="color: #778c77;">.</span>Enabled <span style="color: #808030;">=</span> <span style="color: #0f4d75;">False</span>
cmdRead<span style="color: #778c77;">.</span>Enabled <span style="color: #808030;">=</span> <span style="color: #0f4d75;">False</span>
<span style="color: #508050; font-weight: bold;">On</span> <span style="color: #508050; font-weight: bold;">Error</span> <span style="color: #508050; font-weight: bold;">Resume</span> <span style="color: #508050; font-weight: bold;">Next</span>
<span style="color: #508050; font-weight: bold;">Kill</span> <span style="color: #cc5555;">"test.dat"</span>
<span style="color: #508050; font-weight: bold;">On</span> <span style="color: #508050; font-weight: bold;">Error</span> <span style="color: #508050; font-weight: bold;">GoTo</span> <span style="color: #778c77;">0</span>
lngBlocks <span style="color: #808030;">=</span> <span style="color: #778c77;">0</span>
lblWritten<span style="color: #778c77;">.</span>Caption <span style="color: #808030;">=</span> <span style="color: #cc5555;">""</span>
lblStatus <span style="color: #808030;">=</span> <span style="color: #cc5555;">" Writing "</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #808030;">&</span> <span style="color: #508050; font-weight: bold;">Format</span>$<span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">CCur</span><span style="color: #808030;">(</span>MAX_BLOCKS<span style="color: #808030;">)</span> <span style="color: #808030;">*</span> <span style="color: #508050; font-weight: bold;">CCur</span><span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">UBound</span><span style="color: #808030;">(</span>bytBuf<span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: #808030;">,</span> <span style="color: #cc5555;">"##,###,###,###,##0"</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #808030;">&</span> <span style="color: #cc5555;">" bytes"</span>
blnWriting <span style="color: #808030;">=</span> <span style="color: #0f4d75;">True</span>
<span style="color: #508050; font-weight: bold;">Set</span> hbfFile <span style="color: #808030;">=</span> <span style="color: #508050; font-weight: bold;">New</span> HugeBinaryFile
hbfFile<span style="color: #778c77;">.</span>OpenFile <span style="color: #cc5555;">"test.dat"</span>
Timer1<span style="color: #778c77;">.</span>Enabled <span style="color: #808030;">=</span> <span style="color: #0f4d75;">True</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Sub</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Sub</span> Form_Unload<span style="color: #808030;">(</span>Cancel <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Integer</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">If</span> <span style="color: #508050; font-weight: bold;">Not</span> <span style="color: #808030;">(</span>hbfFile Is <span style="color: #508050; font-weight: bold;">Nothing</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">Then</span>
<span style="color: #508050; font-weight: bold;">If</span> hbfFile<span style="color: #778c77;">.</span>IsOpen <span style="color: #508050; font-weight: bold;">Then</span> hbfFile<span style="color: #778c77;">.</span>CloseFile
<span style="color: #508050; font-weight: bold;">Set</span> hbfFile <span style="color: #808030;">=</span> <span style="color: #508050; font-weight: bold;">Nothing</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Sub</span>
<span style="color: #508050; font-weight: bold;">Private</span> <span style="color: #508050; font-weight: bold;">Sub</span> Timer1_Timer<span style="color: #808030;">(</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">If</span> blnWriting <span style="color: #508050; font-weight: bold;">Then</span>
hbfFile<span style="color: #778c77;">.</span>WriteBytes bytBuf
lngBlocks <span style="color: #808030;">=</span> lngBlocks <span style="color: #808030;">+</span> <span style="color: #778c77;">1</span>
lblWritten<span style="color: #778c77;">.</span>Caption <span style="color: #808030;">=</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">Format</span>$<span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">CCur</span><span style="color: #808030;">(</span>lngBlocks<span style="color: #808030;">)</span> <span style="color: #808030;">*</span> <span style="color: #508050; font-weight: bold;">CCur</span><span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">UBound</span><span style="color: #808030;">(</span>bytBuf<span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: #808030;">,</span> <span style="color: #cc5555;">"##,###,###,###,##0"</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #808030;">&</span> <span style="color: #cc5555;">" bytes written"</span>
<span style="color: #508050; font-weight: bold;">If</span> lngBlocks <span style="color: #808030;">></span><span style="color: #808030;">=</span> MAX_BLOCKS <span style="color: #508050; font-weight: bold;">Then</span>
Timer1<span style="color: #778c77;">.</span>Enabled <span style="color: #808030;">=</span> <span style="color: #0f4d75;">False</span>
hbfFile<span style="color: #778c77;">.</span>CloseFile
<span style="color: #508050; font-weight: bold;">Set</span> hbfFile <span style="color: #808030;">=</span> <span style="color: #508050; font-weight: bold;">Nothing</span>
lblStatus <span style="color: #808030;">=</span> <span style="color: #cc5555;">""</span>
cmdWrite<span style="color: #778c77;">.</span>Enabled <span style="color: #808030;">=</span> <span style="color: #0f4d75;">True</span>
cmdRead<span style="color: #778c77;">.</span>Enabled <span style="color: #808030;">=</span> <span style="color: #0f4d75;">True</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
<span style="color: #508050; font-weight: bold;">Else</span>
hbfFile<span style="color: #778c77;">.</span>ReadBytes bytBuf
<span style="color: #508050; font-weight: bold;">If</span> hbfFile<span style="color: #778c77;">.</span><span style="color: #508050; font-weight: bold;">EOF</span> <span style="color: #508050; font-weight: bold;">Then</span>
Timer1<span style="color: #778c77;">.</span>Enabled <span style="color: #808030;">=</span> <span style="color: #0f4d75;">False</span>
hbfFile<span style="color: #778c77;">.</span>CloseFile
<span style="color: #508050; font-weight: bold;">Set</span> hbfFile <span style="color: #808030;">=</span> <span style="color: #508050; font-weight: bold;">Nothing</span>
lblStatus <span style="color: #808030;">=</span> <span style="color: #cc5555;">""</span>
cmdWrite<span style="color: #778c77;">.</span>Enabled <span style="color: #808030;">=</span> <span style="color: #0f4d75;">True</span>
cmdRead<span style="color: #778c77;">.</span>Enabled <span style="color: #808030;">=</span> <span style="color: #0f4d75;">True</span>
<span style="color: #508050; font-weight: bold;">Else</span>
lngBlocks <span style="color: #808030;">=</span> lngBlocks <span style="color: #808030;">+</span> <span style="color: #778c77;">1</span>
lblRead<span style="color: #778c77;">.</span>Caption <span style="color: #808030;">=</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #508050; font-weight: bold;">Format</span>$<span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">CCur</span><span style="color: #808030;">(</span>lngBlocks<span style="color: #808030;">)</span> <span style="color: #808030;">*</span> <span style="color: #508050; font-weight: bold;">CCur</span><span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">UBound</span><span style="color: #808030;">(</span>bytBuf<span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: #808030;">,</span> <span style="color: #cc5555;">"##,###,###,###,##0"</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #808030;">&</span> <span style="color: #cc5555;">" bytes read"</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Sub</span></pre>
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-35144700490351923732021-04-01T09:11:00.000-07:002021-04-01T09:11:02.370-07:00Tempest Test for Windows<div style="background-color: white;">
<div style="font-family: Verdana, Geneva, sans-serif; text-align: justify;">
<a href="https://drive.google.com/file/d/1LB7IMWIM_nACKoGik0Jx7cumRaB65Wmx/view?usp=sharing">Download from ME</a></div>
<div style="font-family: Verdana, Geneva, sans-serif; text-align: justify;">
<a href="http://www.mediafire.com/file/8f21lgj8bw6ed63/Tempest_Test_for_Windows_%2528source_code_only%2529.zip/file">Download from MediaFire</a></div>
<div style="font-family: Verdana, Geneva, sans-serif; text-align: justify;">
<br /></div>
<div style="font-family: Verdana, Geneva, sans-serif; text-align: justify;">
First a bit of background on the subject:</div>
<div style="font-family: Verdana, Geneva, sans-serif; text-align: justify;">
Tempest is the concept of being able to retrieve usable information about what data is being processed by a computer or other electronic device, entirely from the "electronic noise" that is given off by that device. These RF emissions usually cause trouble if they cause interference with radio receivers like an AM radio that you are trying to listen to. The FCC has standards for reducing this interference to an acceptable level, but even so, if you are TRYING to pick up this signal it is usually possible.</div>
<div style="text-align: justify;">
<span style="font-family: Verdana, Geneva, sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, Geneva, sans-serif;">Screen:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, Geneva, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhouiZ_laGDT0vyg_r028tkwk3_8FxJpoOgiV2AtXYu91VgHa0QbaBDcQz5_nMUXdC6NETsdLNlY8_jfjx_OsVsUPmxN_mg8H6GztZcBxhIVLej_Gp8Cuf76R_fNQ85jHnWaWOyKH-Mu9k/s1600/Untitld1ed.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="914" data-original-width="1600" height="364" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhouiZ_laGDT0vyg_r028tkwk3_8FxJpoOgiV2AtXYu91VgHa0QbaBDcQz5_nMUXdC6NETsdLNlY8_jfjx_OsVsUPmxN_mg8H6GztZcBxhIVLej_Gp8Cuf76R_fNQ85jHnWaWOyKH-Mu9k/s640/Untitld1ed.png" width="640" /></a></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, Geneva, sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, Geneva, sans-serif;"><br /></span></div>
<span style="font-family: Verdana, Geneva, sans-serif;"><div style="text-align: justify;">
Under the right conditions, this interference isn't just unintelligible noise, but can actually convey data that is being processed by the computer at that time. This can cause a privacy risk if the data being processed that causes these RF emissions contains information is confidential. This could be the case if for example you are looking at a document on your PC that has confidential information, but your monitor's RF emissions allow the screen image to be received by an adversary with a radio receiver.</div>
</span><div style="text-align: justify;">
<br /></div>
<span style="font-family: Verdana, Geneva, sans-serif;"><div style="text-align: justify;">
To demonstrate the ability of a monitor to transmit intelligible information, Erik Thiele created a program called "Tempest for Eliza" (which you can read about here <a href="http://www.erikyyy.de/tempest/">http://www.erikyyy.de/tempest/</a>) which transmits Beethoven's song Fur Elise. It depends on the ability of a CRT monitor to send one pixel at a time to the screen with an electron gun, so that the signal going to the electron gun gets radiated as RF. So to send a tone, the brightness of a pixel is based on both the frequency of the audible tone and the RF frequency that you want to have to tune your AM radio to to receive it.</div>
</span><div style="text-align: justify;">
<br /></div>
<span style="font-family: Verdana, Geneva, sans-serif;"><div style="text-align: justify;">
Unfortunately, this program has several problems. One is that it requires being compiled (no binaries can be downloaded). Another is that it only runs on Linux. And lastly, it is based on a CRT monitor which sends one pixel at a time. The last of these is a problem because modern LCD monitors process data one line at a time. While vertically, each line of the display is set in sequence, within each line, all of the pixels are set simultaneously. There is no "pixel clock" in an LCD monitor, just a line clock and a data clock. The data clock runs very fast like a CPU processor (probably at 10s or 100s of megahertz at least) and handles the image data very fast for that particular line. Depending on the monitor's microcontroller clock speed (which can be pretty much anything, and not predictable like the pixel clock of a CRT monitor), you will have the carrierwave signal based on that clock speed. Depending on what that frequency is, you may need to tune around your radio to find it or one of its harmonics (sometimes these can be lower than the clock frequency in the form of a lower side band). There's not much than can be done about this, except tune your AM radio (preferably a shortwave receiver so you get more frequencies to search through) to the strongest signal for your particular LCD monitor. However, since you don't need to worry about the pixels horizontally, that means that every pixel on a given line can be lit up at maximum brightness, and I have found that this actually makes the signal stronger. You only need to worry about modulating the brightness vertically.</div>
</span><div style="text-align: justify;">
<br /></div>
<span style="font-family: Verdana, Geneva, sans-serif;"><div style="text-align: justify;">
And here's the solution I've found:</div>
</span><span style="font-family: Verdana, Geneva, sans-serif;"><div style="text-align: justify;">
Of course, there's a pretty simple solution to fixing these things at once. To fix the first 2 things, just write your own version of this software in a language you are familiar with and which is designed to compile for Windows (VB6 in this case). And the last thing is to make it so that every pixel is lit up on a given line, which naturally is easy to do when you are writing it yourself (you just write it to do that). So below, there are 2 links to my VB6 version of this guy's program, designed from the ground up to work with LCD monitors (sorry if you want to use it with a CRT monitor, it won't work, as I've made this based on the fact that nearly everyone uses LCD not CRT monitors nowadays). The first link fixes problem 2 and 3 (it is made for Windows, not Linux, and it is optimized for LCD screens, but still requires compiling). The second link fixes all 3 problems. It has the source code, just as with the first link, but it also has a compiled EXE file (in case you don't want to go through the hassle of compiling it yourself, or if you don't have a copy of VB6 yourself). If you are really paranoid about viruses and stuff, you can use the first link, but as it is not a virus (I have no desire to hack anybody's PC) I would highly recommend the second link, which has all the source code (just as with the first link) and also has the compiled EXE file.</div>
</span><div style="text-align: justify;">
<br /></div>
<span style="font-family: Verdana, Geneva, sans-serif;"><div style="text-align: justify;">
The name of the program is "Tempest Test for Windows". With it, you can determine how much RF signal is coming from your monitor that actually conveys information about what's on your computer screen, with the idea that if you are running a business that has confidential info on your computer, and you find that you can hear the music from this program playing on a nearby radio, you should consider Faraday shielding your PC or the room that the PC is in. As with the original "Tempest for Eliza" (which was created by Erik Thiele), it plays Fur Elise. The notes data are in the "song.txt" file, which can be edited to make it play any musical piece that you want.</div>
</span><div style="text-align: justify;">
<br /></div>
<span style="font-family: Verdana, Geneva, sans-serif;"><div style="text-align: justify;">
Source code only: <a href="http://www.mediafire.com/?8f21lgj8bw6ed63">http://www.mediafire.com/?8f21lgj8bw6ed63</a></div>
</span><div style="text-align: justify;">
<br /></div>
<span style="font-family: Verdana, Geneva, sans-serif;"><div style="text-align: justify;">
Source code and EXE: <a href="http://www.mediafire.com/?1mlhl1ir8j7fm2n">http://www.mediafire.com/?1mlhl1ir8j7fm2n</a></div>
</span><div style="text-align: justify;">
<br /></div>
<span style="font-family: Verdana, Geneva, sans-serif;"><div style="text-align: justify;">
Controls:</div>
</span><span style="font-family: Verdana, Geneva, sans-serif;"><div style="text-align: justify;">
There's only one control, the Esc key. Press it to close the program before the song has finished playing. If the song is allowed to continue playing, the program will close when the song ends.</div>
</span><div style="text-align: justify;">
<br /></div>
<span style="font-family: Verdana, Geneva, sans-serif;"><div style="text-align: justify;">
Format of the "song.txt" file:</div>
</span><span style="font-family: Verdana, Geneva, sans-serif;"><div style="text-align: justify;">
It is case-insensitive. Each note is specified by note letter, a modifier symbol ("#" for sharp, or "b" for flat, and yes that is a lowercase "B", but uppercase works as well, as the program is completely case insensitive), and an octave number (from 0 to 8), in that order. In the case of it not being sharp or flat, you leave out the modifier. For example, D sharp in octave 4 is D#4 (or d#4), while B normal in octave 7 is B7 (or b7), and B flat in octave 2 is Bb2 (or bb2, or bB2, or BB2). Each note or special symbol is separated from each other by a space. There are 2 special symbols ("." and "-"). The "." represents no tone transmitted for the period of one half of a note. The dash represents holding the previous note for a period of one note. Any other text in a given entry, or a blank entry (such as formed by an extra space at the start or end of the text file, or by 2 consecutive spaces in the middle of the file) will trigger the error "Stop statement encountered". This is because I left a stop statement in it while debugging it, prior to compiling it. That stopped the code is designed to stop it so that you can check one of the variables that holds the string for that note or special symbol, to see why it didn't match what the program was expecting (so you could go search for the specific bad string in the song.txt file and correct it). It's not nearly as useful with the EXE file, as it alerts you to the fact that there is something wrong with the file, but you'll need to manually look through the text file to see what's wrong. But I left it in anyway so that you could see if there is in fact something wrong with the text file, should you decide to edit it and put in your own song.</div>
</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Code:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="vb" style="background-color: white; box-sizing: border-box; color: #212529; font-size: 11.7px; margin-bottom: 1rem; overflow: auto; text-align: left;"><span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span> FillMemory Lib <span style="box-sizing: border-box; color: maroon;">"kernel32.dll"</span> Alias <span style="box-sizing: border-box; color: maroon;">"RtlFillMemory"</span> (<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByRef</span> Destination <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> Any, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> Length <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> Fill <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>)
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> SetDIBits Lib <span style="box-sizing: border-box; color: maroon;">"gdi32.dll"</span> (<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> hDC <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> hBitmap <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> nStartScan <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> nNumScans <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByRef</span> lpBits <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> Any, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByRef</span> lpBI <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> BITMAPINFO, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> wUsage <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span> Sleep Lib <span style="box-sizing: border-box; color: maroon;">"kernel32.dll"</span> (<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> dwMilliseconds <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>)
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> SetWindowPos Lib <span style="box-sizing: border-box; color: maroon;">"user32.dll"</span> (<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> hWnd <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> hWndInsertAfter <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> x <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> y <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> cx <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> cy <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> wFlags <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> GetAsyncKeyState Lib <span style="box-sizing: border-box; color: maroon;">"user32.dll"</span> (<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> vKey <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Integer</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Type</span> BITMAPINFOHEADER
biSize <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
biWidth <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
biHeight <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
biPlanes <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Integer</span>
biBitCount <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Integer</span>
biCompression <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
biSizeImage <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
biXPelsPerMeter <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
biYPelsPerMeter <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
biClrUsed <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
biClrImportant <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Type</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Type</span> RGBQUAD
rgbBlue <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>
rgbGreen <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>
rgbRed <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>
rgbReserved <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Type</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Type</span> BITMAPINFO
bmiHeader <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> BITMAPINFOHEADER
bmiColors(255) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> RGBQUAD
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Type</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> PicW <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> PicH <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> Pix() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> BMI <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> BITMAPINFO
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Type</span> Note
Freqency <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>
Duration <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Type</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> Song() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> Note
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> ProgQuit <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Boolean</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span> Form_Activate()
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> y <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> n <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> z <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> Freq <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> FrameRate <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> FrameDuration <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> LineDuration <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> LineRate <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>
FrameRate = 60
FrameDuration = 1 / FrameRate
LineDuration = FrameDuration / PicH
LineRate = 1 / LineDuration
SetWindowPos Me.hWnd, -1, 0, 0, 0, 0, &H201
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">For</span> n = 0 <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">To</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">UBound</span>(Song)
Freq = Song(n).Freqency
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">For</span> y = 0 <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">To</span> PicH - 1
FillMemory Pix(0, y), PicW, Sgn(Sin(2 * 3.14159 * Freq * y / LineRate)) * 127.5 + 127.5
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Next</span> y
SetDIBits Me.hDC, Me.Image.Handle, 0, PicH, Pix(0, 0), BMI, 0
Refresh
Sleep Song(n).Duration
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">DoEvents</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">If</span> ProgQuit <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Then</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Exit</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Next</span> n
Unload Me
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span> Form_Load()
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> i <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> NotesStr <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>
ChDir App.Path
PicW = Screen.Width / 15
PicH = Screen.Height / 15
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ReDim</span> Pix(PicW - 1, PicH - 1)
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">With</span> BMI
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">With</span> .bmiHeader
.biSize = 40
.biPlanes = 1
.biBitCount = 8
.biClrUsed = 256
.biClrImportant = 256
.biWidth = PicW
.biHeight = -PicH
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">With</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">For</span> i = 0 <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">To</span> 255
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">With</span> .bmiColors(i)
.rgbRed = i
.rgbGreen = i
.rgbBlue = i
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">With</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Next</span> i
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">With</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Open</span> <span style="box-sizing: border-box; color: maroon;">"song.txt"</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">For</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Binary</span> Access Read <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> #1
NotesStr = <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>$(LOF(1), vbNullChar)
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Get</span> #1, 1, NotesStr
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Close</span> #1
Song() = String2Notes(NotesStr, 300)
GetAsyncKeyState vbKeyEscape
Timer1.Enabled = <span style="box-sizing: border-box; color: #00c2ff; font-weight: bold;">True</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> String2Notes(<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> NotesStr <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> Duration <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> Note()
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> NoteStrings() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> Notes() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> Note
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> n <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
NoteStrings() = Split(NotesStr, <span style="box-sizing: border-box; color: maroon;">" "</span>)
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ReDim</span> Notes(<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">UBound</span>(NoteStrings))
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">For</span> n = 0 <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">To</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">UBound</span>(Notes)
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">With</span> Notes(n)
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Select</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> NoteStrings(n)
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"."</span>
.Freqency = 0
.Duration = Duration / 2
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"-"</span>
.Freqency = Notes(n - 1).Freqency
.Duration = Duration
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Else</span>
.Freqency = Note2Freq(NoteStrings(n))
.Duration = Duration
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Select</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">With</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Next</span> n
String2Notes = Notes()
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> Note2Freq(<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> NoteName <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Select</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> LCase$(NoteName)
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c0"</span>
Note2Freq = 16.35
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c#0"</span>, <span style="box-sizing: border-box; color: maroon;">"db0"</span>
Note2Freq = 17.32
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d0"</span>
Note2Freq = 18.35
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d#0"</span>, <span style="box-sizing: border-box; color: maroon;">"eb0"</span>
Note2Freq = 19.45
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"e0"</span>
Note2Freq = 20.6
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f0"</span>
Note2Freq = 21.83
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f#0"</span>, <span style="box-sizing: border-box; color: maroon;">"gb0"</span>
Note2Freq = 23.12
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g0"</span>
Note2Freq = 24.5
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g#0"</span>, <span style="box-sizing: border-box; color: maroon;">"ab0"</span>
Note2Freq = 25.96
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a0"</span>
Note2Freq = 27.5
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a#0"</span>, <span style="box-sizing: border-box; color: maroon;">"bb0"</span>
Note2Freq = 29.14
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"b0"</span>
Note2Freq = 30.87
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c1"</span>
Note2Freq = 32.7
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c#1"</span>, <span style="box-sizing: border-box; color: maroon;">"db1"</span>
Note2Freq = 34.65
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d1"</span>
Note2Freq = 36.71
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d#1"</span>, <span style="box-sizing: border-box; color: maroon;">"eb1"</span>
Note2Freq = 38.89
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"e1"</span>
Note2Freq = 41.2
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f1"</span>
Note2Freq = 43.65
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f#1"</span>, <span style="box-sizing: border-box; color: maroon;">"gb1"</span>
Note2Freq = 46.25
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g1"</span>
Note2Freq = 49
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g#1"</span>, <span style="box-sizing: border-box; color: maroon;">"ab1"</span>
Note2Freq = 51.91
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a1"</span>
Note2Freq = 55
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a#1"</span>, <span style="box-sizing: border-box; color: maroon;">"bb1"</span>
Note2Freq = 58.27
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"b1"</span>
Note2Freq = 61.74
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c2"</span>
Note2Freq = 65.41
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c#2"</span>, <span style="box-sizing: border-box; color: maroon;">"db2"</span>
Note2Freq = 69.3
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d2"</span>
Note2Freq = 73.42
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d#2"</span>, <span style="box-sizing: border-box; color: maroon;">"eb2"</span>
Note2Freq = 77.78
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"e2"</span>
Note2Freq = 82.41
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f2"</span>
Note2Freq = 87.31
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f#2"</span>, <span style="box-sizing: border-box; color: maroon;">"gb2"</span>
Note2Freq = 92.5
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g2"</span>
Note2Freq = 98
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g#2"</span>, <span style="box-sizing: border-box; color: maroon;">"ab2"</span>
Note2Freq = 103.83
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a2"</span>
Note2Freq = 110
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a#2"</span>, <span style="box-sizing: border-box; color: maroon;">"bb2"</span>
Note2Freq = 116.54
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"b2"</span>
Note2Freq = 123.47
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c3"</span>
Note2Freq = 130.81
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c#3"</span>, <span style="box-sizing: border-box; color: maroon;">"db3"</span>
Note2Freq = 138.59
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d3"</span>
Note2Freq = 146.83
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d#3"</span>, <span style="box-sizing: border-box; color: maroon;">"eb3"</span>
Note2Freq = 155.56
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"e3"</span>
Note2Freq = 164.81
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f3"</span>
Note2Freq = 174.61
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f#3"</span>, <span style="box-sizing: border-box; color: maroon;">"gb3"</span>
Note2Freq = 185
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g3"</span>
Note2Freq = 196
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g#3"</span>, <span style="box-sizing: border-box; color: maroon;">"ab3"</span>
Note2Freq = 207.65
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a3"</span>
Note2Freq = 220
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a#3"</span>, <span style="box-sizing: border-box; color: maroon;">"bb3"</span>
Note2Freq = 233.08
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"b3"</span>
Note2Freq = 246.94
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c4"</span>
Note2Freq = 261.63
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c#4"</span>, <span style="box-sizing: border-box; color: maroon;">"db4"</span>
Note2Freq = 277.18
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d4"</span>
Note2Freq = 293.66
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d#4"</span>, <span style="box-sizing: border-box; color: maroon;">"eb4"</span>
Note2Freq = 311.13
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"e4"</span>
Note2Freq = 329.63
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f4"</span>
Note2Freq = 349.23
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f#4"</span>, <span style="box-sizing: border-box; color: maroon;">"gb4"</span>
Note2Freq = 369.99
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g4"</span>
Note2Freq = 392
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g#4"</span>, <span style="box-sizing: border-box; color: maroon;">"ab4"</span>
Note2Freq = 415.3
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a4"</span>
Note2Freq = 440
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a#4"</span>, <span style="box-sizing: border-box; color: maroon;">"bb4"</span>
Note2Freq = 466.16
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"b4"</span>
Note2Freq = 493.88
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c5"</span>
Note2Freq = 523.25
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c#5"</span>, <span style="box-sizing: border-box; color: maroon;">"db5"</span>
Note2Freq = 554.37
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d5"</span>
Note2Freq = 587.33
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d#5"</span>, <span style="box-sizing: border-box; color: maroon;">"eb5"</span>
Note2Freq = 622.25
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"e5"</span>
Note2Freq = 659.25
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f5"</span>
Note2Freq = 698.46
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f#5"</span>, <span style="box-sizing: border-box; color: maroon;">"gb5"</span>
Note2Freq = 739.99
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g5"</span>
Note2Freq = 783.99
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g#5"</span>, <span style="box-sizing: border-box; color: maroon;">"ab5"</span>
Note2Freq = 830.61
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a5"</span>
Note2Freq = 880
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a#5"</span>, <span style="box-sizing: border-box; color: maroon;">"bb5"</span>
Note2Freq = 932.33
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"b5"</span>
Note2Freq = 987.77
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c6"</span>
Note2Freq = 1046.5
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c#6"</span>, <span style="box-sizing: border-box; color: maroon;">"db6"</span>
Note2Freq = 1108.73
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d6"</span>
Note2Freq = 1174.66
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d#6"</span>, <span style="box-sizing: border-box; color: maroon;">"eb6"</span>
Note2Freq = 1244.51
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"e6"</span>
Note2Freq = 1318.51
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f6"</span>
Note2Freq = 1396.91
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f#6"</span>, <span style="box-sizing: border-box; color: maroon;">"gb6"</span>
Note2Freq = 1479.98
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g6"</span>
Note2Freq = 1567.98
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g#6"</span>, <span style="box-sizing: border-box; color: maroon;">"ab6"</span>
Note2Freq = 1661.22
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a6"</span>
Note2Freq = 1760
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a#6"</span>, <span style="box-sizing: border-box; color: maroon;">"bb6"</span>
Note2Freq = 1864.66
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"b6"</span>
Note2Freq = 1975.53
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c7"</span>
Note2Freq = 2093
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c#7"</span>, <span style="box-sizing: border-box; color: maroon;">"db7"</span>
Note2Freq = 2217.46
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d7"</span>
Note2Freq = 2349.32
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d#7"</span>, <span style="box-sizing: border-box; color: maroon;">"eb7"</span>
Note2Freq = 2489.02
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"e7"</span>
Note2Freq = 2637.02
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f7"</span>
Note2Freq = 2793.83
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f#7"</span>, <span style="box-sizing: border-box; color: maroon;">"gb7"</span>
Note2Freq = 2959.96
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g7"</span>
Note2Freq = 3135.96
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g#7"</span>, <span style="box-sizing: border-box; color: maroon;">"ab7"</span>
Note2Freq = 3322.44
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a7"</span>
Note2Freq = 3520
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a#7"</span>, <span style="box-sizing: border-box; color: maroon;">"bb7"</span>
Note2Freq = 3729.31
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"b7"</span>
Note2Freq = 3951.07
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c8"</span>
Note2Freq = 4186.01
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"c#8"</span>, <span style="box-sizing: border-box; color: maroon;">"db8"</span>
Note2Freq = 4434.92
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d8"</span>
Note2Freq = 4698.63
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"d#8"</span>, <span style="box-sizing: border-box; color: maroon;">"eb8"</span>
Note2Freq = 4978.03
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"e8"</span>
Note2Freq = 5274.04
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f8"</span>
Note2Freq = 5587.65
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"f#8"</span>, <span style="box-sizing: border-box; color: maroon;">"gb8"</span>
Note2Freq = 5919.91
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g8"</span>
Note2Freq = 6271.93
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"g#8"</span>, <span style="box-sizing: border-box; color: maroon;">"ab8"</span>
Note2Freq = 6644.88
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a8"</span>
Note2Freq = 7040
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"a#8"</span>, <span style="box-sizing: border-box; color: maroon;">"bb8"</span>
Note2Freq = 7458.62
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: maroon;">"b8"</span>
Note2Freq = 7902.13
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Case</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Else</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Stop</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Select</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span> Timer1_Timer()
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">If</span> (GetAsyncKeyState(vbKeyEscape) <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">And</span> 1) = 1 <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Then</span>
ProgQuit = <span style="box-sizing: border-box; color: #00c2ff; font-weight: bold;">True</span>
Unload Me
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">If</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span></pre>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-57769405147027772902021-03-31T08:50:00.000-07:002021-03-31T08:50:01.338-07:00Calculating hashes: MD2, MD4, MD5, SHA1, SHA2-256, SHA2-384, and SHA2-512<div style="text-align: justify;">
It works with MD2, MD4, MD5, SHA1, SHA2-256, SHA2-384, and SHA2-512. Put the below code in a module (BAS file). It does everything that CAPICOM does regarding hashes, but without using any ActiveX DLL files. It depends entirely on the standard cryptographic API DLL files, using declare statements. There are several publicly accessible functions. These are</div>
<div style="text-align: justify;">
<b>HashBytes</b></div>
<div style="text-align: justify;">
<b>HashStringA</b></div>
<div style="text-align: justify;">
<b>HashStringU</b></div>
<div style="text-align: justify;">
<b>HashArbitraryData</b></div>
<div style="text-align: justify;">
<b>BytesToHex</b></div>
<div style="text-align: justify;">
<b>BytesToB64</b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
HashBytes computes a hash of a 1D byte array, who's lower bound is 0.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
HashStringA computes the hash of an Ascii/Ansi (1 byte per character) string. As VB6 strings are actually Unicode (2 bytes per character), and due to the fact that this function is intended to calculate the hash of the Ascii version of the string, the function first converts VB6's unicode characters to true Ascii characters via VB6's StrConv function. However, because characters with an Ascii value above 127 will differ between locales, the LocaleID is needed to be known for this conversion. As such, LocaleID is a parameter for this function. By default, the LocaleID used by the program is the LocaleID of the PC that the program is running on. This should be used in most situations, as this will generate a hash that will match the output of most other programs that generate a hash (such as the program called Easy Hash).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
HashStringU computes the hash of a Unicode (2 bytes per character) string. As VB6 strings are actually Unicode, there is no conversion needed, and thus is no need to specify LocaleID. Therefore, this function doesn't have a LocaleID parameter. Because each character is defined by 2 bytes, rather than 1, the output of this hash function will obviously differ from the hash calculated by HashStringA, and thus will differ from the hash calculated by most other hash calculating programs (such as the freeware one that I used for testing called Easy Hash). For example, a string with 3 spaces " " is represented as the byte array (shown in hex) 20 00 20 00 20 00 in Unicode encoding, but as 20 20 20 in Ascii encoding. These are 2 distinctly different byte arrays, and thus will produce 2 completely different hashes.</div>
<div style="text-align: justify;">
Side-Note regarding Unicode in VB6: Despite this fact, that internally in VB6 all the strings are Unicode, the implementation of Unicode in VB6 is VERY LIMITED. That is, it won't display any Unicode character that can't also be displayed as an extended ascii character for the computer's current locale. Instead it will show it as a question mark. This won't effect how this function works (or the above function, as it's computing a hash, not displaying anything), but it will effect whether or not a given string will be properly displayed.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
HashArbitraryData computes the hash of absolutely anything. It just needs to know where in memory the first byte of data is, and how many bytes long the data is. It will work with multidimensional byte arrays, arrays of other data types, arrays that start with with a lower bound other than zero, user defined types, sections of memory allocated with API functions, etc. There's nothing that it can't compute the hash of. Of course this gives you the added responsibility of needing to know where exactly in memory the data is, and the size of the data in bytes.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
BytesToHex. This is a function intended to convert the raw bytes output from a hash function to a displayable hexadecimal string.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
BytesToB64. This is a function intended to convert the raw bytes output from a hash function to a displayable base64 string.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Code:</div>
<br />
<pre class="vb" style="background-color: white; box-sizing: border-box; color: #212529; font-size: 11.7px; margin-bottom: 1rem; overflow: auto;"><span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span> CopyMemory Lib <span style="box-sizing: border-box; color: maroon;">"kernel32.dll"</span> Alias <span style="box-sizing: border-box; color: maroon;">"RtlMoveMemory"</span> (<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByRef</span> Destination <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> Any, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByRef</span> Source <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> Any, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> Length <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>)
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> CryptAcquireContext Lib <span style="box-sizing: border-box; color: maroon;">"advapi32.dll"</span> Alias <span style="box-sizing: border-box; color: maroon;">"CryptAcquireContextA"</span> (<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByRef</span> phProv <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> pszContainer <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> pszProvider <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> dwProvType <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> dwFlags <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> CryptCreateHash Lib <span style="box-sizing: border-box; color: maroon;">"advapi32.dll"</span> (<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> hProv <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> Algid <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> hKey <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> dwFlags <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByRef</span> phHash <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> CryptHashData Lib <span style="box-sizing: border-box; color: maroon;">"advapi32.dll"</span> (<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> hHash <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByRef</span> pbData <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> Any, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> dwDataLen <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> dwFlags <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> CryptGetHashParam Lib <span style="box-sizing: border-box; color: maroon;">"advapi32.dll"</span> (<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> hHash <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> dwParam <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByRef</span> pByte <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> Any, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByRef</span> pdwDataLen <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> dwFlags <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> CryptDestroyHash Lib <span style="box-sizing: border-box; color: maroon;">"advapi32.dll"</span> (<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> hHash <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> CryptReleaseContext Lib <span style="box-sizing: border-box; color: maroon;">"advapi32.dll"</span> (<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> hProv <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> dwFlags <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> CryptBinaryToString Lib <span style="box-sizing: border-box; color: maroon;">"Crypt32.dll"</span> Alias <span style="box-sizing: border-box; color: maroon;">"CryptBinaryToStringA"</span> (<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByRef</span> pbBinary <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> Any, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> cbBinary <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> dwFlags <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> pszString <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByRef</span> pcchString <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> Const PROV_RSA_AES <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span> = 24
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> Const CRYPT_VERIFYCONTEXT <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span> = &HF0000000
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Public</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Enum</span> HashAlgo
HALG_MD2 = &H8001&
HALG_MD4 = &H8002&
HALG_MD5 = &H8003&
HALG_SHA1 = &H8004&
HALG_SHA2_256 = &H800C&
HALG_SHA2_384 = &H800D&
HALG_SHA2_512 = &H800E&
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Enum</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> Const HP_HASHSIZE <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span> = &H4&
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> Const HP_HASHVAL <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span> = &H2&
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Public</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> HashBytes(<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByRef</span> Data() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Optional</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> HashAlgorithm <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> HashAlgo = HALG_MD5) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>()
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> hProv <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> hHash <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> Hash() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> HashSize <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
CryptAcquireContext hProv, vbNullString, vbNullString, 24, CRYPT_VERIFYCONTEXT
CryptCreateHash hProv, HashAlgorithm, 0, 0, hHash
CryptHashData hHash, Data(0), <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">UBound</span>(Data) + 1, 0
CryptGetHashParam hHash, HP_HASHSIZE, HashSize, 4, 0
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ReDim</span> Hash(HashSize - 1)
CryptGetHashParam hHash, HP_HASHVAL, Hash(0), HashSize, 0
CryptDestroyHash hHash
CryptReleaseContext hProv, 0
HashBytes = Hash()
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Public</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> HashStringA(<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> Text <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Optional</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> LocaleID <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Optional</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> HashAlgorithm <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> HashAlgo = HALG_MD5) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>()
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> Data() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>
Data() = StrConv(Text, vbFromUnicode, LocaleID)
HashStringA = HashBytes(Data, HashAlgorithm)
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Public</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> HashStringU(<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> Text <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Optional</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> HashAlgorithm <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> HashAlgo = HALG_MD5) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>()
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> Data() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>
Data() = Text
HashStringU = HashBytes(Data, HashAlgorithm)
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Public</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> HashArbitraryData(<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> MemAddress <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> ByteCount <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Optional</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> HashAlgorithm <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> HashAlgo = HALG_MD5) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>()
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> Data() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ReDim</span> Data(ByteCount - 1)
CopyMemory Data(0), <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> MemAddress, ByteCount
HashArbitraryData = HashBytes(Data, HashAlgorithm)
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Public</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> BytesToHex(<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByRef</span> Bytes() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> HexStringLen <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> HexString <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>
CryptBinaryToString Bytes(0), <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">UBound</span>(Bytes) + 1, 12, vbNullString, HexStringLen
HexString = <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>$(HexStringLen, vbNullChar)
CryptBinaryToString Bytes(0), <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">UBound</span>(Bytes) + 1, 12, HexString, HexStringLen
BytesToHex = UCase$(HexString)
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Public</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> BytesToB64(<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByRef</span> Bytes() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Byte</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> B64StringLen <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> B64String <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>
CryptBinaryToString Bytes(0), <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">UBound</span>(Bytes) + 1, 1, vbNullString, B64StringLen
B64String = <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>$(B64StringLen, vbNullChar)
CryptBinaryToString Bytes(0), <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">UBound</span>(Bytes) + 1, 1, B64String, B64StringLen
BytesToB64 = B64String
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span></pre>
<br />
<b>Source:</b><br />
<a href="http://earlier189.rssing.com/browser.php?indx=6373759&item=379">http://earlier189.rssing.com/browser.php?indx=6373759&item=379</a><br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-22173535902788127702021-03-30T13:32:00.000-07:002021-03-30T13:32:00.452-07:00How to insert machine code in source code: VB6 & ASM<div style="text-align: justify;">
<span style="font-family: Arial;">Just a quick post for documentation sake of using inline asm with VB6 (or at least as close as we can get to it without an external c dll. </span><span style="font-family: Arial;">In terms of development of the asm to put in. You can use your C Compiler to generate it for you..here are the tips.</span></div>
<div style="text-align: justify;">
<br style="font-family: Arial;" /></div>
<ul>
<li><div style="font-family: Arial; text-align: justify;">
CallwindowsProc has 5 arguments max and can return a long The first argument is already used so your args start at [EBP+0x0C] this means use a dummy int arg first in your prototype to line up args.</div>
</li>
<li><div style="font-family: Arial; text-align: justify;">
do not use any sub functions from your code do things in blocks in you have to.</div>
</li>
<li><div style="font-family: Arial; text-align: justify;">
once you generate your code, you can extract the opcodes from VC in debug mode viewing mixed mode disasm (develop as an exe usually although you may have to as a dll to use with vb as standard call dll).</div>
</li>
<li><div style="font-family: Arial; text-align: justify;">
you need to strip all the function prolog and epilog asm from the compiler generated block (or use naked declspec) your ret should be RETN 10h.</div>
</li>
<li><div style="font-family: Arial; text-align: justify;">
keep a couple nops (&H90) in place at start in case you need room to add a breakpoint (&hCC) manually to stop on your asm in a debugger to debug it. yes you will have to use ollydbg to debug it in asm most likley.</div>
</li>
<li style="font-family: Arial; text-align: justify;">you can twiddle with the CallWindowProc prototypes more based on what you are using it for..see last example.</li>
</ul>
<div>
<span style="font-family: Arial;">Full example here:</span></div>
<div>
<span style="font-family: Arial;"><br /></span></div>
<div>
<span style="font-family: Arial;"><a href="https://drive.google.com/file/d/1GOSWZ0LMgTQAO6LI1uKdxfCaSDHc-iJv/view?usp=sharing">Download from ME</a></span></div>
<div>
<span style="font-family: Arial;"><a href="http://sandsprite.com/CodeStuff/vb_cdecl.zip">Download from SandSprite</a></span></div>
<br style="font-family: Arial;" />
<div style="text-align: left;">
<b style="font-family: Arial;">Note:</b><span style="font-family: Arial;"> All single quotes for comments are stripped by my blog script. </span><span style="font-family: Arial;">Same as default CallWindowProc except param 1 is now "ByRef lpBytes As Any" or you can use the default like this: CallWindowProc(Varptr(asmBytes(0)).</span></div>
<br />
<br />
The most simple and direct example of VB6 & ASM:<br />
<br />
<pre style="background: rgb(0, 24, 0); color: #55cc66;"><span style="color: #508050; font-weight: bold;">Private</span> Declare <span style="color: #508050; font-weight: bold;">Function</span> CallAsm Lib <span style="color: #cc5555;">"user32"</span>
Alias <span style="color: #cc5555;">"CallWindowProcA"</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #808030;">(</span>ByRef lpBytes <span style="color: #508050; font-weight: bold;">As</span> Any<span style="color: #808030;">,</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> hWnd <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> Msg <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> wParam <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> lParam <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
<span style="color: #508050; font-weight: bold;">Function</span> Shl<span style="color: #808030;">(</span>x <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
<span style="color: #b96969;">'8B45 0C MOV EAX,DWORD PTR SS:[EBP+12]</span>
<span style="color: #b96969;">'D1E0 SHL EAX,1</span>
<span style="color: #b96969;">'C2 10 00 RETN 10h</span>
<span style="color: #508050; font-weight: bold;">Dim</span> o<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Byte</span>
<span style="color: #508050; font-weight: bold;">Const</span> sl <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span> <span style="color: #808030;">=</span> <span style="color: #cc5555;">"8B 45 0C D1 E0 C2 10 00"</span>
o<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #808030;">=</span> toBytes<span style="color: #808030;">(</span>sl<span style="color: #808030;">)</span>
Shl <span style="color: #808030;">=</span> CallAsm<span style="color: #808030;">(</span>o<span style="color: #808030;">(</span><span style="color: #778c77;">0</span><span style="color: #808030;">)</span><span style="color: #808030;">,</span> x<span style="color: #808030;">,</span> <span style="color: #778c77;">0</span><span style="color: #808030;">,</span> <span style="color: #778c77;">0</span><span style="color: #808030;">,</span> <span style="color: #778c77;">0</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Function</span>
<span style="color: #508050; font-weight: bold;">private</span> <span style="color: #508050; font-weight: bold;">Function</span> toBytes<span style="color: #808030;">(</span>x <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Byte</span><span style="color: #808030;">(</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">Dim</span> tmp<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span>
<span style="color: #508050; font-weight: bold;">Dim</span> fx<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Byte</span>
<span style="color: #508050; font-weight: bold;">Dim</span> i <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
tmp <span style="color: #808030;">=</span> Split<span style="color: #808030;">(</span>x<span style="color: #808030;">,</span> <span style="color: #cc5555;">" "</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">ReDim</span> fx<span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">UBound</span><span style="color: #808030;">(</span>tmp<span style="color: #808030;">)</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">For</span> i <span style="color: #808030;">=</span> <span style="color: #778c77;">0</span> <span style="color: #508050; font-weight: bold;">To</span> <span style="color: #508050; font-weight: bold;">UBound</span><span style="color: #808030;">(</span>tmp<span style="color: #808030;">)</span>
fx<span style="color: #808030;">(</span>i<span style="color: #808030;">)</span> <span style="color: #808030;">=</span> <span style="color: #508050; font-weight: bold;">CInt</span><span style="color: #808030;">(</span><span style="color: #cc5555;">"&h"</span> <span style="color: #808030;">&</span> tmp<span style="color: #808030;">(</span>i<span style="color: #808030;">)</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">Next</span>
toBytes <span style="color: #808030;">=</span> fx<span style="color: #808030;">(</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Function</span></pre>
<br />
<pre>Another example of working on a byte buffer in your asm:</pre>
<br />
<pre style="background: rgb(0, 24, 0); color: #55cc66;"><span style="color: #508050; font-weight: bold;">Private</span> Declare <span style="color: #508050; font-weight: bold;">Function</span> CallAsm2 Lib <span style="color: #cc5555;">"user32"</span>
Alias <span style="color: #cc5555;">"CallWindowProcA"</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #808030;">(</span>ByRef lpBytes <span style="color: #508050; font-weight: bold;">As</span> Any<span style="color: #808030;">,</span>
ByRef chararray <span style="color: #508050; font-weight: bold;">As</span> Any<span style="color: #808030;">,</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> length <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> unused1 <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">,</span>
<span style="color: #508050; font-weight: bold;">ByVal</span> unused2 <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
<span style="color: #508050; font-weight: bold;">Const</span> opcodes <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span> <span style="color: #808030;">=</span>
<span style="color: #cc5555;">"909090C745F800000000EB098B4DF88"</span> <span style="color: #808030;">&</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #cc5555;">"3C101894DF88B55F83B55107D258B45"</span> <span style="color: #808030;">&</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #cc5555;">"0C0345F88A08884DFC8B45F833D28A5"</span> <span style="color: #808030;">&</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #cc5555;">"5FC2AD08855FC8B550C0355F88A45FC"</span> <span style="color: #808030;">&</span> <span style="color: #508050; font-weight: bold;">_</span>
<span style="color: #cc5555;">"8802EBCA9090C21000"</span>
fx<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #808030;">=</span> toBytes2<span style="color: #808030;">(</span>opcodes<span style="color: #808030;">)</span>
CallAsm2 fx<span style="color: #808030;">(</span><span style="color: #778c77;">0</span><span style="color: #808030;">)</span><span style="color: #808030;">,</span> byteBufferToWorkOn<span style="color: #808030;">(</span><span style="color: #778c77;">0</span><span style="color: #808030;">)</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">UBound</span><span style="color: #808030;">(</span>byteBufferToWorkOn<span style="color: #808030;">)</span><span style="color: #808030;">,</span> <span style="color: #778c77;">0</span><span style="color: #808030;">,</span> <span style="color: #778c77;">0</span>
<span style="color: #508050; font-weight: bold;">Function</span> toBytes2<span style="color: #808030;">(</span>x <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span><span style="color: #808030;">,</span> Optional debugit <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Boolean</span> <span style="color: #808030;">=</span> <span style="color: #0f4d75;">False</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Byte</span><span style="color: #808030;">(</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">Dim</span> tmp<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span>
<span style="color: #508050; font-weight: bold;">Dim</span> fx<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Byte</span>
<span style="color: #508050; font-weight: bold;">Dim</span> i <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Long</span>
<span style="color: #508050; font-weight: bold;">Dim</span> y
<span style="color: #508050; font-weight: bold;">ReDim</span> fx<span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">Len</span><span style="color: #808030;">(</span>x<span style="color: #808030;">)</span> <span style="color: #808030;">/</span> <span style="color: #778c77;">2</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">For</span> i <span style="color: #808030;">=</span> <span style="color: #778c77;">1</span> <span style="color: #508050; font-weight: bold;">To</span> <span style="color: #508050; font-weight: bold;">Len</span><span style="color: #808030;">(</span>x<span style="color: #808030;">)</span> Step <span style="color: #778c77;">2</span>
fx<span style="color: #808030;">(</span>y<span style="color: #808030;">)</span> <span style="color: #808030;">=</span> <span style="color: #508050; font-weight: bold;">CByte</span><span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">CLng</span><span style="color: #808030;">(</span><span style="color: #cc5555;">"&h"</span> <span style="color: #808030;">&</span> <span style="color: #508050; font-weight: bold;">Mid</span><span style="color: #808030;">(</span>x<span style="color: #808030;">,</span> i<span style="color: #808030;">,</span> <span style="color: #778c77;">2</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span>
y <span style="color: #808030;">=</span> y <span style="color: #808030;">+</span> <span style="color: #778c77;">1</span>
<span style="color: #508050; font-weight: bold;">Next</span>
<span style="color: #508050; font-weight: bold;">If</span> debugit <span style="color: #508050; font-weight: bold;">Then</span> fx<span style="color: #808030;">(</span><span style="color: #778c77;">0</span><span style="color: #808030;">)</span> <span style="color: #808030;">=</span> <span style="color: #778c77;">&HCC</span>
toBytes2 <span style="color: #808030;">=</span> fx<span style="color: #808030;">(</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Function</span></pre>
<br />
<pre style="font-size: 12px;">The opcodes are for the following C with the prolog and epilog stripped out:</pre>
<br />
<pre style="background: rgb(0, 24, 0); color: #55cc66;"><span style="color: #508050; font-weight: bold;">void</span> <span style="color: #508050; font-weight: bold;">__stdcall</span> fnDecode<span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">int</span> dummy<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">char</span><span style="color: #808030;">*</span> b<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">int</span> len<span style="color: #808030;">)</span>
<span style="color: purple;">{</span>
<span style="color: #508050; font-weight: bold;">char</span> x<span style="color: purple;">;</span>
<span style="color: #508050; font-weight: bold;">for</span><span style="color: #808030;">(</span><span style="color: #508050; font-weight: bold;">int</span> i<span style="color: #808030;">=</span><span style="color: #778c77;">0</span><span style="color: purple;">;</span> i<span style="color: #808030;"><</span>len<span style="color: purple;">;</span> i<span style="color: #808030;">+</span><span style="color: #808030;">+</span><span style="color: #808030;">)</span><span style="color: purple;">{</span>
x <span style="color: #808030;">=</span> b<span style="color: #808030;">[</span>i<span style="color: #808030;">]</span><span style="color: purple;">;</span>
<span style="color: #004a43;">_asm</span><span style="color: purple;">{</span>
<span style="color: #b96969;">//do stuff to x here</span>
<span style="color: purple;">}</span>
b<span style="color: #808030;">[</span>i<span style="color: #808030;">]</span> <span style="color: #808030;">=</span> x<span style="color: purple;">;</span> <span style="color: #b96969;">//update vb byte buffer</span>
<span style="color: purple;">}</span>
<span style="color: purple;">}</span> </pre>
<br />
<b>Source:</b><br />
<a href="http://sandsprite.com/blogs/index.php/index.php?uid=11&pid=43">http://sandsprite.com/blogs/index.php/index.php?uid=11&pid=43</a><br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-23002846954319072742021-02-17T07:31:00.000-08:002021-02-17T07:31:00.144-08:00String-style operations by wrapping a Byte array<div style="text-align: justify;">
<a href="http://www.vbforums.com/attachment.php?attachmentid=124409&d=1425577168">Download from VBForums</a></div>
<div style="text-align: justify;">
<a href="https://drive.google.com/file/d/11EgIUcRr8OsYlQgv86EhSQLkQm8CkoRq/view?usp=sharing">Download from ME</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
People seem to get tangled up in their underwear a lot trying to fiddle with binary data in String variables. Often they run into nightmares where they convert Unicode "to Unicode" and then back later, in the vain hope of avoiding data corruption. And then some locale boundary gets crossed and it all falls down. Hard.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
From what I've seen the bulk of this comes from the desire to use String operations on binary data. But most of these are fairly trivial to synthesize, especially with the help of CopyMemory.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
The Bytarr Class wraps a dynamic Byte array along with several properties and methods to make this easier.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
You can use the Class for lots of applications, or when you only need one or two operations it can server as a template for inline code when you don't want the Class.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Bytarr (biter?) is bundled with a test program in the attachment. This also includes my Dump Class, which I find handy for debugging and testing.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7dr_1ar0nvW87QHuZDi_KDOeNBH8tf1Dwz3gu3Bl0ThTRU8WYQZr8cdckjo8EXd9z7jDjY-l6u4c-KifOs0blpS_soHA7ty4ZzugfJi7mVGWzs47qN7kfV6foJPucWn1oF01Knx9YBI0/s1600/sshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="495" data-original-width="564" height="560" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7dr_1ar0nvW87QHuZDi_KDOeNBH8tf1Dwz3gu3Bl0ThTRU8WYQZr8cdckjo8EXd9z7jDjY-l6u4c-KifOs0blpS_soHA7ty4ZzugfJi7mVGWzs47qN7kfV6foJPucWn1oF01Knx9YBI0/s640/sshot.png" width="640" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Source:</b></div>
<div style="text-align: justify;">
<a href="http://earlier189.rssing.com/browser.php?indx=6373759&item=344">http://earlier189.rssing.com/browser.php?indx=6373759&item=344</a></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-87925721115406367542021-02-14T08:43:00.000-08:002021-02-14T08:43:00.139-08:00Working with pointers - VB6 (by Krivous Anatoly Anatolevich)<div style="text-align: justify;">
Often there are situations when you need to get data having only the address (for example, in WndProc, HookProc). Usually, simply copy the data via CopyMemory the structure after changing data and copy it back. If the structure is large, it will be a waste of resources to copy into structure and back. In languages such as C ++ is all done easily with the help of pointers, written something like newpos = (WINDOWPOS *) lparam. Nominally VB6 does not work with pointers, but there are a few workarounds.</div>
<div style="text-align: justify;">
<br /></div>
<pre class="vb" style="background-color: white; box-sizing: border-box; color: #212529; font-size: 11.7px; margin-bottom: 1rem; overflow: auto;"><span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Public</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> GetMem4 Lib <span style="box-sizing: border-box; color: maroon;">"msvbvm60"</span> (src <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> Any, Dst <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> Any) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Public</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> ArrPtr Lib <span style="box-sizing: border-box; color: maroon;">"msvbvm60"</span> Alias <span style="box-sizing: border-box; color: maroon;">"VarPtr"</span> (src() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> Any) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span></pre>
<div style="text-align: justify;">
For a start I will give the necessary declarations:</div>
<div style="text-align: justify;">
Code:</div>
<div style="text-align: justify;">
<br /></div>
<pre class="vb" style="background-color: white; box-sizing: border-box; color: #212529; font-size: 11.7px; margin-bottom: 1rem; overflow: auto;"><span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Type</span> Vector
X <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>
Y <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Type</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Type</span> TestRec
Name <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>
Value <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
Position <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> Vector
Money <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Double</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Type</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span> Form_Load()
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> tr <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> TestRec
Test tr
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> Test(Pointer <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> TestRec, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Optional</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> nu <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>)
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> q <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> TestRec, z <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> TestRec
q.Name = <span style="box-sizing: border-box; color: maroon;">"The trick"</span>
q.Position.X = 5: q.Position.Y = 15
q.Value = 12345: q.Money = 3.14
z.Name = <span style="box-sizing: border-box; color: maroon;">"Visual Basic 6.0"</span>
z.Position.X = 99: z.Position.Y = 105
z.Value = 7643: z.Money = 36.6
GetMem4 VarPtr(q), <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> VarPtr(nu) - 4 <span style="box-sizing: border-box; color: green;">' Set pointer to q (Pointer = &q)</span>
PrintRec Pointer
GetMem4 VarPtr(z), <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> VarPtr(nu) - 4 <span style="box-sizing: border-box; color: green;">' Set pointer to z (Pointer = &z)</span>
PrintRec Pointer
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span> PrintRec(Pt <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> TestRec)
Debug.<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Print</span> <span style="box-sizing: border-box; color: maroon;">"----------------"</span>
Debug.<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Print</span> <span style="box-sizing: border-box; color: maroon;">"Name = "</span> & Pt.Name
Debug.<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Print</span> <span style="box-sizing: border-box; color: maroon;">"Value = "</span> & Pt.Value
Debug.<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Print</span> <span style="box-sizing: border-box; color: maroon;">"Money = "</span> & Pt.Money
Debug.<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Print</span> <span style="box-sizing: border-box; color: maroon;">"Position.X = "</span> & Pt.Position.X
Debug.<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Print</span> <span style="box-sizing: border-box; color: maroon;">"Position.Y = "</span> & Pt.Position.Y
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span></pre>
<div style="text-align: justify;">
You can also create a pointer by using arrays. The idea is to create 2 arrays one element each, which will store the address of a variable, and the other will refer to the data. The first will always be Long, a second type of data desired. This is useful for example if you want to pass on lists, etc. It's no secret that the array in VB is simply an SafeArray. In the data structure of this array contains a lot of useful information, and a pointer to the data. What we do, we create two arrays:</div>
<div style="text-align: justify;">
<br /></div>
<br />
<ul>
<li style="text-align: justify;">1st (with address) refers to a pointer to the second data array. As a result, changing the values in the first array, 2nd automatically refer to the desired data.*</li>
<li style="text-align: justify;">2nd is directly the data pointed to by the first.*</li>
</ul>
<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Also, after all the manipulations necessary to return all the pointers back to VB properly clear the memory.* For all manipulations I created auxiliary functions and structure for data recovery.* Address SafeArray is available through Not Not Arr, but IDE after such manipulations are glitches with floating point:</div>
<div style="text-align: justify;">
Code:</div>
<br />
<pre class="vb" style="background-color: white; box-sizing: border-box; color: #212529; font-size: 11.7px; margin-bottom: 1rem; overflow: auto;"><span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Public</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Type</span> PtDat
Prv1 <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
Prv2 <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Type</span>
<span style="box-sizing: border-box; color: green;">' Create the pointer. 1st param is pointer, 2nd address.</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Public</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> PtGet(Pointer() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> VarAddr <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> PtDat
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> i <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
i = GetSA(ArrPtr(Pointer)) + &HC
GetMem4 <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> i, PtGet.Prv1
GetMem4 VarAddr + &HC, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> i
PtGet.Prv2 = Pointer(0)
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span>
<span style="box-sizing: border-box; color: green;">' Release pointer</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Public</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span> PtRelease(Pointer() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, prev <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> PtDat)
Pointer(0) = prev.Prv2
GetMem4 prev.Prv1, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> GetSA(ArrPtr(Pointer)) + &HC
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span>
<span style="box-sizing: border-box; color: green;">' Obtaint address of SafeArray (same Not Not)</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Public</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> GetSA(<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> addr <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
GetMem4 <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> addr, GetSA
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span></pre>
Example of use:<br />
Code:<br />
<br />
<pre class="vb" style="background-color: white; box-sizing: border-box; color: #212529; font-size: 11.7px; margin-bottom: 1rem; overflow: auto;"><span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span> Form_Load()
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> pt() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, var() <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> TestRec, prev <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> PtDat <span style="box-sizing: border-box; color: green;">' Pointer, references data, release data.</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> q <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> TestRec, z <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> TestRec <span style="box-sizing: border-box; color: green;">' The structures, which we refer</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ReDim</span> pt(0): <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ReDim</span> var(0)
q.Name = <span style="box-sizing: border-box; color: maroon;">"The trick"</span>
q.Position.X = 5: q.Position.Y = 15
q.Value = 12345: q.Money = 3.14
z.Name = <span style="box-sizing: border-box; color: maroon;">"Visual Basic 6.0"</span>
z.Position.X = 99: z.Position.Y = 105
z.Value = 7643: z.Money = 36.6
prev = PtGet(pt, GetSA(ArrPtr(var))) <span style="box-sizing: border-box; color: green;">' Create "pointer"</span>
pt(0) = VarPtr(q) <span style="box-sizing: border-box; color: green;">' Refer to q (pt = &q)</span>
PrintRec var(0)
pt(0) = VarPtr(z) <span style="box-sizing: border-box; color: green;">' Refer to z (pt = &z)</span>
PrintRec var(0)
PtRelease pt, prev <span style="box-sizing: border-box; color: green;">' Release</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span></pre>
<br />
<b>Source:</b><br />
<a href="http://earlier189.rssing.com/browser.php?indx=6373759&item=376">http://earlier189.rssing.com/browser.php?indx=6373759&item=376</a><br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-64822147425497913562021-01-14T22:29:00.000-08:002021-01-14T22:29:00.480-08:00ALGLIB: Numerical analysis and data processing library in VB6 (by Dr. Sergey Bochkanov)<a href="https://drive.google.com/file/d/1km_DyvcprFhJEgt-j-qYcipNZg3H_ONy/view?usp=sharing">Download from ME</a><br />
<a href="http://www.vbforums.com/attachment.php?attachmentid=139773&d=1469820955">Download from VBForums</a><br />
<br />
<div style="background-color: white; color: #111111; font-family: "Segoe UI", Arial, sans-serif; font-size: 14px; line-height: 1.4;">
102 modules containing several hundred advanced mathematical functions written by Dr. Sergey Bochkanov. Some of the functions, include:</div>
<ul style="background-color: white; border: 0px; color: #111111; font-family: "Segoe UI", Arial, sans-serif; font-size: 14px; margin: 10px 0px; padding: 0px 0px 0px 40px;">
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Decision forest classifier (regression model)</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">K-means++ clustering</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Linear discriminant analysis</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Linear models</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Logit models</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Basic neural network operations</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Neural network ensemble models</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Neural network training</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Principal component analysis</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Ordinary differential equation solver</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Fast real/complex convolution</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Fast real/complex cross-correlation</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Real/complex FFT</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Real Fast Hartley Transform</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Adaptive 1-dimensional integration</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Gauss-Kronrod quadrature generator</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Gaussian quadrature generator</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Inverse distance weighting: interpolation/fitting</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Linear and nonlinear least-squares solvers</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Polynomial interpolation/fitting</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Parametric spline interpolation</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Rational interpolation/fitting</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">1D spline interpolation/fitting</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">2D spline interpolation</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Level 2 and Level 3 BLAS operations</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Bidiagonal SVD</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Eigensolvers</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Sherman-Morrison update of the inverse matrix</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">LDLT decomposition</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Determinant calculation</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Random matrix generation</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Matrix inverse</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Real/complex QR</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">LQ</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">bi(tri)diagonal</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Hessenberg decompositions</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Condition number estimate</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Schur decomposition</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Determinant of a symmetric matrix</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Symmetric inversion</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Generalized symmetric eigensolver</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Condition number estimate for symmetric matrices</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Singular value decomposition</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">LU and Cholesky decompositions</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">ASA bound constrained optimizer</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Conjugate gradient optimizer</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Limited memory BFGS optimizer</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Improved Levenberg-Marquardt optimizer</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Nearest neighbor search: approximate and exact</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Dense linear system solver</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Symmetric dense linear system solver</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Airy functions</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Bessel functions</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Beta function</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Chebyshev polynomials</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Dawson integral</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Elliptic integrals</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Exponential integrals</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Fresnel integrals</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Gamma function</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Hermite polynomials</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Incomplete beta function</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Incomplete gamma function</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Jacobian elliptic functions</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Laguerre polynomials</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Legendre polynomials</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Psi function</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Trigonometric integrals</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Binomial distribution</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Chi-Square distribution</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Pearson/Spearman correlation coefficients</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Hypothesis testing: correlation tests</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Descriptive statistics: mean</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">variance, etc.</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">F-distribution</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">High quality random numbers generator</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Hypothesis testing: Jarque-Bera test</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Hypothesis testing: Mann-Whitney-U test</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Normal distribution</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Poisson distribution</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Hypothesis testing: sign test</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Student's t-distribution</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Hypothesis testing: Student's t-test</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Hypothesis testing: F-test and one-sample variance test</li>
<li style="border: 0px; line-height: 1.4; margin: 0px; padding: 0px;">Hypothesis testing: Wilcoxon signed rank test.</li>
</ul>
<div>
<span style="color: #111111; font-family: Segoe UI, Arial, sans-serif;"><span style="font-size: 14px;"><br /></span></span></div>
<div>
<span style="color: #111111; font-family: Segoe UI, Arial, sans-serif;"><span style="font-size: 14px;"><b>Original content from Dr. Sergey Bochkanov:</b></span></span></div>
<h1 style="background-color: #8080e8; font-family: Arial; padding: 0.2em;">
Contents</h1>
<div style="font-family: Arial; font-size: 13.3333px;">
<span style="color: #000077;">Introduction</span></div>
<div style="font-family: Arial; font-size: 13.3333px;">
<span style="color: #000077;">Getting started with ALGLIB</span></div>
<div style="font-family: Arial; font-size: 13.3333px;">
<span style="color: #000077;">FAQ</span></div>
<div style="font-family: Arial; font-size: 13.3333px;">
<span style="color: #000077;">AP library description</span></div>
<div style="font-family: Arial; font-size: 13.3333px;">
<span style="color: #000077;">ALGLIB reference manual</span></div>
<h1 style="background-color: grey; font-family: Arial; padding: 0.2em;">
Introduction</h1>
<h3 style="background-color: #e0e0e0; font-family: Arial; padding: 0.2em;">
Sections</h3>
<ul style="font-family: Arial; font-size: 13.3333px;">
<li><span style="color: #000077;">ALGLIB license</span></li>
<li><span style="color: #000077;">Documentation license</span></li>
<li><span style="color: #000077;">Reference Manual and User Guide</span></li>
<li><span style="color: #000077;">Acknowledgements</span></li>
</ul>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
ALGLIB license</h2>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
ALGLIB is a free software which is distributed under a GPL license - version 2 or (at your option) any later version. A copy of the GNU General Public License is available at <span style="color: #000077;">http://www.fsf.org/licensing/licenses</span></div>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
Documentation license</h2>
<div style="font-family: Arial; font-size: 13.3333px; text-align: justify; width: 640px;">
<u>This reference manual is licensed under BSD-like documentation license</u>:<br />
Copyright 1994-2009 Sergey Bochkanov, ALGLIB Project. All rights reserved.<br />
Redistribution and use of this document (ALGLIB Reference Manual) with or without modification, are permitted provided that such redistributions will retain the above copyright notice, this condition and the following disclaimer as the first (or last) lines of this file.<br />
THIS DOCUMENTATION IS PROVIDED BY THE ALGLIB PROJECT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ALGLIB PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</div>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
Reference Manual and User Guide</h2>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
ALGLIB Project provides two sources of information: ALGLIB Reference Manual (this document) and <span style="color: #000077;">ALGLIB User Guide</span>.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
ALGLIB Reference Manual contains full description of all publicly accessible ALGLIB units accompanied with examples. Reference Manual is focused on the source code: it documents units, functions, structures and so on. If you want to know what unit <code>YYY</code> can do or what subroutines unit <code>ZZZ</code> contains Reference Manual is a place to go. Free software needs free documentation - that's why ALGLIB Reference Manual is licensed under BSD-like documentation license.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
Additionally to the Reference Manual we provide you <span style="color: #000077;">User Guide</span>. User Guide is focused on more general questions: how fast ALGLIB is? how reliable it is? what are the strong and weak sides of the algorithms used? We aim to make ALGLIB User Guide an important source of information both about ALGLIB and numerical analysis algorithms in general. We want it to be a book about algorithms, not just software documentation. And we want it to be unique - that's why ALGLIB User Guide is distributed under less-permissive <span style="color: #000077;">personal-use-only license</span>.</div>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
Acknowledgements</h2>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
ALGLIB was not possible without the contribution of next open source projects:</div>
<ul style="font-family: Arial; font-size: 13.3333px;">
<li><span style="color: #000077;">LAPACK</span></li>
<li><span style="color: #000077;">Cephes</span></li>
<li><span style="color: #000077;">GNU MP</span></li>
<li><span style="color: #000077;">MPFR</span></li>
</ul>
<h1 style="background-color: grey; font-family: Arial; padding: 0.2em;">
Getting started with ALGLIB</h1>
<h3 style="background-color: #e0e0e0; font-family: Arial; padding: 0.2em;">
Sections</h3>
<ul style="font-family: Arial; font-size: 13.3333px;"></ul>
<h1 style="background-color: grey; font-family: Arial; padding: 0.2em;">
FAQ</h1>
<h3 style="background-color: #e0e0e0; font-family: Arial; padding: 0.2em;">
Sections</h3>
<ul style="font-family: Arial; font-size: 13.3333px;">
<li><span style="color: #000077;">What version of Visual Basic are the algorithms translated into?</span></li>
<li><span style="color: #000077;">Why is the</span> <i>goto</i> operator used in some programs?</li>
<li><span style="color: #000077;">What is the AP library?</span></li>
<li><span style="color: #000077;">Why do some algorithms (for instance, optimization methods) use reverse communication instead of function pointers, delegates and other means of my programming language?</span></li>
<li><span style="color: #000077;">What is ALGLIB aimed at?</span></li>
<li><span style="color: #000077;">What is the difference between ALGLIB and other similar projects?</span></li>
<li><span style="color: #000077;">What is AlgoPascal?</span></li>
</ul>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
What version of Visual Basic are the algorithms translated into?</h2>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
The algorithms are translated into VBA, but in general are compatible with VB6.</div>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
Why is the <i>goto</i> operator used in some programs?</h2>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
In many programming languages there is control operator <b>continue</b>, but it is absent in VB. In AlgoPascal, this operator appears from time to time. The <b>goto</b> operator is used to replace it and go to the next iteration of the cycle.</div>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
What is the AP library?</h2>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
AP library is a generic name for a set of libraries in several programming languages performing low-level tasks depending on specific programming languages. The AP library carries out tasks such as working with dynamic one- and multidimensional arrays in languages which do not support this data type, contains implementation of basic linear algebra algorithms, etc. The library is distributed as source codes under GPL 2+ license (GPL 2 or later). The library is attached to the ALGLIB package.</div>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
Why do some algorithms (for instance, optimization methods) use reverse communication instead of function pointers, delegates and other means of my programming language?</h2>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
Optimization, integration and other similar methods are united by one common trait. They need to have a way of calculating the meaning of a function defined by the <i>user</i> at a point defined by the <i>method</i>.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
The most convenient way of solving this problem is transferring a function pointer into the module. However bear in mind that ALGLIB package is written using pseudocode that is automatically translated into different programming languages. While each language has its own function pointer analog that is often different from other languages. When the ALGLIB pseudocode was developed, at some point is became clear that adding function pointers in it will be very complex as this feature is implemented differently in every language. This is why reverse communication was chosen as a different kind of solution.</div>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
What is ALGLIB aimed at?</h2>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
It is aimed at creating a convenient and efficient multilingual scientific software library.</div>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
What is the difference between ALGLIB and other similar projects?</h2>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
The ALGLIB package:</div>
<ul style="font-family: Arial; font-size: 13.3333px;">
<li>is a multilingual project. The main feature of the project is that each algorithm is represented by programs in several languages and the language list is the same for every algorithm. This is the main advantage of the site before other similar collections - one algorithm, several languages, identical functionality in each language.</li>
<li>is focused on numerical analysis. There are some other directions in the project but numerical analysis is a priority.</li>
<li>is easy to use. To use the ALGLIB package you don't need to learn an unknown programming language, attach additional external libraries or work with an inconvenient interface to a code written in another programming language.</li>
</ul>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
What is AlgoPascal?</h2>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
AlgoPascal is a programming language, designed particularly for this project. The programs, written in this language, are processed by an automatic translator and translated into other programming languages. Almost all ALGLIB source is produced by the AlgoPascal translator.</div>
<h1 style="background-color: grey; font-family: Arial; padding: 0.2em;">
AP library description</h1>
<h3 style="background-color: #e0e0e0; font-family: Arial; padding: 0.2em;">
Sections</h3>
<ul style="font-family: Arial; font-size: 13.3333px;">
<li><span style="color: #000077;">Introduction</span></li>
<li><span style="color: #000077;">Compatibility</span></li>
<li><span style="color: #000077;">Constants</span></li>
<li><span style="color: #000077;">Functions</span></li>
<li><span style="color: #000077;">Complex numbers operations</span></li>
</ul>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
Introduction</h2>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
The document describes a VBA version of the AP library. The AP library for VBA contains a basic set of mathematical functions needed to compile ALGLIB package. The library includes the only module <code>ap.bas</code>.</div>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
Compatibility</h2>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
This library is developed for VBA only.</div>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
Constants</h2>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="const" style="color: #222222;">MachineEpsilon</span><br />The constant represents the accuracy of machine operations times some small number <i>r>1</i>.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="const" style="color: #222222;">MaxRealNumberThe constant represents the highest value of the positive real number, which could be represented on this machine. The constant may be taken "oversized", that is real boundary can be even higher.</span></div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="const" style="color: #222222;">MinRealNumber</span><br />The constant represents the lowest value of positive real number, which could be represented on this machine. The constant may be taken "oversized", that is real boundary can be even lower.</div>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
Functions</h2>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function MaxReal(ByVal M1 As Double, ByVal M2 As Double) As Double</span><br />Returns the maximum of two real numbers.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function MinReal(ByVal M1 As Double, ByVal M2 As Double) As Double</span><br />Returns the minimum of two real numbers.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function MaxInt(ByVal M1 As Long, ByVal M2 As Long) As Long</span><br />Returns the maximum of two integers.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function MinInt(ByVal M1 As Long, ByVal M2 As Long) As Long</span><br />Returns the minimum of two integers.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function ArcSin(ByVal X As Double) As Double</span><br />Returns arcsine (in radians).</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function ArcCos(ByVal X As Double) As Double</span><br />Returns arccosine (in radians).</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function SinH(ByVal X As Double) As Double</span><br />Returns hyperbolic sine.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function CosH(ByVal X As Double) As Double</span><br />Returns hyperbolic cosine.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function TanH(ByVal X As Double) As Double</span><br />Returns hyperbolic tangent.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function Pi() As Double</span><br />Returns the value of π.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function Power(ByVal Base As Double, ByVal Exponent As Double) As Double</span><br />Returns Base raised to a power of Exponent (introduced for compatibility).</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function Square(ByVal X As Double) As Double</span><br />Returns x<sup>2</sup>.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function Log10(ByVal X As Double) As Double</span><br />Returns common logarithm from X.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function Ceil(ByVal X As Double) As Double</span><br />Returns the smallest integer bigger or equal to X.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function RandomInteger(ByVal X As Long) As Long</span><br />Returns a random integer between 0 and I-1.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function Atn2(ByVal Y As Double, ByVal X As Double) As Double</span><br />Returns an argument of complex number X + iY. From interval from -π to π.</div>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
Complex numbers operations</h2>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
As there is no operator overloading in Visual Basic 6.0, operations with complex numbers could not be implemented as easy as with built-in data type. Therefore <code>Complex</code> data type is defined in a library. It is a record with two real number fields <code>x</code> and <code>y</code>, and all the operations are performed with the use of special functions implementing addition, multiplication, subtraction and division. An input can be complex or real, and output is complex. These functions are listed below.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function C_Add(Z1 As Complex Z2 As Complex):Complex<br />Public Function C_AddR(Z1 As Complex R As Double):Complex</span><br />Calculate <i>Z1+Z2</i> or <i>Z1+R</i>.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function C_Sub(Z1 As Complex Z2 As Complex):Complex<br />Public Function C_SubR(Z1 As Complex R As Double):Complex<br />Public Function C_RSub(R As Double, Z1 As Complex):Complex</span><br />Calculate <i>Z1-Z2</i>, <i>Z1-R</i> or <i>R-Z1</i>.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function C_Mul(Z1 As Complex Z2 As Complex):Complex<br />Public Function C_MulR(Z1 As Complex R As Double):Complex</span><br />Calculate <i>Z1*Z2</i> or <i>Z1*R</i>.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function C_Div(Z1 As Complex Z2 As Complex):Complex<br />Public Function C_DivR(Z1 As Complex R As Double):Complex<br />Public Function C_RDiv(R As Double, Z2 As Complex):Complex</span><br />Calculate <i>Z1/Z2</i>, <i>Z1/R</i> or <i>R/Z2</i>. Modulus calculation is performed using so called "safe" algorithm, that could never cause overflow when calculating intermediate results.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function C_Equal(Z1 As Complex Z2 As Complex):Boolean<br />Public Function C_EqualR(Z1 As Complex R As Double):Boolean<br />Public Function C_NotEqual(Z1 As Complex Z2 As Complex):Boolean<br />Public Function C_NotEqualR(Z1 As Complex R As Double):Boolean</span><br />Compare <i>Z1</i> and <i>Z2</i> or <i>Z1</i> and <i>R</i>.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function C_Complex(X As Double):Complex</span><br />Converts a real number into equal complex number.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function C_Opposite(Z As Complex):Complex</span><br />Returns <i>-Z</i>.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function AbsComplex(Z As Complex):Double</span><br />Returns the modulus of complex number z. Modulus calculation is performed using so called "safe" algorithm, that could never cause overflow when calculating intermediate results.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function Conj(Z As Complex):Complex</span><br />Returns complex conjugate to z.</div>
<div align="justify" style="font-family: Arial; font-size: 13.3333px;">
<span class="func" style="color: #111111;">Public Function CSqr(Z As Complex):Complex</span><br />Returns the square of z.</div>
<h1 style="background-color: grey; font-family: Arial; padding: 0.2em;">
ALGLIB reference manual</h1>
<h2 style="background-color: #b0b0b0; font-family: Arial; padding: 0.2em;">
Packages and units</h2>
<br />
<table border="0" cellspacing="0" style="font-family: Arial;"><tbody>
<tr align="left" valign="top"><td bgcolor="#E8E8E8" colspan="3"><b><code>DataAnalysis</code> package</b></td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_dforest" style="color: #000077; text-decoration-line: none;">dforest</a></td><td width="15"> </td><td>Decision forest classifier (regression model)</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_kmeans" style="color: #000077; text-decoration-line: none;">kmeans</a></td><td width="15"> </td><td>K-means++ clustering</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_lda" style="color: #000077; text-decoration-line: none;">lda</a></td><td width="15"> </td><td>Linear discriminant analysis</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_linreg" style="color: #000077; text-decoration-line: none;">linreg</a></td><td width="15"> </td><td>Linear models</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_logit" style="color: #000077; text-decoration-line: none;">logit</a></td><td width="15"> </td><td>Logit models</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_mlpbase" style="color: #000077; text-decoration-line: none;">mlpbase</a></td><td width="15"> </td><td>Basic neural network operations</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_mlpe" style="color: #000077; text-decoration-line: none;">mlpe</a></td><td width="15"> </td><td>Neural network ensemble models</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_mlptrain" style="color: #000077; text-decoration-line: none;">mlptrain</a></td><td width="15"> </td><td>Neural network training</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_pca" style="color: #000077; text-decoration-line: none;">pca</a></td><td width="15"> </td><td>Principal component analysis</td></tr>
<tr align="left" valign="top"><td colspan="2"> </td></tr>
<tr align="left" valign="top"><td bgcolor="#E8E8E8" colspan="3"><b><code>DiffEquations</code> package</b></td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_odesolver" style="color: #000077; text-decoration-line: none;">odesolver</a></td><td width="15"> </td><td>Ordinary differential equation solver</td></tr>
<tr align="left" valign="top"><td colspan="2"> </td></tr>
<tr align="left" valign="top"><td bgcolor="#E8E8E8" colspan="3"><b><code>FastTransforms</code> package</b></td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_conv" style="color: #000077; text-decoration-line: none;">conv</a></td><td width="15"> </td><td>Fast real/complex convolution</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_corr" style="color: #000077; text-decoration-line: none;">corr</a></td><td width="15"> </td><td>Fast real/complex cross-correlation</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_fft" style="color: #000077; text-decoration-line: none;">fft</a></td><td width="15"> </td><td>Real/complex FFT</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_fht" style="color: #000077; text-decoration-line: none;">fht</a></td><td width="15"> </td><td>Real Fast Hartley Transform</td></tr>
<tr align="left" valign="top"><td colspan="2"> </td></tr>
<tr align="left" valign="top"><td bgcolor="#E8E8E8" colspan="3"><b><code>Integration</code> package</b></td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_autogk" style="color: #000077; text-decoration-line: none;">autogk</a></td><td width="15"> </td><td>Adaptive 1-dimensional integration</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_gkq" style="color: #000077; text-decoration-line: none;">gkq</a></td><td width="15"> </td><td>Gauss-Kronrod quadrature generator</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_gq" style="color: #000077; text-decoration-line: none;">gq</a></td><td width="15"> </td><td>Gaussian quadrature generator</td></tr>
<tr align="left" valign="top"><td colspan="2"> </td></tr>
<tr align="left" valign="top"><td bgcolor="#E8E8E8" colspan="3"><b><code>Interpolation</code> package</b></td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_idwint" style="color: #000077; text-decoration-line: none;">idwint</a></td><td width="15"> </td><td>Inverse distance weighting: interpolation/fitting</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_lsfit" style="color: #000077; text-decoration-line: none;">lsfit</a></td><td width="15"> </td><td>Linear and nonlinear least-squares solvers</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_polint" style="color: #000077; text-decoration-line: none;">polint</a></td><td width="15"> </td><td>Polynomial interpolation/fitting</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_pspline" style="color: #000077; text-decoration-line: none;">pspline</a></td><td width="15"> </td><td>Parametric spline interpolation</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_ratint" style="color: #000077; text-decoration-line: none;">ratint</a></td><td width="15"> </td><td>Rational interpolation/fitting</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_spline1d" style="color: #000077; text-decoration-line: none;">spline1d</a></td><td width="15"> </td><td>1D spline interpolation/fitting</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_spline2d" style="color: #000077; text-decoration-line: none;">spline2d</a></td><td width="15"> </td><td>2D spline interpolation</td></tr>
<tr align="left" valign="top"><td colspan="2"> </td></tr>
<tr align="left" valign="top"><td bgcolor="#E8E8E8" colspan="3"><b><code>LinAlg</code> package</b></td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_ablas" style="color: #000077; text-decoration-line: none;">ablas</a></td><td width="15"> </td><td>Level 2 and Level 3 BLAS operations</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_bdsvd" style="color: #000077; text-decoration-line: none;">bdsvd</a></td><td width="15"> </td><td>Bidiagonal SVD</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_evd" style="color: #000077; text-decoration-line: none;">evd</a></td><td width="15"> </td><td>Eigensolvers</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_inverseupdate" style="color: #000077; text-decoration-line: none;">inverseupdate</a></td><td width="15"> </td><td>Sherman-Morrison update of the inverse matrix</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_ldlt" style="color: #000077; text-decoration-line: none;">ldlt</a></td><td width="15"> </td><td>LDLT decomposition</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_matdet" style="color: #000077; text-decoration-line: none;">matdet</a></td><td width="15"> </td><td>Determinant calculation</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_matgen" style="color: #000077; text-decoration-line: none;">matgen</a></td><td width="15"> </td><td>Random matrix generation</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_matinv" style="color: #000077; text-decoration-line: none;">matinv</a></td><td width="15"> </td><td>Matrix inverse</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_ortfac" style="color: #000077; text-decoration-line: none;">ortfac</a></td><td width="15"> </td><td>Real/complex QR, LQ, bi(tri)diagonal, Hessenberg decompositions</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_rcond" style="color: #000077; text-decoration-line: none;">rcond</a></td><td width="15"> </td><td>Condition number estimate</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_schur" style="color: #000077; text-decoration-line: none;">schur</a></td><td width="15"> </td><td>Schur decomposition</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_sdet" style="color: #000077; text-decoration-line: none;">sdet</a></td><td width="15"> </td><td>Determinant of a symmetric matrix</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_sinverse" style="color: #000077; text-decoration-line: none;">sinverse</a></td><td width="15"> </td><td>Symmetric inversion</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_spdgevd" style="color: #000077; text-decoration-line: none;">spdgevd</a></td><td width="15"> </td><td>Generalized symmetric eigensolver</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_srcond" style="color: #000077; text-decoration-line: none;">srcond</a></td><td width="15"> </td><td>Condition number estimate for symmetric matrices</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_svd" style="color: #000077; text-decoration-line: none;">svd</a></td><td width="15"> </td><td>Singular value decomposition</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_trfac" style="color: #000077; text-decoration-line: none;">trfac</a></td><td width="15"> </td><td>LU and Cholesky decompositions</td></tr>
<tr align="left" valign="top"><td colspan="2"> </td></tr>
<tr align="left" valign="top"><td bgcolor="#E8E8E8" colspan="3"><b><code>Optimization</code> package</b></td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_minasa" style="color: #000077; text-decoration-line: none;">minasa</a></td><td width="15"> </td><td>ASA bound constrained optimizer</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_mincg" style="color: #000077; text-decoration-line: none;">mincg</a></td><td width="15"> </td><td>Conjugate gradient optimizer</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_minlbfgs" style="color: #000077; text-decoration-line: none;">minlbfgs</a></td><td width="15"> </td><td>Limited memory BFGS optimizer</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_minlm" style="color: #000077; text-decoration-line: none;">minlm</a></td><td width="15"> </td><td>Improved Levenberg-Marquardt optimizer</td></tr>
<tr align="left" valign="top"><td colspan="2"> </td></tr>
<tr align="left" valign="top"><td bgcolor="#E8E8E8" colspan="3"><b><code>Other</code> package</b></td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_nearestneighbor" style="color: #000077; text-decoration-line: none;">nearestneighbor</a></td><td width="15"> </td><td>Nearest neighbor search: approximate and exact</td></tr>
<tr align="left" valign="top"><td colspan="2"> </td></tr>
<tr align="left" valign="top"><td bgcolor="#E8E8E8" colspan="3"><b><code>Solvers</code> package</b></td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_densesolver" style="color: #000077; text-decoration-line: none;">densesolver</a></td><td width="15"> </td><td>Dense linear system solver</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_ssolve" style="color: #000077; text-decoration-line: none;">ssolve</a></td><td width="15"> </td><td>Symmetric dense linear system solver</td></tr>
<tr align="left" valign="top"><td colspan="2"> </td></tr>
<tr align="left" valign="top"><td bgcolor="#E8E8E8" colspan="3"><b><code>SpecialFunctions</code> package</b></td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_airyf" style="color: #000077; text-decoration-line: none;">airyf</a></td><td width="15"> </td><td>Airy functions</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_bessel" style="color: #000077; text-decoration-line: none;">bessel</a></td><td width="15"> </td><td>Bessel functions</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_betaf" style="color: #000077; text-decoration-line: none;">betaf</a></td><td width="15"> </td><td>Beta function</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_chebyshev" style="color: #000077; text-decoration-line: none;">chebyshev</a></td><td width="15"> </td><td>Chebyshev polynomials</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_dawson" style="color: #000077; text-decoration-line: none;">dawson</a></td><td width="15"> </td><td>Dawson integral</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_elliptic" style="color: #000077; text-decoration-line: none;">elliptic</a></td><td width="15"> </td><td>Elliptic integrals</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_expintegrals" style="color: #000077; text-decoration-line: none;">expintegrals</a></td><td width="15"> </td><td>Exponential integrals</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_fresnel" style="color: #000077; text-decoration-line: none;">fresnel</a></td><td width="15"> </td><td>Fresnel integrals</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_gammafunc" style="color: #000077; text-decoration-line: none;">gammafunc</a></td><td width="15"> </td><td>Gamma function</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_hermite" style="color: #000077; text-decoration-line: none;">hermite</a></td><td width="15"> </td><td>Hermite polynomials</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_ibetaf" style="color: #000077; text-decoration-line: none;">ibetaf</a></td><td width="15"> </td><td>Incomplete beta function</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_igammaf" style="color: #000077; text-decoration-line: none;">igammaf</a></td><td width="15"> </td><td>Incomplete gamma function</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_jacobianelliptic" style="color: #000077; text-decoration-line: none;">jacobianelliptic</a></td><td width="15"> </td><td>Jacobian elliptic functions</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_laguerre" style="color: #000077; text-decoration-line: none;">laguerre</a></td><td width="15"> </td><td>Laguerre polynomials</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_legendre" style="color: #000077; text-decoration-line: none;">legendre</a></td><td width="15"> </td><td>Legendre polynomials</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_psif" style="color: #000077; text-decoration-line: none;">psif</a></td><td width="15"> </td><td>Psi function</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_trigintegrals" style="color: #000077; text-decoration-line: none;">trigintegrals</a></td><td width="15"> </td><td>Trigonometric integrals</td></tr>
<tr align="left" valign="top"><td colspan="2"> </td></tr>
<tr align="left" valign="top"><td bgcolor="#E8E8E8" colspan="3"><b><code>Statistics</code> package</b></td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_binomialdistr" style="color: #000077; text-decoration-line: none;">binomialdistr</a></td><td width="15"> </td><td>Binomial distribution</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_chisquaredistr" style="color: #000077; text-decoration-line: none;">chisquaredistr</a></td><td width="15"> </td><td>Chi-Square distribution</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_correlation" style="color: #000077; text-decoration-line: none;">correlation</a></td><td width="15"> </td><td>Pearson/Spearman correlation coefficients</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_correlationtests" style="color: #000077; text-decoration-line: none;">correlationtests</a></td><td width="15"> </td><td>Hypothesis testing: correlation tests</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_descriptivestatistics" style="color: #000077; text-decoration-line: none;">descriptivestatistics</a></td><td width="15"> </td><td>Descriptive statistics: mean, variance, etc.</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_fdistr" style="color: #000077; text-decoration-line: none;">fdistr</a></td><td width="15"> </td><td>F-distribution</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_hqrnd" style="color: #000077; text-decoration-line: none;">hqrnd</a></td><td width="15"> </td><td>High quality random numbers generator</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_jarquebera" style="color: #000077; text-decoration-line: none;">jarquebera</a></td><td width="15"> </td><td>Hypothesis testing: Jarque-Bera test</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_mannwhitneyu" style="color: #000077; text-decoration-line: none;">mannwhitneyu</a></td><td width="15"> </td><td>Hypothesis testing: Mann-Whitney-U test</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_normaldistr" style="color: #000077; text-decoration-line: none;">normaldistr</a></td><td width="15"> </td><td>Normal distribution</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_poissondistr" style="color: #000077; text-decoration-line: none;">poissondistr</a></td><td width="15"> </td><td>Poisson distribution</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_stest" style="color: #000077; text-decoration-line: none;">stest</a></td><td width="15"> </td><td>Hypothesis testing: sign test</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_studenttdistr" style="color: #000077; text-decoration-line: none;">studenttdistr</a></td><td width="15"> </td><td>Student's t-distribution</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_studentttests" style="color: #000077; text-decoration-line: none;">studentttests</a></td><td width="15"> </td><td>Hypothesis testing: Student's t-test</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_variancetests" style="color: #000077; text-decoration-line: none;">variancetests</a></td><td width="15"> </td><td>Hypothesis testing: F-test and one-sample variance test</td></tr>
<tr align="left" valign="top"><td><a class="toc" href="file:///C:/Users/Paul/Desktop/alglib-2.6.0.vb6/vb6/manual.vb6.html#unit_wsr" style="color: #000077; text-decoration-line: none;">wsr</a></td><td width="15"> </td><td>Hypothesis testing: Wilcoxon signed rank test<br /><br /><br /><br />Sources:<br />1. <a href="https://www.alglib.net/">https://www.alglib.net/</a><br />2. <a href="https://sites.google.com/site/chandanprogrammingdocs/platforms-frameworks/alglib">https://sites.google.com/site/chandanprogrammingdocs/platforms-frameworks/alglib</a><br />3. <a href="https://newtonexcelbach.com/2010/05/20/installing-alglib-with-excel-vba/">https://newtonexcelbach.com/2010/05/20/installing-alglib-with-excel-vba/</a><br /><br /><br /></td></tr>
</tbody></table>
<div style="color: #333333; font-family: Georgia, "Times New Roman", serif; font-size: 13.3333px; text-align: justify;">
<span style="background-color: white;">Here you can download GPL-licensed version of ALGLIB. Commercial users may use GPL-licensed code as unlimited trial version. But if you want to distribute something that includes GPL-ed code, you have to either distribute it under GPL too or <a href="http://www.alglib.net/commercial.php" rel="nofollow" style="color: #663399;">buy commercial license</a>.</span></div>
<table style="background-color: #eee8dd; color: #333333; font-family: Georgia, "Times New Roman", serif; font-size: 13.3333px; margin: 0px;"><tbody>
<tr><td bgcolor="#f0f0f0" colspan="7" style="padding: 1px 4px; vertical-align: top;"><div style="font-weight: bold; padding: 0.2em;">
3.x branch</div>
</td></tr>
<tr><td colspan="7" style="padding: 1px 4px; vertical-align: top;"><a href="http://bugs.alglib.net/changelog_page.php" rel="nofollow" style="color: #663399;">Change Log</a></td></tr>
<tr><td style="padding: 1px 4px; vertical-align: top;"><b>alglib-3.1.0.cpp</b></td><td style="padding: 1px 4px; vertical-align: top;"> </td><td style="padding: 1px 4px; vertical-align: top;"><b><a href="http://www.alglib.net/translator/re/alglib-3.1.0.cpp.zip" rel="nofollow" style="color: #663399;">zip</a></b></td><td style="padding: 1px 4px; vertical-align: top;"> </td><td style="padding: 1px 4px; vertical-align: top;"><b><a href="http://www.alglib.net/translator/re/alglib-3.1.0.cpp.tgz" rel="nofollow" style="color: #663399;">tgz</a></b></td><td style="padding: 1px 4px; vertical-align: top;"> </td><td style="padding: 1px 4px; vertical-align: top;">C++ version</td></tr>
<tr><td style="padding: 1px 4px; vertical-align: top;"><b>alglib-3.1.0.csharp</b></td><td style="padding: 1px 4px; vertical-align: top;"> </td><td style="padding: 1px 4px; vertical-align: top;"><b><a href="http://www.alglib.net/translator/re/alglib-3.1.0.csharp.zip" rel="nofollow" style="color: #663399;">zip</a></b></td><td style="padding: 1px 4px; vertical-align: top;"> </td><td style="padding: 1px 4px; vertical-align: top;"><b><a href="http://www.alglib.net/translator/re/alglib-3.1.0.csharp.tgz" rel="nofollow" style="color: #663399;">tgz</a></b></td><td style="padding: 1px 4px; vertical-align: top;"> </td><td style="padding: 1px 4px; vertical-align: top;">C# version (100% managed code)</td></tr>
<tr><td colspan="7" style="padding: 1px 4px; vertical-align: top;"> </td></tr>
<tr><td bgcolor="#f0f0f0" colspan="7" style="padding: 1px 4px; vertical-align: top;"><div style="font-weight: bold; padding: 0.2em;">
pre-3.x releases</div>
</td></tr>
<tr><td colspan="7" style="padding: 1px 4px; vertical-align: top;"><span style="font-size: 11.3333px;">Pre-3.x releases are not compatible with 3.x branch;<br />however, they will be there for languages which were not ported to 3.x yet</span></td></tr>
<tr><td colspan="5" style="padding: 1px 4px; vertical-align: top;"><b><a href="http://www.alglib.net/translator/re/alglib-2.6.0.mpfr.zip" rel="nofollow" style="color: #663399;">alglib-2.6.0.mpfr.zip</a></b></td><td style="padding: 1px 4px; vertical-align: top;"> </td><td style="padding: 1px 4px; vertical-align: top;">Multiple precision version (MPFR)</td></tr>
<tr><td colspan="5" style="padding: 1px 4px; vertical-align: top;"><b><a href="http://www.alglib.net/translator/re/alglib-2.6.0.freepascal.zip" rel="nofollow" style="color: #663399;">alglib-2.6.0.freepascal.zip</a></b></td><td style="padding: 1px 4px; vertical-align: top;"> </td><td style="padding: 1px 4px; vertical-align: top;">FreePascal version</td></tr>
<tr><td colspan="5" style="padding: 1px 4px; vertical-align: top;"><b><a href="http://www.alglib.net/translator/re/alglib-2.6.0.delphi.zip" rel="nofollow" style="color: #663399;">alglib-2.6.0.delphi.zip</a></b></td><td style="padding: 1px 4px; vertical-align: top;"> </td><td style="padding: 1px 4px; vertical-align: top;">Delphi version</td></tr>
<tr><td colspan="5" style="padding: 1px 4px; vertical-align: top;"><b><a href="http://www.alglib.net/translator/re/alglib-2.6.0.vb6.zip" rel="nofollow"><span style="color: red;">alglib-2.6.0.vb6.zip</span></a></b></td><td style="padding: 1px 4px; vertical-align: top;"> </td><td style="padding: 1px 4px; vertical-align: top;">VBA version</td></tr>
</tbody></table>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-88670522619771049312021-01-12T23:08:00.000-08:002021-01-12T23:08:00.256-08:00Numerical or financial Math: VBA / EXCEL / VB6<a href="https://drive.google.com/file/d/1TGIhrlV2MO0-KDEUojlNK0k2BUd5zh4p/view?usp=sharing">Download from ME</a><br />
<a href="http://www.axelvogt.de/axalom/index.html#Numerics__Excel__various_financial_stuff">Download from SOURCE</a><br />
<br />
<div style="text-align: justify;">
<b><u>Classical binomial model</u></b></div>
<div style="text-align: justify;">
<b><br /></b></div>
<div style="text-align: justify;">
<span style="color: orange;"> CRR_optimized.zip</span></div>
<div style="text-align: justify;">
Simplifying algebraic terms in the binomial model of Cox-Ross-Rubinstein for american options the</div>
<div style="text-align: justify;">
speed against the usual solution (cf Haug's book for a code) is improved by a factor of 40 - 50.</div>
<div style="text-align: justify;">
That file contains the Excel code (with inline comments as user docu) and examples for testing.</div>
<div style="text-align: justify;">
But it does not heal the combinatorical curse of double looping for American options ...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> LeisenReimer_NP.zip</span></div>
<div style="text-align: justify;">
A binomial Leisen-Reimer tree avoids the oscillations of the usual binomial trees through a proper</div>
<div style="text-align: justify;">
choice of the tree parameters. Besides that the geometry is the same as for CRR the speed</div>
<div style="text-align: justify;">
is improved by a factor better than 40. The Excel file contains code and examples for testing.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> LeisenReimer_properties.zip</span></div>
<div style="text-align: justify;">
The code for the above has been translated into a DLL (C source code included) for better speed to</div>
<div style="text-align: justify;">
play with the properties of the model within Excel (like extrapolation or what may happen through</div>
<div style="text-align: justify;">
numerical differentiation). I am somewhat too lazy to comment the various results.</div>
<div style="text-align: justify;">
Speed is about 880 prices per second for a 257 step tree and a 4-point Richardson extrapolation</div>
<div style="text-align: justify;">
gives an exactness of 6 - 7 digits for the european case (starting with 65 steps), while extrapolation</div>
<div style="text-align: justify;">
is not really helpfull in the case of early exercise.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><u>Pricing</u></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">BS&Vol_CodyMiller.xls.zip </span></div>
<div style="text-align: justify;">
This uses an improved version of the former through a better cumulative normal distribution (due to Miller and Cody) and gives almost IEEE correctness in Excel (relativ error ~ 2 DBL_EPSILON). On my Office PC it needs ~ 1 sec for 100000 prices, computing volatility needs 10 times more. It also works for non-practical situations of data (strike=1.5*spot, time=some days, vol ~ 0.25%).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">BS&Vol.xls.zip, BS&Vol_increased.xls.zip</span></div>
<div style="text-align: justify;">
Excel sheets to compute Black-Scholes prices and retrieve volatility. Yes, there are many such files. The point is: these here are robust (working with the option premium and switch to 'normed' situations) and the volatility is computed in the spirit of a fairly good initial guess (similar to Jaeckel). The 2nd Excel file shows how one can increase the usual solution for vol and still gets given prices. This (partially) solves the problem, that vol numerical is not well-defined as the inverse of a price. It even works in extreme situations (like vol ~ 10% and small time or very far off the money). A more sound solution has to use C code (or similar), but it is just a stripped down version of that. Of course that depends on the quality of the pricing function and to judge it one can not use Excel.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">perf_tst.zip</span></div>
<div style="text-align: justify;">
Performance test for Black-Scholes prices for pure VBA vs a C DLL (docu)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> pdf_pricing.zip</span></div>
<div style="text-align: justify;">
BS pricing through integrating the pay off against the risk neutral density, both over spots and</div>
<div style="text-align: justify;">
logarithmic moneyness (i.e. Breeden-Litzenberger). That Excel sheet uses the DLL of the</div>
<div style="text-align: justify;">
integrator in integratorXL. A Maple sheet (as pdf) is included explaining the manipulations and</div>
<div style="text-align: justify;">
gives estimations, where to cut off to restrict to integration to finite intervalls</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;">CarrMadan_Fourier.pdf</span></div>
<div style="text-align: justify;">
Simple example for Madan & Carr's Fourier method on option pricing: the case of constant volatility (which means: Fourier method for Black-Scholes) using integration (instead of FFT).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><u>Stochastic volatility / Heston</u></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;"> Heston93-Check.pdf</span></div>
<div style="text-align: justify;">
Heston's model using characteristic functions (Maple)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">Heston93_opt.zip</span></div>
<div style="text-align: justify;">
Optimized Excel solution for Heston's model using Gauss integration (undiscounted option values), including reference values (from Maple) and graphics for the integrands (VolVol = 0 is missing), short documentation.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">Heston93_pdf.zip</span></div>
<div style="text-align: justify;">
Smiles and probability function (RND) for Heston's model with Excel; if strikes are extreme that may fail for the smiles</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> Heston93_withDLL.zip</span></div>
<div style="text-align: justify;">
DLL version for Heston in Excel: one fast and one exact solution, gives back prices and/or volatility, VolVol=0 is still missing (as I found to allow reaching it my solution become instable due to oscillation)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;">Heston-MC.pdf</span></div>
<div style="text-align: justify;">
A Monte-Carlo simulation for the Heston market model in Maple, somewhat slow ...</div>
<div style="text-align: justify;">
and I should have added 'reflecting/absorbing barrier' to be chosen ...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;">Heston_MC_hf_10.pdf</span></div>
<div style="text-align: justify;">
A speed-improved version of the above in Maple 10, almost 100 times faster</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><u>Stochastic volatility / other models</u></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> NIG_tiny_withDLL.zip</span></div>
<div style="text-align: justify;">
Normal Inverse Gauss option pricer (with Esscher transform correction), Excel + DLL, and</div>
<div style="text-align: justify;">
a Maple worksheet with short explanations, cf Schoutens book "Levy Proccess in Finance"</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;"> VG_Pricer_short(Maple).pdf</span></div>
<div style="text-align: justify;">
A 'brute' option pricer for the Variance Gamma model (Madan, Carr, Chang 1998) in Maple</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> VG_small.zip</span></div>
<div style="text-align: justify;">
Variance Gamma model in Excel + DLL; it uses a gamma distribution pdfGamma(a,x)</div>
<div style="text-align: justify;">
which accepts large numerical arguments, short docu</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Correction for VG (both Maple and Excel+DLL, 02. Jan 2014)</div>
<div style="text-align: justify;">
The paper has a typo. To get the correct values one has to use - theta instead of + theta.</div>
<div style="text-align: justify;">
With that change of sign on input level the values are correct (without modifying the code),</div>
<div style="text-align: justify;">
see the discussion here.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><u>Volatility smile</u></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> GatheralSmileExample.zip</span></div>
<div style="text-align: justify;">
Example for Gatheral's parsimonious arbitrage-free implied volatility parametrization, in Maple as pdf (24 Oct 2004: corrected some errors in that sheet)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> GatheralSmile_Vola.zip</span></div>
<div style="text-align: justify;">
Fitting Gatheral's model to a given, empirical volatility smile. The estimates for initial parameters are computed from data only. This is a pure Excel solution with least square fitting likewise either through Excel's solver or a Levenberg-Marquardt method included as VBA project, short docu</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> GatheralSmile_Vola_DLL.zip</span></div>
<div style="text-align: justify;">
This is the same as above, but uses a DLL for fitting to speed things up.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> PatSmile.zip</span></div>
<div style="text-align: justify;">
Continous family of smiles produced by the SABR model of Pat Hagan et al</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;"> SABR.pdf</span></div>
<div style="text-align: justify;">
Code in C and Visual Basic SABR_Code_VB_and_C.txt and some graphs for the SABR model various</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;"> European_Dividend_Alan_Example.pdf</span></div>
<div style="text-align: justify;">
Numerical example for european options and discontinous dividends, valuation method due to Alan Lewis</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;"> ExtremeSmiles.htm</span></div>
<div style="text-align: justify;">
Example using actual historical data for 'extreme' smiles and vol term structures after crashes</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">VolaTermDAX.zip</span></div>
<div style="text-align: justify;">
Example using actual historical data for 'visible volatility ATM term structure', if front month expires</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;"> Div1Year.gif</span></div>
<div style="text-align: justify;">
Dividend strip for the Swiss market regarding tax (both tax variants) in money and SMI points</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;">Exane.gif</span></div>
<div style="text-align: justify;">
Example for sticky strike vs sticky delta from exane.com</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><u>Risk neutral density</u></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;">a_brute_way_to_get_a_RND_from_option_prices.pdf</span></div>
<div style="text-align: justify;">
Using polynomial approximations and normal distribution for tails one can find a RND (over log</div>
<div style="text-align: justify;">
space), which is good enough to recover option prices and to get reasonable statistical results.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;"> From_a_brute_RND_to_a_NIG_estimation.pdf</span></div>
<div style="text-align: justify;">
Having descriptive statistics for a RND one can fit a normal inverse Gauss model against option prices</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> RND_statistics_example.zip</span></div>
<div style="text-align: justify;">
This Excel sheet (with pure VBA code) shows, how one can estimate the descriptive statistics for</div>
<div style="text-align: justify;">
a RND directly from option prices using an approach similar to the VIX construction (where I use</div>
<div style="text-align: justify;">
a somewhat different discretization), no interpolation of volatility or prices is needed.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Here is a sketchy explanation for the method: Explaining the method in <span style="color: #ea9999;">RND_statistics_example.pdf.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<u><b>Numerics / Excel</b></u></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;"> Testing Excel 2010.pdf</span></div>
<div style="text-align: justify;">
This is a test report about Excel 2010 (beta), which seems to be a good improvemet over older versions. For testing essentially taking an input in decimal number it is converted to the nearest IEEE 754 double, then it is feed to Maple to be evaluated with higher precision, which then is rounded to the nearest IEEE again to have a correct result (as far as it can be correct). Only then it makes sense to compare against some floating point result given by Excel. For that a work around for the limitation of 15 decimal places in Excel is needed and provided as well.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><u>Numerics / Excel / various financial stuff</u></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">simpleGarch11.zip</span></div>
<div style="text-align: justify;">
A simple GARCH(1,1) in Excel (using optimizer for the maximum likelihood and the statistics</div>
<div style="text-align: justify;">
for the time series) to estimate DAX spot volatility</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">Hist_Vol.zip</span></div>
<div style="text-align: justify;">
How to compute historical volatility in Excel with a variable time frame</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><u>Numerics / Excel / fitting</u></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">LMfit_logistic.zip</span></div>
<div style="text-align: justify;">
Example for Levenberg-Marquardt in Excel (pure VBA), which shows the essential algorithm</div>
<div style="text-align: justify;">
(ie: the linear algebra and the numerics), short documentation</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> LMfit3_with_weights.zip</span></div>
<div style="text-align: justify;">
It contains the complete usual Levenberg-Marquardt in Excel (pure VBA, dim = 1) and a version,</div>
<div style="text-align: justify;">
which allows weightings of data points</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> LeastSquareFitting.zip</span></div>
<div style="text-align: justify;">
An Excel interface to a DLL (containing a Levenberg-Marquardt method) for fitting curves against</div>
<div style="text-align: justify;">
data and estimating the parameters of the curve. The objective function is given within VBA and</div>
<div style="text-align: justify;">
can be chosen freely, short docu. As example Gatheral's SVI volatility smile is treated.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">LMfit_logistic.zip</span></div>
<div style="text-align: justify;">
Example for Levenberg-Marquardt in Excel (pure VBA), which shows the essential algorithm</div>
<div style="text-align: justify;">
(ie: the linear algebra and the numerics), short documentation</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">LMfit3_with_weights.zip</span></div>
<div style="text-align: justify;">
It contains the complete usual Levenberg-Marquardt in Excel (pure VBA, dim = 1) and a version,</div>
<div style="text-align: justify;">
which allows weightings of data points</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> LeastSquareFitting.zip</span></div>
<div style="text-align: justify;">
An Excel interface to a DLL (containing a Levenberg-Marquardt method) for fitting curves against</div>
<div style="text-align: justify;">
data and estimating the parameters of the curve. The objective function is given within VBA and</div>
<div style="text-align: justify;">
can be chosen freely, short docu. As example Gatheral's SVI volatility smile is treated.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><u>Numerics / Excel / cumulative normal distribution</u></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> cdfN2010_June.zip</span></div>
<div style="text-align: justify;">
This is my best cdf Normal in pure VBA. Absolute errors are fine, of course. The relative errors</div>
<div style="text-align: justify;">
are below 2 DBL_EPSILON or 3 ULPs over the full range (to be seen for negative inputs only)</div>
<div style="text-align: justify;">
as far as I am aware of it (i.e. I have no 'proof' for that, just tests, see the graphical test results).</div>
<div style="text-align: justify;">
Testing was done as sketched in the report "Testing Excel 2010.pdf" (so: precisely at IEEE level).</div>
<div style="text-align: justify;">
This is even much better than Excel 2010 (as of today), though I used my good old Excel 2000,</div>
<div style="text-align: justify;">
which I prefer (and yes, tiny relative errors at the left tail may be a little bit a matter of taste ...).</div>
<div style="text-align: justify;">
A short test docu sketches, how explicit test values and results can be achieved using Maple.</div>
<div style="text-align: justify;">
xmasNormDist.zip cdf Normal (following George Marsaglia) for Excel, pure VBA with 19 digits (using data type CDec),short documentation</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">cdfN_GMsimple_Test.zip</span></div>
<div style="text-align: justify;">
cdf Normal (following George Marsaglia) for Excel (pure VBA), simplified version, precise test</div>
<div style="text-align: justify;">
data calculated using Maple</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> bivariateNormal_Series.zip</span></div>
<div style="text-align: justify;">
This Excel sheet contains fast codes for the cumulative normal distribution in dimensions</div>
<div style="text-align: justify;">
1 and 2 through series developments up to machine precision in Excel, short documentation</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> cdfN_trivariate_mini.zip</span></div>
<div style="text-align: justify;">
This Excel sheet (with DLL for integration) compares implementations for the cumulative normal</div>
<div style="text-align: justify;">
distribution up to dimension 3 (references are given in the code and the short documentation), so</div>
<div style="text-align: justify;">
it is a kind of study (but not meant to be a complete overview). For high precision one would have</div>
<div style="text-align: justify;">
to switch to other environments of course, for example one can use LCC.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><u>Numerics / Excel / random number generation</u></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">RNG_normal.xls.zip</span></div>
<div style="text-align: justify;">
This is an Excel solution with DLL for 3 very fast and good pseudo-random generators for normal</div>
<div style="text-align: justify;">
distributed numbers (Ziggurat [Marsaglia], ZIGNOR [Doornik], FastNorm3 [Wallace]). Speed is</div>
<div style="text-align: justify;">
about 1 sec for 10 Mio numbers.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><u>Numerics / Excel / more ...</u></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">Brent_netlib.zip</span></div>
<div style="text-align: justify;">
Excel / VBA code for Brent's method to find Zeros or Minima in dimension 1. That are ports from</div>
<div style="text-align: justify;">
the Netlib C library. The original C sources have reasonable inline comments and serve as docu,</div>
<div style="text-align: justify;">
they are included.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> integratorXL.zip</span></div>
<div style="text-align: justify;">
Numerical quadrature for Excel using a DLL which takes function names as arguments, short docu</div>
<div style="text-align: justify;">
applications: pricing by the risk neutral density (see above) and bi- and tri-variate normal densities</div>
<div style="text-align: justify;">
(to be done).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> integratorXL_doubleIntegral.zip</span></div>
<div style="text-align: justify;">
The above integrator can be used to compute double integrals in Excel and as an example this is</div>
<div style="text-align: justify;">
shown for the cumulative bivariate normal distribution starting from a Gauss kernel only, short docu.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> integrator_GaussKronrod.zip</span></div>
<div style="text-align: justify;">
An adaptive Gauss-Kronrod integrator, purely in VBA.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">FFT_xl.zip</span></div>
<div style="text-align: justify;">
Fast Fourier Transform in Excel with VBA, that does not use Excel's slow and ugly built-in solution.The docu explains conventions used, handling is shown by examples through a workbook.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><u>Numerics / Excel / functional</u></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;"> wrapGSL.zip</span></div>
<div style="text-align: justify;">
Wrapper to use GSL from Excel: files</div>
<div style="text-align: justify;">
There is an Excel sheet enclosed how to work with function names as arguments (as Excel/VBA</div>
<div style="text-align: justify;">
does not have function pointers) for special functions and complex functions. One needs the free</div>
<div style="text-align: justify;">
GNU GSL lib to be installed and for a reasonable handling one should consult the documentation</div>
<div style="text-align: justify;">
for namings, arguments etc. That are the binary GSL files (DLLs) needed: gslWIN32_1.3.zip</div>
<div style="text-align: justify;">
Documentation has to be done ...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: orange;">Function_as_Arguments_in_Excel.zip</span></div>
<div style="text-align: justify;">
Several ways how to live with functions as arguments in Excel, VBA does not have this. Usually I do not work with classes, but here it is seems to be one way out. That sheet grew from a discussion on a forum, the main example is integration by Gauss-Legendre.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;">Working_with_Array_Functions_and_DLLs_in_Excel_VBA.pdf</span></div>
<div style="text-align: justify;">
This is a tutorial how to work with numerical arrays using Excel and DLLs: reading and writing from VBA to DLL and vice versa (so it covers the old question "how to pass array data?"), using functions having array arguments or array outputs. It does not use SDK and all the overhead. And it is only through commented examples in C and VBA, so it is a bit technical, but practical (and not thought as an introduction to DLL & VBA). Here are the sources (Excel sheet, C code and DLL).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;">Reading_and_Writing_Arrays_across_Excel_and_DLLs.pdf</span></div>
<div style="text-align: justify;">
That tutorial is a short variant of "Working with Array Functions" having just implementation in mind. Here are the sources (Excel sheet, C code and DLL).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ea9999;"> Reading_and_writing_strings_between_VBA_and_DLLs.txt</span></div>
<div style="text-align: justify;">
This is for working with C-strings between VBA and a DLL, quite similar to the numerical case above. Here are the sources (Excel sheet, C code and DLL).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
All the VBA projects are unprotected while the source code for DLLs usually is not provided.</div>
<div style="text-align: justify;">
Many are just pure VBA code, but if a sheet uses a DLL then set the correct pathes within the</div>
<div style="text-align: justify;">
project. Open Excel's debug window to watch results being printed out.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
22 Feb 2015: uploaded BS&Vol_CodyMiller.zip</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
23 Dec 2010: uploaded Reading_and_writing_strings_between_VBA_and_DLLs.zip</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
24 Jun 2010: uploaded cdfN2010_June</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
31 Mar 2010: uploaded Testing Excel 2010.pdf</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
31 Oct 2009: uploaded BS&Vol</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
17 Aug 2006: uploaded Integrator_GaussKronrod</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
11 May 2006: uploaded some files around the risk neutral density from option prices</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
18 Jan 2006: uploaded high precision for cumulative normal in dim <= 3 to the LCC subdirectory</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
18 Dec 2005: uploaded cdfN_trivariate_mini.zip</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
17 Dec 2005: reorganized to give a better overview</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
12 Dec 2005: linked to my LCC files - giving 100 digits precision</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
12 Nov 2005: uploaded Reading_and_Writing_Arrays_across_Excel_and_DLLs.pdf</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
01 Nov 2005: uploaded Working_with_Array_Functions_and_DLLs_in_Excel_VBA.pdf</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
31 Oct 2005: uploaded LeastSquareFitting</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
30 Oct 2005: uploaded Function_as_Arguments_in_Excel</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
23 Oct 2005: uploaded gslWIN32_1.3.zip (the DLLs for GSL)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
06 Oct 2005: uploaded GatheralSmile_Vola_DLL, a DLL version</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
06 Oct 2005: uploaded GatheralSmile_Vola</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
06 Aug 2005: uploaded LeisenReimer_properties</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
09 Jul 2005: uploaded LeisenReimer_NP</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
08 Jul 2005: uploaded CRR_optimized</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
07 Jul 2005: uploaded Heston_MC_hf_10.pdf (speed in Maple 10 improved)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
28 May 2005: uploaded Levenberg-Marquardt with weights</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
27 May 2005: uploaded RNG_normal</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
02 Apr 2005: uploaded Brent_netlib</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
24 Mar 2005: uploaded IntegratorXL_doubleIntegral</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
19 Feb 2005: uploaded FFT_xl</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
30 Jan 2005: uploaded bivariateNormal_Series (contains the deleted cdfN_Marsaglia_Taylor.txt)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
28 Dec 2004: uploaded pdf_pricing.zip</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
29 Nov 2004: uploaded cdfN_Marsaglia_Taylor.txt</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
31 Oct 2004: uploaded integratorXL and ExtremeSmiles.htm</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
24 Oct 2004: corrected some errors in GatheralSmileExample.zip</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
22 Oct 2004: uploaded simpleGarch11.zip</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
June 2004: Yahoo killed my web space, so I use this one from now on ...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
This software is provided "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the author be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Source:</b></div>
<div style="text-align: justify;">
<a href="http://www.axelvogt.de/axalom/index.html#Numerics__Excel__various_financial_stuff">http://www.axelvogt.de/axalom/index.html#Numerics__Excel__various_financial_stuff</a></div>
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-1995573165662683342020-12-23T08:36:00.000-08:002020-12-23T08:36:00.943-08:00Happy Holidays !<a href="https://drive.google.com/file/d/1c3SlyGVmhBPSZogpy0Y-AXk40Pa7bEmC/view?usp=sharing">Download from ME</a><br />
<a href="https://yadi.sk/d/OX_eg4lxR6mgN">Download from Yandex</a><br />
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/jjHjpSmJnSs" width="560"></iframe>
</div>
<br />
<br />
<pre class="vb" style="background-color: white; box-sizing: border-box; color: #212529; font-size: 11.7px; margin-bottom: 1rem; overflow: auto;"><span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Option</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Explicit</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Declare</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> PlaySound Lib <span style="box-sizing: border-box; color: maroon;">"winmm.dll"</span> Alias <span style="box-sizing: border-box; color: maroon;">"PlaySoundW"</span> (<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> lpszName <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> hModule <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">ByVal</span> dwFlags <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> Const SND_ASYNC = &H1
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> Const pi = 3.14
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span> Draw(v <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, cc <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>) <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Boolean</span>
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Dim</span> dh <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>, c <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>, d <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>, x <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>, y <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>, w <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, i <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, dx <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>, dy <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>, _
gr <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>, r <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>, g <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>, b <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Single</span>, n <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">String</span>
Rnd v: cc = cc + 2
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">If</span> cc <= 0 <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Then</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Exit</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">ElseIf</span> cc <= 100 <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Then</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">If</span> cc = 2 <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Then</span> n = App.Path & <span style="box-sizing: border-box; color: maroon;">"\1.wav"</span>: PlaySound StrPtr(n), 0, SND_ASYNC
dh = 100 / cc: x = Rnd * 0.75 + 0.125 + (cc * ((v <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">And</span> 2) - 1)) / 1000: y = Sin((cc - 2) / 200 * pi) * 0.75
w = 21 - cc * 0.2: d = 255 / w: c = 0
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Do</span>: c = 255 / w: DrawWidth = w: PSet (x, y), RGB(c, c, 0): w = w - 1: <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Loop</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">While</span> w
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">ElseIf</span> cc < 300 <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Then</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">If</span> cc = 102 <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Then</span> n = App.Path & <span style="box-sizing: border-box; color: maroon;">"\0.wav"</span>: PlaySound StrPtr(n), 0, SND_ASYNC
dh = (cc - 100) / 200: gr = (1 - Cos(dh * pi * 0.25)) * dh: dx = Rnd * 0.75 + 0.125 + ((v <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">And</span> 2) - 1) / 10
dy = 0.75 - gr: i = Rnd * 100 + 200: gr = 1 - 0.2 ^ (dh * 5): dh = 1 - dh
r = Rnd * 0.8 + 0.2: g = Rnd * 0.8 + 0.2: b = Rnd * 0.8 + 0.2
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">If</span> cc < 150 <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Then</span>
b = (1 - (cc - 100) / 50) * 3
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">For</span> w = (cc - 100) * 2 <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">To</span> 1 <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Step</span> -1
DrawWidth = w * 5: c = cc / w * b: PSet (dx, dy), RGB(c * r, c * g, c * b)
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Next</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">If</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Do</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">While</span> i
c = Rnd * pi * 2: d = gr * (Rnd * 0.8 + 0.2) * 0.5: x = Cos(c) * d + dx: y = Sin(c) * d + dy
w = (dh * 6) * Abs(Sin((cc + i) / 10 * pi)) + 1: c = 0
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Do</span>: c = 512 / w * dh: DrawWidth = w: PSet (x, y), RGB(c * r, c * g, c * b): w = w - 1: <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Loop</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">While</span> w
i = i - 1
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Loop</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Else</span>: Draw = <span style="box-sizing: border-box; color: #00c2ff; font-weight: bold;">True</span>: cc = 0: v = v - Rnd * 100
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">If</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Function</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span> Form_Click()
Unload Me
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span> Form_Load()
Randomize
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span> Form_Resize()
Scale (0, 1)-(1, 0)
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span>
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Private</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span> tmrTimer_Timer()
<span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">Static</span> a1 <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, a2 <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, c1 <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>, c2 <span style="box-sizing: border-box; color: #151b8d; font-weight: bold;">As</span> <span style="box-sizing: border-box; color: #f660ab; font-weight: bold;">Long</span>
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">If</span> a1 = 0 <span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">Then</span> a1 = -(Rnd * 100) - 1: a2 = a1 - 2: c2 = -150
<span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Call</span> Cls: Draw a1, c1: Draw a2, c2
<span style="box-sizing: border-box; color: #8d38c9; font-weight: bold;">End</span> <span style="box-sizing: border-box; color: #e56717; font-weight: bold;">Sub</span></pre>
<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-45309419451722154992020-12-07T21:05:00.000-08:002020-12-07T21:05:03.925-08:00See matrix content in pure ASCII: Show an array content in the console !<span style="background-color: white; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><b>Source: </b>Gagniuc, Paul A. (2017). Markov Chains: From Theory to Implementation and Experimentation. USA, NJ: John Wiley & Sons. pp. 1–235. ISBN 978-1-119-38755-8.</span><br />
<br />
<pre style="background: rgb(0, 24, 0); color: #55cc66;"><span style="color: #508050; font-weight: bold;">Function</span> MatrixPaint<span style="color: #808030;">(</span>w<span style="color: #808030;">,</span> d<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">ByVal</span> m <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">Variant</span><span style="color: #808030;">,</span> a<span style="color: #808030;">,</span> n<span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">ByVal</span> msg <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span>
<span style="color: #508050; font-weight: bold;">Dim</span> e<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span>
<span style="color: #508050; font-weight: bold;">ReDim</span> e<span style="color: #808030;">(</span><span style="color: #778c77;">1</span> <span style="color: #508050; font-weight: bold;">To</span> d<span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">As</span> <span style="color: #508050; font-weight: bold;">String</span>
d <span style="color: #808030;">=</span> <span style="color: #508050; font-weight: bold;">Len</span><span style="color: #808030;">(</span>a<span style="color: #808030;">)</span>
q <span style="color: #808030;">=</span> <span style="color: #cc5555;">"| "</span>
h <span style="color: #808030;">=</span> <span style="color: #cc5555;">"|_____|"</span>
l <span style="color: #808030;">=</span> vbCrLf
<span style="color: #508050; font-weight: bold;">For</span> i <span style="color: #808030;">=</span> <span style="color: #808030;">(</span>w <span style="color: #808030;">-</span> <span style="color: #778c77;">1</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">To</span> d
<span style="color: #508050; font-weight: bold;">If</span> i <span style="color: #808030;">=</span> <span style="color: #808030;">(</span>w <span style="color: #808030;">-</span> <span style="color: #778c77;">1</span><span style="color: #808030;">)</span> <span style="color: #508050; font-weight: bold;">Then</span> t <span style="color: #808030;">=</span> t <span style="color: #808030;">&</span> l <span style="color: #808030;">&</span> <span style="color: #cc5555;">"."</span>
t <span style="color: #808030;">=</span> t <span style="color: #808030;">&</span> <span style="color: #cc5555;">"_____."</span>
<span style="color: #508050; font-weight: bold;">If</span> i <span style="color: #808030;">=</span> d <span style="color: #508050; font-weight: bold;">Then</span> t <span style="color: #808030;">=</span> t <span style="color: #808030;">&</span> l <span style="color: #808030;">&</span> <span style="color: #cc5555;">"| "</span> <span style="color: #808030;">&</span> n <span style="color: #808030;">&</span> <span style="color: #cc5555;">" | "</span>
<span style="color: #508050; font-weight: bold;">Next</span> i
<span style="color: #508050; font-weight: bold;">For</span> i <span style="color: #808030;">=</span> w <span style="color: #508050; font-weight: bold;">To</span> d
e<span style="color: #808030;">(</span>i<span style="color: #808030;">)</span> <span style="color: #808030;">=</span> <span style="color: #508050; font-weight: bold;">Mid</span><span style="color: #808030;">(</span>a<span style="color: #808030;">,</span> i<span style="color: #808030;">,</span> <span style="color: #778c77;">1</span><span style="color: #808030;">)</span>
t <span style="color: #808030;">=</span> t <span style="color: #808030;">&</span> e<span style="color: #808030;">(</span>i<span style="color: #808030;">)</span> <span style="color: #808030;">&</span> <span style="color: #cc5555;">" | "</span>
h <span style="color: #808030;">=</span> h <span style="color: #808030;">&</span> <span style="color: #cc5555;">"_____|"</span>
<span style="color: #508050; font-weight: bold;">Next</span> i
t <span style="color: #808030;">=</span> t <span style="color: #808030;">&</span> l <span style="color: #808030;">&</span> h <span style="color: #808030;">&</span> l
<span style="color: #508050; font-weight: bold;">For</span> i <span style="color: #808030;">=</span> w <span style="color: #508050; font-weight: bold;">To</span> d
<span style="color: #508050; font-weight: bold;">For</span> j <span style="color: #808030;">=</span> w <span style="color: #508050; font-weight: bold;">To</span> d
v <span style="color: #808030;">=</span> Round<span style="color: #808030;">(</span>m<span style="color: #808030;">(</span>i<span style="color: #808030;">,</span> j<span style="color: #808030;">)</span><span style="color: #808030;">,</span> <span style="color: #778c77;">2</span><span style="color: #808030;">)</span>
u <span style="color: #808030;">=</span> <span style="color: #508050; font-weight: bold;">Mid</span><span style="color: #808030;">(</span>q<span style="color: #808030;">,</span> <span style="color: #778c77;">1</span><span style="color: #808030;">,</span> <span style="color: #508050; font-weight: bold;">Len</span><span style="color: #808030;">(</span>q<span style="color: #808030;">)</span> <span style="color: #808030;">-</span> <span style="color: #508050; font-weight: bold;">Len</span><span style="color: #808030;">(</span>v<span style="color: #808030;">)</span><span style="color: #808030;">)</span>
<span style="color: #508050; font-weight: bold;">If</span> j <span style="color: #808030;">=</span> d <span style="color: #508050; font-weight: bold;">Then</span> o <span style="color: #808030;">=</span> <span style="color: #cc5555;">"|"</span> <span style="color: #508050; font-weight: bold;">Else</span> o <span style="color: #808030;">=</span> <span style="color: #cc5555;">""</span>
<span style="color: #508050; font-weight: bold;">For</span> b <span style="color: #808030;">=</span> w <span style="color: #508050; font-weight: bold;">To</span> d
<span style="color: #508050; font-weight: bold;">If</span> j <span style="color: #808030;">=</span> w And i <span style="color: #808030;">=</span> b <span style="color: #508050; font-weight: bold;">Then</span>
t <span style="color: #808030;">=</span> t <span style="color: #808030;">&</span> <span style="color: #cc5555;">"| "</span> <span style="color: #808030;">&</span> e<span style="color: #808030;">(</span>i<span style="color: #808030;">)</span> <span style="color: #808030;">&</span> <span style="color: #cc5555;">" "</span>
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">If</span>
<span style="color: #508050; font-weight: bold;">Next</span> b
t <span style="color: #808030;">=</span> t <span style="color: #808030;">&</span> u <span style="color: #808030;">&</span> v <span style="color: #808030;">&</span> o
<span style="color: #508050; font-weight: bold;">Next</span> j
t <span style="color: #808030;">=</span> t <span style="color: #808030;">&</span> l <span style="color: #808030;">&</span> h <span style="color: #808030;">&</span> l
<span style="color: #508050; font-weight: bold;">Next</span> i
MatrixPaint <span style="color: #808030;">=</span> msg <span style="color: #808030;">&</span> <span style="color: #cc5555;">" M["</span> <span style="color: #808030;">&</span> <span style="color: #508050; font-weight: bold;">Val</span><span style="color: #808030;">(</span>d <span style="color: #808030;">-</span> w <span style="color: #808030;">+</span> <span style="color: #778c77;">1</span><span style="color: #808030;">)</span> <span style="color: #808030;">&</span> <span style="color: #cc5555;">","</span> <span style="color: #808030;">&</span> <span style="color: #508050; font-weight: bold;">Val</span><span style="color: #808030;">(</span>d <span style="color: #808030;">-</span> w <span style="color: #808030;">+</span> <span style="color: #778c77;">1</span><span style="color: #808030;">)</span> <span style="color: #808030;">&</span> <span style="color: #cc5555;">"]"</span> <span style="color: #808030;">&</span> l <span style="color: #808030;">&</span> t <span style="color: #808030;">&</span> l
<span style="color: #508050; font-weight: bold;">End</span> <span style="color: #508050; font-weight: bold;">Function</span></pre>
Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-3013488609572889155.post-2176379386697458752020-11-25T13:46:00.000-08:002020-11-25T13:46:02.628-08:00Pool 3D game with Artificial Intelligence in VB6 (by Mikle)<div style="text-align: center;">
<div style="text-align: justify;">
Look at my new game. Written, as usual, on the VB6, size - 32 KB (compressed by UPX). Works on Windows from XP to 10, does not require installation. System requirements are minimal (all in ReadMe). You can play together or against the AI, or watch two AI battle.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="https://drive.google.com/file/d/1lAyGQONX4TU5W-BzfG3BP_AN5_EqvutP/view?usp=sharing">Download from ME</a></div>
<div style="text-align: justify;">
<a href="https://yadi.sk/d/nP5oDBahqMV6m">Download from Yandex</a></div>
<div style="text-align: justify;">
<br /></div>
<br /></div>
<div style="text-align: center;">
<iframe allowfullscreen="true" allowtransparency="true" frameborder="0" height="315" scrolling="no" src="https://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2FMicrosoftVB%2Fvideos%2F3478650168876820%2F&show_text=0&width=560" style="border: none; overflow: hidden;" width="560"></iframe>
</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-25803757159316173702020-11-18T00:58:00.000-08:002020-11-18T00:58:01.757-08:00PE 64 bit vs 32 bit (by Davide Chiappetta)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg88nK9ssqX_ll07Vnxv3uk5CNQ_kRmTZHgp24YuT4kxoWeIuz6FmeaP5UsgkrZae6NPyBGaaZKxCOUqf8X4LC0f03GFKstlYzdFBL282Eu0jLC67VDbn17m3DWYScI_rNRgsp9kckebhE/s1600/80489775_2900395570012784_2237777424068640768_n.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="801" data-original-width="929" height="550" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg88nK9ssqX_ll07Vnxv3uk5CNQ_kRmTZHgp24YuT4kxoWeIuz6FmeaP5UsgkrZae6NPyBGaaZKxCOUqf8X4LC0f03GFKstlYzdFBL282Eu0jLC67VDbn17m3DWYScI_rNRgsp9kckebhE/s640/80489775_2900395570012784_2237777424068640768_n.jpg" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy1G1t-y6X1gtA8gYTfjD-GRLgi_gwDIgdc_SqmIVbcx4fKxTQva7b19VA6qZQOS8LY4O3axPuAlbllTBiSCIjH_Ucbph2zmXuIpNKHSiUX4_i_V2oQJ27M4SCZurvADcjemWmXYpgeNg/s1600/81004929_2900395170012824_1533391191112941568_n.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="800" data-original-width="800" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy1G1t-y6X1gtA8gYTfjD-GRLgi_gwDIgdc_SqmIVbcx4fKxTQva7b19VA6qZQOS8LY4O3axPuAlbllTBiSCIjH_Ucbph2zmXuIpNKHSiUX4_i_V2oQJ27M4SCZurvADcjemWmXYpgeNg/s640/81004929_2900395170012824_1533391191112941568_n.jpg" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUdrsnb5qfPXMaCMwdZWcp7Aa_mSd3_V5obbhwhyphenhyphenCWYRzazhZfZf8LroCDIRn7q1JhkMTf_bR5US_maKYmC53ovLa60PIvrFauzOIfeM96KK1gcEdYATXed5Ifx_wKZ-lFUD3hcy9GBp4/s1600/81264501_2900394893346185_8061126647874584576_o.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1092" data-original-width="1600" height="436" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUdrsnb5qfPXMaCMwdZWcp7Aa_mSd3_V5obbhwhyphenhyphenCWYRzazhZfZf8LroCDIRn7q1JhkMTf_bR5US_maKYmC53ovLa60PIvrFauzOIfeM96KK1gcEdYATXed5Ifx_wKZ-lFUD3hcy9GBp4/s640/81264501_2900394893346185_8061126647874584576_o.jpg" width="640" /></a></div>
<br />
Source:<br />
<a href="https://davidechiappetta.wordpress.com/">https://davidechiappetta.wordpress.com/</a><br />
<a href="http://davidechiappetta.blogspot.com/">http://davidechiappetta.blogspot.com/</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-5407181365888250462020-10-14T00:54:00.000-07:002020-10-14T00:54:01.545-07:00Array, array, array (by Davide Chiappetta)<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN33r-Lx0cd69MnXhazZoSIXGAhKbmDZT3x8VjNa2r-EQQ8McH2m15y_i_LTCt3ZzWgUDdMnwaiySicHKgcE3UuZAQVisQQ0TkUpZ0FDfz94Bu5H0WRI35AIoNnVjJmVk7IFmHHLBXOy0/s1600/30425168_1888887637830254_3916256743299672048_o.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="687" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN33r-Lx0cd69MnXhazZoSIXGAhKbmDZT3x8VjNa2r-EQQ8McH2m15y_i_LTCt3ZzWgUDdMnwaiySicHKgcE3UuZAQVisQQ0TkUpZ0FDfz94Bu5H0WRI35AIoNnVjJmVk7IFmHHLBXOy0/s640/30425168_1888887637830254_3916256743299672048_o.png" width="458" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1qSrKYky_IjsnOs2uefn0hvNVgeF4B9BhOaezp2GSSrr59KPrn40LPiIMe0aBD04jOx1KJ4p1lvA94yViRXarrkZKPn4zVgxTOnDAvvyPk4hhok6ilxLi7SS0z05ed7k89slZiCKodCU/s1600/30848800_1887874927931525_7115212708955818789_o.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1145" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1qSrKYky_IjsnOs2uefn0hvNVgeF4B9BhOaezp2GSSrr59KPrn40LPiIMe0aBD04jOx1KJ4p1lvA94yViRXarrkZKPn4zVgxTOnDAvvyPk4hhok6ilxLi7SS0z05ed7k89slZiCKodCU/s640/30848800_1887874927931525_7115212708955818789_o.png" width="458" /></a></div>
<br />
<br />
Source:<br />
<a href="https://davidechiappetta.wordpress.com/">https://davidechiappetta.wordpress.com/</a><br />
<a href="http://davidechiappetta.blogspot.com/">http://davidechiappetta.blogspot.com/</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3013488609572889155.post-46854417670198078232020-09-08T00:31:00.000-07:002020-09-08T00:31:00.148-07:00Matrix multiplication - math in code (by Davide Chiappetta)<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTtPSKWGVipLBQuhXD1yIuKeP-UiA_p9tcyUWzuNFjTcBBfcnxObmCtzNCmj2XcJlPC2J6gtMtImFss0g1AxqabLUq80dlO0IHNkfoJZftlI_HHo4kcKCiC03wUHnhNrPcFos2xZYVsVw/s1600/mt1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1239" data-original-width="1600" height="494" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTtPSKWGVipLBQuhXD1yIuKeP-UiA_p9tcyUWzuNFjTcBBfcnxObmCtzNCmj2XcJlPC2J6gtMtImFss0g1AxqabLUq80dlO0IHNkfoJZftlI_HHo4kcKCiC03wUHnhNrPcFos2xZYVsVw/s640/mt1.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrtFVOCSw7aZM5Y9QlHDsVn00Wuy6xdmFIlgsJu-fNAhE6-qBY7Bl6BraAkLau-ichGPBNQRrl7cpvZ4kQftS6Fxp1XB1sIeoT1kGAn-JgFyYQcJiw3sgMrl8YG3HKUuHIlZCcb7d4WH4/s1600/mt2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1286" data-original-width="1600" height="513" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrtFVOCSw7aZM5Y9QlHDsVn00Wuy6xdmFIlgsJu-fNAhE6-qBY7Bl6BraAkLau-ichGPBNQRrl7cpvZ4kQftS6Fxp1XB1sIeoT1kGAn-JgFyYQcJiw3sgMrl8YG3HKUuHIlZCcb7d4WH4/s640/mt2.jpg" width="640" /></a></div>
<br />
Source:<br />
<a href="https://www.facebook.com/ChiappettaDavide/photos/a.634314959954201/2180671991985149/?type=3&theater">https://www.facebook.com/ChiappettaDavide/photos/a.634314959954201/2180671991985149/?type=3&theater</a>Unknownnoreply@blogger.com0